第8章 异常控制流
8.1 异常
当处理器检测到有事件发生时,它会通过一张叫做异常表的跳转表,进行一个间接过程调用,到一个专门设计用来处理这类时间的操作系统子程序(异常处理程序)。
1. 异常处理
系统启动时,操作系统分配和初始化一张称为异常表的跳转表,使得条目k包含异常k的处理程序的地址。在运行时,处理器检测到发生了一个事件,并且确定了相应的异常号k。随后,处理器触发异常,通过异常表的条目k转到相应的处理程序。
异常表的起始地址放在异常表基址寄存器中。
2.异常类别
四类:中断、陷阱、故障、终止。
-
中断: 中断时异步发生的,是来自处理器外部的I/O设备的信号的结果。
-
陷阱:陷阱的最重要用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。普通函数运行在用户模式,它只能访问与调用函数相同的栈。系统调用运行在内核模式,内核模式允许系统调用执行指令,并访问定义在内核中的栈。
每个系统调用都有一个唯一的整数号,对应于一个到内核中跳转表的偏移量。
-
故障:是由错误情况引起,可能能被故障处理程序修正。当故障发生时,处理器将控制转移给故障处理程序,若处理程序能够修正这个错误情况,它将控制返回给引起故障的指令,从而重新执行它,否则,处理程序返回到内核中的abort例程,终止引起故障的应用程序。
-
终止:处理程序将控制返回给abort例程,该例程会终止这个应用程序。
8.2 进程
定义:一个执行中的程序的实例。
系统中每个程序都是运行在某个进程的上下文中的,包括存放在存储器的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。
当用户向外壳输入一个可执行目标文件的名字,并运行一个程序时,外壳会创建一个新的进程,然后在这个新进程的上下文中来运行这个可执行目标文件。
1. 逻辑控制流
进程是轮流使用处理器的。每个进程执行它的流的一部分,然后被抢占(暂时挂起),然后轮到其他进程。对于一个运行在这些进程之一的上下文中的程序,它看上去就像是在独占地使