Ch2. 处理器管理
考虑到与《计算机系统基础》的内容重合性,一部分内容就不写了
程序状态字
操作系统将程序运行时的动态信息汇集在一起,称之为程序状态字(Program Status Word, PSW),通常存放在处理器中的特殊寄存器中
纯硬件视角
先从更熟悉的(但不严谨的)硬件角度来解释:以 Intel x86 机器为例,PSW 的硬件实现为状态标志寄存器 EFLAGS 与指令指针寄存器 EIP 的组合,并将 EFLAGS 的低 16 位称为 FLAGS。EIP 就不需要解释了,其存储下一条将要执行的指令在内存中的地址
EFLAGS 分为三个部分:
- 状态标志位
| 位 | 标志名 | 含义 | 何时为 1 |
|---|---|---|---|
| 0 | CF | 进位标志 | 无符号整数运算产生进位或借位时 |
| 2 | PF | 奇偶标志 | 结果的最低有效字节中,1 的个数为偶数时 |
| 4 | AF | 辅助进位标志 | 低字节向高字节进位/借位时(用于 BCD 码运算) |
| 6 | ZF | 零标志 | 运算结果为 0 时 |
| 7 | SF | 符号标志 | 运算结果为负数(符号位为 1)时 |
| 11 | OF | 溢出标志 | 有符号整数运算结果超出范围时 |
- 控制标志位
| 位 | 标志名 | 含义 | 何时为 1 |
|---|---|---|---|
| 9 | IF | 中断允许标志 | 允许响应外部中断时 |
| 8 | TF | 陷阱标志 | 进入单步调试模式时 |
| 10 | DF | 方向标志 | 字符串操作时,当地址递减时 |
- 系统标志位
| 位 | 标志名 | 含义 | 作用描述 |
|---|---|---|---|
| 12-13 | IOPL | I/O 特权级 (I/O Privilege Level) | 一个 2 位的字段,用于指定允许执行 I/O 指令(如 IN, OUT)所需的最小特权级。只有当前特权级 (CPL) ≤ IOPL 时,程序才能访问 I/O 端口 |
| 14 | NT | 嵌套任务标志 | 当前任务嵌套于另一个任务中时设为 1。用于在任务切换时,通过 IRET 指令正确地返回到之前的任务(即前一个任务的 TSS) |
| 16 | RF | 恢复标志 | 用于调试异常(如指令断点)。当 RF 为 1 时,CPU 会在执行下一条指令时忽略调试故障,防止同一个断点被反复触发 |
操作系统视角
PSW 通常包含这些信息:
- 程序计数器(PC,在 x86 架构中就是 EIP / RIP)
- 标志位(对应了标志寄存器的状态标志位)
- 中断屏蔽位(对应了 IF)
- 特权级(对应了 IOPL)
- 以及一些其他的奇奇怪怪的信息,大多数的硬件实现都是标志寄存器
多数计算机的处理器现场可能找不到一个具体的 PSW 寄存器,但是总会有一组控制寄存器和状态寄存器起实际的作用
中断
ICS 课程中,异常和中断是区分开的;而这门课程中,两者统称为中断,其中异常称之为内中断(缺页、地址越界、除零等),与之相对的(更狭义的中断)称为外中断
中断的定义就略过了
迄今为止,所有计算机系统都采用硬件中断处理器+软件中断处理程序,分为四个步骤:
- 硬件发现中断源
- 硬件保护现场
- 软件执行处理程序
- 硬件恢复现场
多中断处理
同时有多个中断事件发生时,中断装置按一定顺序对其作出响应,其先后顺序即优先级