110 / 163 · C11 · 约 8 分钟
机制:受限直接执行
先记住这句话
操作系统通过受限直接执行高效虚拟化CPU:用户程序直接在处理器上运行以获得速度,同时依靠硬件模式切换和陷阱指令让内核始终掌握控制权。
直接执行的基本思路
为了让用户程序跑得尽可能快,内核只负责创建进程描述符、分配地址空间并加载可执行映像,然后把控制权交给程序入口。此后指令在真实CPU上原生执行,几乎没有解释或仿真开销。
用硬件模式限制危险操作
原生执行虽然快,但进程可能发出磁盘I/O或永久霸占处理器。处理器因此提供用户模式,在该模式下特权指令会触发异常。内核自身运行在内核模式,可以执行任何操作。需要服务时用户程序必须通过约定好的陷阱进入内核。
陷阱表保证安全的控制转移
机器启动时内核把各类异常处理程序的地址告诉硬件,形成陷阱表。陷阱发生时硬件自动保存用户寄存器并跳转到表中对应项。内核完成工作后执行返回陷阱指令,恢复用户状态并降低权限。用户程序永远无法自己指定内核跳转目标。
常见误区
- 把系统调用当成普通C函数调用而忽略内部隐藏的陷阱指令
- 以为用户程序可以随意跳进内核任意地址
运行一个例子
最低标准 C11 · 完整程序 · 下载 .c
#include <stdio.h>
int main(void) {
puts("OS creates process and switches to user mode");
puts("User process runs natively");
puts("User issues trap for restricted operation");
puts("Hardware saves state and enters kernel mode");
puts("Kernel handles system call then returns from trap");
puts("User process resumes until it exits");
puts("OS reclaims resources");
return 0;
}
在本地编译
gcc -std=c11 -Wall -Wextra -Wpedantic -Werror ostep-06-direct-execution.c -o example && ./example预期结果
OS creates process and switches to user mode
User process runs natively
User issues trap for restricted operation
Hardware saves state and enters kernel mode
Kernel handles system call then returns from trap
User process resumes until it exits
OS reclaims resources
CHECK YOUR UNDERSTANDING
合上答案,试着解释。
如果硬件不提供用户/内核模式切换,操作系统还能否既高效又安全地虚拟化CPU?请说明理由。
查看参考答案
不能。缺少模式保护后任何进程都能执行特权指令,内核将无法阻止恶意或错误程序破坏磁盘、内存或其他进程,虚拟化也就失去了安全基础。
继续查证
标准草案与官方章节会更新;版本标记只说明示例最低要求。