掘友等级
获得徽章 20
前两天技术群里有小伙伴说,用 Glide 加载本地图片会把 APP 卡死,刚开始觉得可能是本地图片的 I/O 操作发生在 UI 线程
debug 才发现并不是,,文件的读写都是跑在 Glide 的线程(如图)
水个沸点记录一下,,
早上在地铁上突然想通了怎么进入内核态的问题,记录一下
CPU (ARM体系)现在正处于 usr 模式下工作,也就是用户模式
在执行 I/O 指令时,需要将 CPU 置为特权模式。但在用户模式下,是没有权限实现模式转换的
之前我一直纠结的点是:存在一条指令可以切换 CPU 的工作模式。那么,那这条指令为什么只有操作系统能用,应用程序凭什么不能用?
查了资料后才幡然醒悟,原来切换 CPU 模式并不是一条指令,而是中断请求,在 ARM 中用的中断指令是 SWI
当 CPU 执行到 SWI 指令时,会从用户模式切换到特权模式下,接下来 Linux 根据中断向量表来执行对应的中断函数,这部分执行的是内核代码。
所以,应用程序即使包含了切换工作模式的 SWI 指令,也只是会触发中断,最终执行的还是内核注册的中断函数,用户程序怎么都没办法在特权模式下执行指令。。。
本周末打算把 Linux 的进程调度好好看一遍,搞清楚进程切换, 线程切换和 CPU 工作模式的切换, 这三种哪个代价会更高?