中断

深入理解系统中断

整个操作系统就是一个中断驱动的死循环,操作系统原理如果用一行代码解释,下面这样再合适不过了。

while(true) {
  doNothing();
}

其他所有事情都是由操作系统提前注册的中断机制和其对应的中断处理函数完成,我们点击一下鼠标,敲击一下键盘,执行一个程序,都是用中断的方式来通知操作系统帮我们处理这些事件,当没有任何中断事件时,它就乖乖停在死循环里不出来。

所以,中断,非常重要,它也是理解整个操作系统的根基。

分类

interrupt 中断

interrupt由外部设备触发,外部设备有比如说鼠标、键盘、电池等等。interrupt 可以进一步分成可屏蔽中断不可屏蔽中断

可屏蔽中断常常是 io 设备的请求,不可屏蔽中断经常是内存读写错误、电池掉电这样灾难性的错误必须处理。

异常 exception

CPU 执行指令时产生的异常引起,比如除零异常

INT 指令

由程序(通常是系统调用)或任务显式通过 INT n 等指令触发。

处理

感觉无论是来自软件还是硬件的中断,不论是硬件还是软件处理的中断,都有

用到的部件有哪些

  • 中断描述符
    存放一个中断号对应的中断程序的地址和其他信息

  • 中断描述符表 IDT
    中断描述符按顺序排列组成的数组

  • IDTR
    寄存器,存放着数组的头指针指向的地址和 limit 等信息。这个寄存器会在 bootloader 阶段指定

流程

获取中断号,关中断,跳转到对应地址,保存寄存器,执行中断程序,恢复寄存器,开中断,iret 跳转回去

系统调用

int 80 就是软中断的一种。Syscall 是快速系统调用,简化了检查的步骤。参考 syscall 分析

posted @ 2023-08-20 14:45  giacomo捏  阅读(18)  评论(0编辑  收藏  举报