7.1 异常

发布时间 2023-07-24 14:50:58作者: C~A

异常就是控制流中的突变,用来响应处理器状态中的某些变化。

在任何情况下,当处理器检测到有事件发生时,它就会通过一张叫做异常表(excep-tion table)的跳转表,进行一个间接过程调用(异常),到一个专门设计用来处理这类事件的操作系统子程序(异常处理程序(exception handler))。当异常处理程序完成处理后,根据引起异常的事件的类型,会发生以下3种情况中的一种:

1)处理程序将控制返回给当前指令Iaur,即当事件发生时正在执行的指令。

2)处理程序将控制返回给Iaex,如果没有发生异常将会执行的下一条指令。

3)处理程序终止被中断的程序。

异常处理

系统中每种异常都分配了一个唯一的异常号,在系统启动时操作系统分配和初始化一张异常表的跳转表,使得表目包含了异常处理程序的地址。异常表的起始地址放在一个异常基址寄存器的寄存器里。

异常的类别

中断

中断是异步发生的,是来自处理器外部的1/O设备的信号的结果。硬件中断不是由任何一条专门的指令造成的,从这个意义上来说它是异步的。硬件中断的异常处理程序常常称为中断处理程序(interrupt handler)。

陷阱

陷阱是有意的异常,是执行一条指令的结果。就像中断处理程序一样,陷阱处理程序将控制返回到下一条指令。陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。

故障

故障由错误情况引起,它可能能够被故障处理程序修正。当故障发生时,处理器将控制转移给故障处理程序。如果处理程序能够修正这个错误情况,它就将控制返回到引起故障的指令,从而重新执行它。否则,处理程序返回到内核中的abort例程,abort例程会终止引起故障的应用程序。

终止

终止是不可恢复的致命错误造成的结果,通常是一些硬件错误,比如DRAM或者SRAM位被损坏时发生的奇偶错误。终止处理程序从不将控制返回给应用程序。