为什么我们可以在软件中断的情况下睡眠,而在硬件中断时不允许这种情况? 例如当ISR无法入睡时,系统调用可以休眠。
答案 0 :(得分:6)
当您通过进程(即系统调用)输入内核代码时,内核被称为处于进程上下文。这意味着内核是代表进程执行的。内核的执行与用户级同步,因此可以访问用户级。也可以调用休眠函数,因为调度程序能够安排新进程。
当您从硬件源(即中断)进入内核时,内核被称为处于中断上下文。内核的执行在用户级别上是异步的,您不能对在用户级别执行的内容做任何假设。例如,某些资源可能处于某种不一致的状态。因此,代码无法阻止,因为调度程序无法安排新进程。
这一区别在Rubini的书 Linux设备驱动程序,第3版中得到了很好的解释,即freely available on the web。
答案 1 :(得分:0)