为什么我们可以在软件中断情况下休眠而在硬件中断情况下不允许? 例如系统调用可以休眠,ISR 不能休眠。
最佳答案
当您通过进程(即系统调用)进入内核代码时,内核被认为处于进程上下文中。这意味着内核是代表进程执行的。内核的执行与用户层同步,因此可以访问用户层。也可以调用休眠函数,因为调度程序能够调度新进程。
当您从硬件源(即中断)进入内核时,内核被称为处于中断上下文。内核的执行相对于用户级是异步的,您不能对在用户级执行的内容做任何假设。例如,某些资源可能处于某种不一致的状态。因此,代码无法阻塞,因为调度程序无法调度新进程。
Rubini 的书 Linux Device Drivers, 3rd edition 很好地解释了这种差异,即 freely available on the web .
关于linux - 为什么软件中断可以休眠而硬件中断不允许休眠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20681620/