我正在阅读有关现代 CPU 和操作系统中的中断处理的信息,但我无法弄清楚一点:
一旦某个硬件设备改变了state
CPU 中断引脚上的(电流/电压?),CPU 在处理完当前指令后停止并跳转执行中断处理程序代码。现在想象一下中断处理程序代码必须改变调度程序数据结构中的某种状态,但是在操作系统被中断之前,它也在相同的结构中摸索。这会导致数据混乱,所以必须有一个解决方案。
我猜操作系统和中断处理程序都使用信号量,通过一些原子比较/设置内存操作来保护共享数据结构。但是,如果操作系统在持有这样的信号量时被中断,中断处理程序将无法执行任何操作,中断就会消失,因为忙于等待该信号量将永远不会将控制权返回给操作系统,因此永远不会释放锁。
这个问题是如何解决的?一定有一些我错过的技巧......