3.硬件视角的操作系统
1 计算机系统的状态机模型
1.1 一切皆为状态机
- C 代码 = 状态机
- SimpleC & GDB (TUI source)
- 汇编代码 = 状态机
- GDB (TUI assembly)
- 处理器 = 状态机
- mini-rv32ima; ICS PA
- 数字电路 = 状态机
- Logisim
1.2 计算机系统的状态机模型
- 状态
- 内存、寄存器的数值
- 初始状态
- 由系统设计者规定 (CPU Reset)
- 状态迁移
- 从 PC 取指令执行
基本准确;但我们可以做一些补充
1.2.1 计算机系统:状态
- 寄存器、内存
1 | struct CPUState { |
- 还有外部世界的态
- 设备上的寄存器 (memory-mapped I/O 可以访问)
- Interrupt/Reset Line
- 客观存在,但计算机系统不能直接访问
- 类比:进程只能通过 syscall 访问进程外的信息
1.2.2 计算机系统:初始状态
CPU Reset
- Intel 的工程师已经规定好,x86 处理器复位:
EIP = 0x0000fff0
CR0 = 0x60000010
- 处理器处于 16-bit 模式
- RISC-V:百花齐放,百家争鸣
- 初始 PC 无规定;寄存器除了 x0 全部 undefined
- 少数 CSR 有规定 (例如 interrupt disabled)
- 设计原则:省电路
- 软件能做的,硬件绝对不管
1.2.3 计算机系统:状态迁移
执行指令
- 如果有多个处理器?
- 可以想象成 “每次选一个处理器执行一条指令”
响应中断
- if (intr) goto vec;
输入输出
- 与 “计算机系统外” 交换数据
- 类似于程序:不使用 syscall 就等于死循环
2 固件:接管计算机系统的第一个程序
2.1 计算机系统 = 状态机
程序员如何控制计算机系统?
- 仅有 RESET 状态是不够的
- 答案:计算机系统会和 System Programmers 达成约定
2.2 Firmware
“固件”
- 厂商 “固定” 在计算机系统里的代码
- 早期:固件是 ROM
- 想升级?换芯片!
Firmware 的功能
- 运行程序前的计算机系统配置
- CPU 电压、内存时序、接口开关……
- (这些配置要生效可能需要重启计算机)
- 不严格地说,加载操作系统
- QEMU:可以绕过 Firmware 直接加载操作系统 (RTFM)
Firmware:配置计算机系统
Firmware:加载存储设备上的引导程序
Firmware:就是一段代码
- 一个小 “操作系统”
- CPU Reset 后初始化硬件;对接操作系统 Boot Loader
- Legacy BIOS (Basic I/O System)
- IBM PC 所有设备/BIOS 中断是有 specification 的
- 16-bit DOS 时代 BIOS 常驻内存,提供 I/O 等功能
- 成就了百花齐放的 “兼容机” 时代
- AMI 和 Phoenix BIOS, 等都活到了今天!
- IBM PC 所有设备/BIOS 中断是有 specification 的
- UEFI (Unified Extensible Firmware Interface)
- 提供更丰富的支持 (例如设备驱动程序):指纹锁、山寨网卡上的 PXE 网络启动、USB 蓝牙转接器连接的蓝牙键盘……
计算机系统是严格的数学对象:没有魔法;计算机系统的一切行为都是可观测、可理解的。
- 处理器是无情的执行指令的机器。
- 处理器会规定好 Reset 后的行为。
- Reset 后 Firmware 开始运行,再加载操作系统。
- 厂商逐渐形成了达成共识的 Firmware Specification (IBM PC “兼容机”、UEFI、……)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Asuka's Blog!