引言:

系统也必须能够对系统状态的变化做出反应,这些系统状态不是被内部程序变量捕获的,而且也不一定要和程序的执行相关。

**例如:**程序向磁盘请求数据,然后休眠,直到被通知说数据已就绪。当子进程终止时,创造这些子进程的父进程必须得到通知。

现代系统通过使控制流发生突变来对这些情况做出反应,我们把这些突变称为异常控制流(Exceptional Control Flow, ECF)

在硬件方面,硬件检测到的事件会触发控制突然到异常处理程序。

在操作系统方面,内核通过上下文切换,控制一个用户进行转移到另外一个用户进程。

在应用层,已经进程可以发送信号到另外一个进程,接收者可以到信号处理函数。

8.1 异常

8.1 异常介绍

异常(exception)就是控制流中的突变,用来响应处理器状态中的某些变化。图 8-1 展示了基本的思想。

image.png

出现异常之后,会查询异常表进行处理。执行异常处理程序。处理完成后会发生下面三种情况。

8.2 异常处理

异常表的起始地 址放在一个叫做异常表基址寄存器的特殊 CPU 寄存器里。

一旦硬件触发了异常,剩下的工作就是由异常处理程序在软件中完成。在处理程序处理完事件之后,它通过执行一条特殊的“从中断返回”指令,可选地返回到被中断的程序,该指令将适当的状态弹回到处理器的控制和数据寄存器中,如果异常中断的是一个用户程序,就将状态恢复为用户模式。

8.3 异常的类别

异常可以分为四类:中断(interrupt)、陷牌(trap)、故障(fault)和终止(abort)