Appearance
CPU运行模式(内核态与用户态)
考情分析
内核态与用户态的区分、切换时机是选择题高频考点。🔥🔥🔥 高频。
如果任何程序都能直接操作硬件,一个有 bug 的用户程序就可能把整台机器搞崩——CPU 怎么防止这种事发生?
两种运行模式
| 模式 | 别名 | PSW 中的模式位 | 可执行的指令 |
|---|---|---|---|
| 内核态 | 核心态、管态、特权态 | 0 | 所有指令(包括特权指令) |
| 用户态 | 目态 | 1(或 3) | 非特权指令 |
特权指令 vs 非特权指令
| 类型 | 说明 | 示例 |
|---|---|---|
| 特权指令 | 只能在内核态执行 | I/O 指令、置中断指令、修改 PSW、修改页表寄存器 |
| 非特权指令 | 用户态和内核态都能执行 | 算术运算、访存指令、跳转指令 |
判断标准
凡是可能影响其他进程或整个系统的操作,都应该是特权指令。
用户态 → 内核态
从用户态进入内核态的唯一途径是中断或异常——可以类比为"普通员工(用户态)想进机房(内核态),唯一的办法是按门铃(中断),让管理员来开门"。
| 触发方式 | 说明 | 举例 |
|---|---|---|
| 外中断 | 来自 CPU 外部的中断信号 | 时钟中断、I/O 中断 |
| 内中断(异常) | 指令执行过程中产生 | 缺页异常、除零异常 |
| 陷入(Trap) | 用户程序主动发出 | 系统调用(int 0x80 / syscall) |
内核态 → 用户态
通过执行一条特权指令(如中断返回指令 iret),将 PSW 中的模式位改回用户态。
这是一个特权指令——只有内核态才能执行,保证了用户程序无法自行进入内核态。
内核的组成
| 层次 | 组件 | 说明 |
|---|---|---|
| 与硬件紧密相关 | 时钟管理 | 提供时间基准 |
| 中断处理 | 响应和处理中断 | |
| 原语(原子操作) | 不可中断的底层操作 | |
| 内核功能 | 进程管理 | 调度、同步、通信 |
| 存储器管理 | 内存分配、地址映射 | |
| 设备管理 | I/O 控制 |
易混淆概念
| 概念 | 解释 |
|---|---|
| 用户态 → 内核态 | 由硬件完成(中断触发,自动切换模式位) |
| 内核态 → 用户态 | 由软件完成(OS 执行中断返回指令) |
| 态的切换 ≠ 进程切换 | 态切换不一定伴随进程切换(如系统调用后可能返回同一进程) |
考研高频考点
- 🔥🔥🔥 用户态 → 内核态的唯一途径:中断/异常
- 🔥🔥🔥 特权指令只能在内核态执行
- 🔥🔥 内核态 → 用户态通过中断返回指令(特权指令)
- 🔥🔥 系统调用通过 trap 指令触发,本质是一种异常
- 🔥 态的切换 ≠ 进程切换
知道了态切换的存在,自然会问:中断和异常到底有哪些类型,硬件和软件各自在处理流程中承担什么角色?下一篇展开讲中断和异常的分类与处理机制。