gem-universe / blog

0 stars 0 forks source link

[操作系统]14. 多处理器系统与中断机制 #16

Open supergem3000 opened 8 months ago

supergem3000 commented 8 months ago

14. 多处理器系统与中断机制 (jyywiki.cn) 本节课很多内容建立在课程提供的AbstractMachine之上。AbstractMachine提供了一些API,使在其之上写代码可以完全使用C而不使用汇编。

中断机制

理解中断 硬件上的中断:一根线,告诉处理器,有事来了。剩下的行为交给处理器处理。 处理器无情地执行指令同时,有情地响应外部的打断。

中断的响应 首先检查处理器配置是否允许中断。如果处理器关闭中断,则忽略。 (x86)询问中断控制权获得中断号,保存寄存器到堆栈,跳转到IDT[n]指定的地址,并设置处理器状态(比如中断到来的时候关闭中断)

中断奠定操作系统“霸主定位”,操作系统内核随意开关中断。应用程序没有中断,死循环也可以被打断。

中断引入了并发。最早操作系统的并发性就来自于中断(而不是多处理器)

例子:如何实现中断安全的自旋锁?远没有想象的简单,多处理器和中断是两个并发源。

这里很难说清楚,多看下课程视频多处理器和中断 (50 行实现操作系统内核) [南京大学2023操作系统-P14] (蒋炎岩)_哔哩哔哩_bilibili的第三部分,再多查阅资料吧。

中断处理程序的秘密 中断处理程序:

Context *handler(Event ev, Context *ctx) {
  // ...
}

中断发生后,不能执行“任何代码”,否则随便某条指令就把之前的状态机永久破坏了。 除非把中断瞬间的处理器状态保存下来,中断返回时把寄存器恢复。(上下文切换) 这部分代码需要操作系统实现地非常精巧。举例:恢复某个寄存器后,这个寄存器就不能再用了,要不就白恢复了。