千里之行始于足下

CSAPP阅读笔记(6)-异常控制流

Posted on By Peter Yang

这一章讲述异常控制,这里的异常控制并不简单地指程序代码中的Exception,而是具有更广泛意义的概念。它包括计算机系统中各个层次中的异常控制,从底层的中断,到程序员层的Exception,都属于这一范围。

从底层来说,异常控制是指由中断机制支持的异常处理。一般是由硬件触发,比如I/O访问、缺页等,共分四种:interrupt、fault、abort、trap。其中interrupt是由I/O设备发出的中断引起的,采用异步方式,处理数据收取等;trap是内部异常,采用同步方式,一般的系统调用以及int指令就对应这种方式;fault是可恢复的错误,也是同步方式,比如内存访问缺页或页保护等;abort是最严重的错误且不可恢复,基本上是直接当机。

中断处理程序的入口地址由中断向量表维护,一般最大可有256项,具体各项的意义在此不赘述,需要的时候再查。另,X86架构中,实模式下,采用的是中断向量表,表项就是入口地址,而在保护模式下,采用的是中断描述符表,这个表项包含的信息稍多一些,具体就不在这里说明了,可以查阅计算机组成原理相关资料。

好,下面稍稍提高下层次,关注一下进程。由于现在的系统都是多任务的,即同时有多个进程在运行,操作系统维护各进程状态并采取一定策略让它们不断地切换执行,这样的运行模式称为并发。并发的进程间存在两个问题,一个是内存缺页,这会引发fault来将相关的页调度进内存中;另一个是进程切换,由于切换时需保存当前进程运行现场,需要进行一定的操作,这些操作全部都是内核程序,而用户程序是无法运行的,所以需要中断机制来进行特权级切换,将用户权级提升为内核权级,保存现场,回到用户级,执行切换后的进程,如此往复。    后面涉及的还有Signal和进程管理方面的内容,比较琐碎,不总结了。