8.1 异常
异常是异常控制流的一种形式,它一部分由硬件实现,一部分由操作系统实现。
处理器状态会被编码为不同的位和信号,状态的变化称为事件。处理器检测到有事件发生时,他就会通过一张叫做异常表的跳转表,进行一个间接过程调用(异常),到一个专门设计用来处理这列事件的操作系统子程序(异常处理程序(exception handler))。
系统中可能的每种类型的异常都分配了一个唯一的非负整数的异常号。在系统启动时,操作系统分配和初始化一张称为异常表的跳转表,使得表目k包含异常k的处理程序的地址。
异常可以分为四类:中断、陷阱、故障和终止:

8.2 进程
进程的经典定义就是一个执行中程序的实例。系统中的每个程序都运行在某个进程的上下文中,上下文是由程序正确运行所需的状态组成的。这个状态包括存放在内存中的程序的代码和数据,他的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。
进程提供给应用程序的关键抽象:
- 一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器。
- 一个私有的地址空间,它提供一个假象,好像我们的程序独占的使用内存系统。
下图为一个运行着三个进程的系统:

进程为每个程序提供它自己的私有空间地址。下图为x86-64 Linux进程的地址空间的组织结构:

为了使操作系统内核提供一个无懈可击的进程抽象,处理器必须提供一种机制,限制一个应用可以执行的指令以及它可以访问的地址空间范围。所以有了用户模式和内核模式。
操作系统内核为每个进程维持一个上下文。上下文就是内核重新启动一个被抢占的进程所需的状态。在进程执行的某些时刻,内核可以决定抢占当前进程,并重新开始一个先前被抢占了的进程。这种觉得就叫做调度。
上下文切换:
- 保存当前进程的上下文。
- 恢复某个先前被抢占的进程被保存的上下文。
- 将控制传递给这个新恢复的进程。
网友评论