Open supergem3000 opened 8 months ago
14. 多处理器系统与中断机制 (jyywiki.cn) 本节课很多内容建立在课程提供的AbstractMachine之上。AbstractMachine提供了一些API,使在其之上写代码可以完全使用C而不使用汇编。 中断机制 理解中断 硬件上的中断:一根线,告诉处理器,有事来了。剩下的行为交给处理器处理。 处理器无情地执行指令同时,有情地响应外部的打断。
14. 多处理器系统与中断机制 (jyywiki.cn) 本节课很多内容建立在课程提供的AbstractMachine之上。AbstractMachine提供了一些API,使在其之上写代码可以完全使用C而不使用汇编。
理解中断 硬件上的中断:一根线,告诉处理器,有事来了。剩下的行为交给处理器处理。 处理器无情地执行指令同时,有情地响应外部的打断。
中断的响应 首先检查处理器配置是否允许中断。如果处理器关闭中断,则忽略。 (x86)询问中断控制权获得中断号,保存寄存器到堆栈,跳转到IDT[n]指定的地址,并设置处理器状态(比如中断到来的时候关闭中断)
IDT[n]
中断奠定操作系统“霸主定位”,操作系统内核随意开关中断。应用程序没有中断,死循环也可以被打断。
中断引入了并发。最早操作系统的并发性就来自于中断(而不是多处理器)
例子:如何实现中断安全的自旋锁?远没有想象的简单,多处理器和中断是两个并发源。
这里很难说清楚,多看下课程视频多处理器和中断 (50 行实现操作系统内核) [南京大学2023操作系统-P14] (蒋炎岩)_哔哩哔哩_bilibili的第三部分,再多查阅资料吧。
中断处理程序的秘密 中断处理程序:
Context *handler(Event ev, Context *ctx) { // ... }
中断发生后,不能执行“任何代码”,否则随便某条指令就把之前的状态机永久破坏了。 除非把中断瞬间的处理器状态保存下来,中断返回时把寄存器恢复。(上下文切换) 这部分代码需要操作系统实现地非常精巧。举例:恢复某个寄存器后,这个寄存器就不能再用了,要不就白恢复了。
中断的响应 首先检查处理器配置是否允许中断。如果处理器关闭中断,则忽略。 (x86)询问中断控制权获得中断号,保存寄存器到堆栈,跳转到
IDT[n]
指定的地址,并设置处理器状态(比如中断到来的时候关闭中断)中断奠定操作系统“霸主定位”,操作系统内核随意开关中断。应用程序没有中断,死循环也可以被打断。
中断引入了并发。最早操作系统的并发性就来自于中断(而不是多处理器)
例子:如何实现中断安全的自旋锁?远没有想象的简单,多处理器和中断是两个并发源。
中断处理程序的秘密 中断处理程序:
中断发生后,不能执行“任何代码”,否则随便某条指令就把之前的状态机永久破坏了。 除非把中断瞬间的处理器状态保存下来,中断返回时把寄存器恢复。(上下文切换) 这部分代码需要操作系统实现地非常精巧。举例:恢复某个寄存器后,这个寄存器就不能再用了,要不就白恢复了。