我正在阅读有关现代CPU和操作系统中的中断处理,但我无法弄清楚一点:
只要某个硬件设备更改了CPU的中断引脚上的state
(电流/电压?),CPU就会在处理主要指令后停止并跳转以执行中断处理程序代码。现在假设中断处理程序代码必须在调度程序的数据结构中更改某种状态,但是在操作系统被中断之前,它也在相同的结构中摸索。这会导致混乱的数据,所以必须有一个解决方案。
我猜测操作系统和中断处理程序都使用信号量,通过一些原子比较/设置内存操作来实现,以保护共享数据结构。但是,如果操作系统在保持这样的信号量时被中断,则中断处理程序无法执行任何操作,并且中断将消失,因为忙于等待该信号量将永远不会将控制权返回给操作系统,因此锁定永远不会被释放。
这个问题是如何解决的?必须有一些我不知道的技巧......
答案 0 :(得分:1)
也许您缺少的硬件细节可以解释您的困惑。
每当发生硬件中断时,都会发生以下情况:
1 - CPU进入特权模式,进一步的硬件中断被禁用(通常是处理器标志寄存器中的一位),执行跳转到中断处理程序。
2 - 一旦OS中断处理完成,它就会重新启用硬件中断,因此可能会发生进一步的中断。
因此,简而言之,OS /中断处理程序可以控制何时允许硬件中断中断正常流程。 解决问题的一个简单方法就是让操作系统在弄乱这些数据结构时禁用硬件中断。 在实践中,事情变得更加复杂,以最大限度地减少中断延迟。
事情可能会从一种体系结构转变为另一种体系结构,但基本原则仍然是当一种情况发生时禁用其他硬件中断,并且可以启用/禁用它们(假设CPU在所需的特权模式下运行)。
检查结尾部分:http://en.wikibooks.org/wiki/X86_Assembly/Advanced_Interrupts