中断与异常机制工作原理
1.软硬件分工:
- 硬件 —— 中断/异常响应: 捕获中断源发出的中断/异常请求,以一定方式响应,将处理器控制权交给特定的处理程序。
- 软件 —— 中断/异常处理程序: 识别中断/异常类型并完成相应的处理。
2.中断响应过程:
(中断向量:一个内存单元,存放中断处理程序入口地址和程序运行时所需的处理机状态字)
中断响应步骤:
① 设备发中断信号。
② 硬件保存现场(PC、PSW的内容)。
③ 根据中断码查表。
④ 把中断处理程序入口地址等推送到相应的寄存器。
⑤执行中断处理程序。
3.中断处理程序:
设计操作系统时,为每一类中断/异常事件编好相应的处理程序,并设置好中断向量表:
中断处理程序步骤:
①保存相关寄存器信息。
② 分析中断/异常的具体原因。
③执行对应的处理功能。
④恢复现场,返回被事件打断的程序。
4.实例:
- 打印机给CPU发中断信号。
- CPU处理完当前指令后检测到中断,判断出中断来源并向相关设备发确认信号。
- CPU开始为软件处理中断做准备:
(1)处理器状态被切换到内核态。
(2)在系统栈中保存被中断程序的重要上下文环境,主要是程序计数器PC、程序状态字PSW。 - CPU根据中断码查中断向量表,获得与该中断相关的处理程序的入口地址,并将PC设置成该地址,新的指令周期开始时,CPU控制转移到中断处理程序。
- 中断处理程序开始工作 :
(1)在系统栈中保存现场信息 。
(2)检查I/O设备的状态信息,操纵I/O设备或者在设备和内存之间传送数据等等。 - 中断处理结束时,CPU检测到中断返回指令,从系统栈中恢复被中断程序的上下文环境,CPU状态恢复成原来的状态,PSW和PC恢复成中断前的值,CPU开始一个新的指令周期。
5.x86处理器对中断的支持:
- 中断描述符表 (Interrupt Descriptor Table):采用门(gate) 描述符数据结构表示中断向量。
- 全局描述符表(Global Descriptor Table):在整个系统中,全局描述符表GDT只有一张(一个处理器对应一个GDT),GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址。