1.基本概念
1.1 异常/内中断
1.1.1 说明
- CPU内部产生的意外事件。通常情况下,是在CPU执行一条指令的时候,由CPU在其内部检测到的、与正在执行的指令相关的同步事件。
- 异常的检测由CPU自动完成,无需通过外部信号进行通知。
1.2.1 栗子🌰
Cache缺失。
1.2 中断/外中断
1.2.1 说明
- CPU外部的设备向CPU发出的中断请求。通常情况下,是由外部设备触发,与当前正在执行的指令无关的异步事件。
- 外部IO设备通过中断请求信号线向CPU提出中断请求。
- CPU每执行完一条指令就检查中断请求信号线,如果检测到中断请求,则进入中断响应周期。
- 中断不会阻止指令的正常执行。
- CPU必须通过INTR或NMI来获取中断源的信息,才能知道是哪个外部设备产生了何种中断。
1.2.2 栗子🌰
键盘输入、打印机缺纸、用户按下ESC键、时钟中断(定时器到时)、网络数据包到达。
2.分类
2.1 异常的分类
2.1.1 硬故障中断
2.1.1.1 说明
由硬件出现异常引起。
2.1.1.2 栗子🌰
存储器校验错、总线错误。
2.1.2 程序性异常/软件中断
2.1.2.1 说明
在CPU内部因执行指令而引起的异常事件。
2.1.2.2 栗子🌰
整除0、溢出(浮点数下溢按0处理,不属于中断;浮点数上溢才属于中断)、断点、单步追踪、非法指令、地址越界、缺页、虚拟存储器失效。
Cache缺失是由硬件实现的,无需调出处理程序进行处理。
2.1.2.3 分类
故障(Fault)
- 故障指在引起故障的指令执行后,执行结束前被检测到的异常事件。
- 对于缺页、缺段异常事件,经处理后,可将所需要的页或段调入到主存,然后回到发生故障的指令继续执行。
- 对于非法操作码、除数为0的异常事件,由于无法通过异常处理程序恢复故障,因此无法回到断点处继续执行,并终止进程的执行。
自陷/陷阱/陷入(Trap)
事先在程序中用一条特殊指令或通过某种方式设定特殊控制标志来人为的设置一个“陷阱”,当CPU执行到该指令时,就会根据陷阱类型进行相应的处理,处理完成后回到当前自陷指令的下一条指令继续执行。
Ps
当自陷指令为转移指令时,将不会回到自陷指令处,而是去往转移指令处继续执行。
X86机器的断点设置和单步追踪就是通过陷阱机制实现的。
执行自陷指令时,会无条件或有条件的调出操作系统内核程序进行执行。
终止(Abort)
- 在指令执行过程中发生了使计算机无法继续执行的硬件故障,并且只能使程序终止执行。
- 终止事件的处理:调用中断服务重启系统。
- 终止与外中断同属于硬件中断。
2.2 中断的分类
2.2.1 可屏蔽中断
- 此类中断请求通过中断请求线INTR向CPU发送。
- CPU可以通过中断控制器设置相应的屏蔽字来屏蔽指定的中断请求,被屏蔽的中断请求将无法被送往CPU。
2.2.2 不可屏蔽中断
- 此类中断请求通过专门的不可屏蔽中断请求线NMI向CPU发送。
- 此类请求一般很紧急,无法被屏蔽。
3.响应过程
3.1 关中断
在下一步保存断点和程序状态的过程中不能被新的中断打断,因此要关中断,以禁止响应新的中断。关中断是通过将中断允许触发器(IF)置0实现的。
3.2 保存断点和程序状态
为保证在中断处理结束后能够回到程序断点处继续执行,并同时支持中断嵌套,通常将程序断点、PSW寄存器的内容压入栈中。
3.3 识别异常/中断并转移到相应的处理程序
3.3.1 说明
异常通常采用软件识别的方式;中断则既采用软件识别也采用硬件识别的方式。
3.3.2 分类
软件识别
CPU内部会设置一个异常状态寄存器,用于记录异常原因,然后操作系统通过异常或中断查询程序按优先级查询该寄存器,先查询到的先处理。
硬件识别/向量中断
操作系统会查询中断向量表以快速找到对应的处理程序。中断向量表中的每个中断向量都对应一个中断类型号,而每个中断向量对应一个中断处理程序的首地址。
中断响应过程是不可被打断的。
中断服务程序的作用:从PC中取出中断服务程序的第一条指令开始执行,直至中断返回。
整个中断处理过程是在软/硬件协同下实现的。
CPU可以在用户态和核心态下检测和响应中断。