即使在一些写得很好的内核书籍中,我也找不到以下问题的正确答案:
*ISR=中断服务程序
*他们=本书的作者
最佳答案
中断通过首先保存当前 CPU 状态并强制程序计数器 (PC) 跳转到中断向量表的位置来捕获从用户空间到内核的执行。然后,该表提供了一个指向内核函数(序列)的指针,该函数保存当前进程状态并将中断 ID 映射到 ISR 的开始。当在 ISR 期间发生更高优先级的中断时,会发生相同的事件序列,除了正在运行的 ISR 和传入的中断都由同一个(内核)进程处理,因此没有进程进入休眠状态。
如果禁用了新中断,则当然会忽略它。但是,如果在处理器正在处理更高优先级的中断时启用中断,则该中断可能处于挂起状态。
ISR 是内核空间内的函数调用,需要分配自己的堆栈。如果抢占过多,可重入中断会导致堆栈溢出。大多数内核(包括 Linux 和 Windows)都有固定的堆栈大小。
关于linux-kernel - 被抢占的中断处理程序会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11779397/