我正在阅读关于mondern和操作系统中的中断处理的文章,但我不明白有一点:
一旦一些硬件设备改变了state (电流/电压?)在CPU的中断引脚上,CPU在处理当前指令后停止并跳转执行中断处理程序代码。现在假设中断处理程序代码必须改变调度程序的数据结构中的某种状态,但是在操作系统被中断之前,它也在相同的结构中摸索。这将导致数据混乱,因此必须有一个解决方案。
我想操作系统和中断处理程序都使用信号量,通过一些原子比较/设置内存操作来保护共享数据结构。但是,如果操作系统在持有这样一个信号量时被中断,中断处理程序就不能做任何事情,中断就会消失,因为忙着等待信号量将永远不会将控制返回到操作系统,因此锁永远不会释放。
这个问题是如何解决的?一定有什么诡计我错过了..。
发布于 2013-10-16 17:18:37
也许一个你缺少的硬件细节可以解释你的困惑。
每当硬件中断发生时,就会发生以下情况:
1- CPU进入特权模式,进一步的硬件中断被禁用(通常是处理器标志寄存器中的一点),执行跳转到中断处理程序。
2-一旦操作系统中断处理完成,它就会重新启用硬件中断,这样就可以发生进一步的中断。
因此,简而言之,OS/中断处理程序可以控制何时允许硬件中断中断正常流。解决问题的一个简单方法就是让操作系统禁用硬件中断,同时破坏这些数据结构。在实践中,事情变得更加复杂,以尽量减少中断延迟。
事情可以从一种架构改变到另一种架构,但基本原理仍然是,当发生进一步的硬件中断时被禁用,并且可以启用/禁用它们(前提是CPU在所需的特权模式下运行)。
检查这个部分的结尾部分:Interrupts
https://stackoverflow.com/questions/18336714
复制相似问题