中断信号的作用
- 作用
- 允许处理器执行正常控制流之外的代码
- 中断与进程上下文切换的区别
- 中断或异常处理程序执行的代码不是一个进程。
- 相比于上下文切换,中断的上下文很少,需要时间更少
中断和异常
- 中断(CPU外其他设备产生)
- 可屏蔽中断:可被屏蔽,屏蔽后控制单元忽略该中断
- 非屏蔽中断:少数几个危机事件引起非屏蔽中断(如硬件故障)
异常(CPU控制单元产生)
- 处理器探测异常
- 故障
- 陷阱
- 异常终止
- 编程异常(软中断)
- 编程者发出请求时发生
- 处理器探测异常
中断描述符表(IDT)
- 存储中断向量及对应的中断或异常处理程序的入口地址
- IDT包含的三种类型描述符
- 任务门:中断信号发生时,必须取代当前进程的那个进程的TSS选择符放在任务门中
- 中断门: 包含端选择符和中断或异常处理程序的段内偏移量
- 陷阱门:与中断门类似。
中断和异常的硬件处理
- 详见P146
初始化中断描述符表
异常处理
- 异常处理程序的标准结构
- 在内核堆栈保存大多数寄存器的内容
- 对异常进行处理
- 从异常处理函数中退出
- 异常处理程序的标准结构
中断处理
- 与异常处理的主要区别: 中断到达时,一个完全无关的进程可能在运行
- 三种主要类型的中断:
- I/O中断
- 时钟中断
- 处理器间中断
- I/O中断处理步骤
- 在内核态堆栈中保存IRQ的值和寄存器的内容
- 为正在给IRQ线服务的PIC发送一个应答
- 执行共享这个IRQ的所有设备的中断服务例程
- 跳到ret_from_intr()的地址后终止