0

我正在阅读有关现代 CPU 和操作系统中的中断处理的信息,但我无法弄清楚一点:

一旦某个硬件设备改变了stateCPU 中断引脚上的(电流/电压?),CPU 在处理完当前指令后停止并跳转执行中断处理程序代码。现在想象一下中断处理程序代码必须改变调度程序数据结构中的某种状态,但是在操作系统被中断之前,它也在相同的结构中摸索。这会导致数据混乱,所以必须有一个解决方案。

我猜操作系统和中断处理程序都使用信号量,通过一些原子比较/设置内存操作来保护共享数据结构。但是,如果操作系统在持有这样的信号量时被中断,中断处理程序将无法执行任何操作,中断就会消失,因为忙于等待该信号量将永远不会将控制权返回给操作系统,因此永远不会释放锁。

这个问题是如何解决的?一定有一些我错过的技巧......

4

1 回答 1

1

也许您缺少的硬件细节可以解释您的困惑。

每当发生硬件中断时,都会发生以下情况:

1 - CPU 进入特权模式,进一步的硬件中断被禁用(通常在处理器标志寄存器中的一个位),执行跳转到中断处理程序。

2 - 一旦操作系统中断处理完成,它会重新启用硬件中断,因此可能会发生更多中断。

因此,简而言之,操作系统/中断处理程序可以控制何时允许硬件中断中断正常流程。解决您的问题的一个简单方法是让操作系统在弄乱这些数据结构的同时禁用硬件中断。在实践中,为了最小化中断延迟,事情变得更加复杂。

事情可以从一种架构改变到另一种架构,但基本原则仍然是在发生一种情况时禁用进一步的硬件中断,并且可以启用/禁用它们(前提是 CPU 以所需的特权模式运行)。

检查这个的结尾部分:http ://en.wikibooks.org/wiki/X86_Assembly/Advanced_Interrupts

于 2013-10-16T17:18:37.927 回答