计算机系统的状态机模型

计算机系统的状态机模型

2024 南京大学《操作系统:设计与实现》
计算机系统的状态机模型

一切皆为状态机

C 代码 = 状态机

  • SimpleC & GDB (TUI source)

汇编代码 = 状态机

  • GDB (TUI assembly)

处理器 = 状态机

  • mini-rv32ima; ICS PA

数字电路 = 状态机

  • Logisim
2024 南京大学《操作系统:设计与实现》
计算机系统的状态机模型

计算机系统的状态机模型

状态

  • 内存、寄存器的数值

初始状态

  • 由系统设计者规定 (CPU Reset)

状态迁移

  • 从 PC 取指令执行

基本准确;但我们可以做一些补充

2024 南京大学《操作系统:设计与实现》
计算机系统的状态机模型

计算机系统:状态

寄存器、内存

struct CPUState {
    uint32_t regs[32], csrs[CSR_COUNT];
    uint8_t *mem;
    uint32_t mem_offset, mem_size;
};

还有外部世界的态

  • 设备上的寄存器 (memory-mapped I/O 可以访问)
  • Interrupt/Reset Line
  • 客观存在,但计算机系统不能直接访问
    • 类比:进程只能通过 syscall 访问进程外的信息
2024 南京大学《操作系统:设计与实现》
计算机系统的状态机模型

计算机系统:初始状态

为什么老旧电脑要配一个 RESET 按钮?

center

2024 南京大学《操作系统:设计与实现》
计算机系统的状态机模型

x86 Family: CPU Reset

center

2024 南京大学《操作系统:设计与实现》
计算机系统的状态机模型

说人话

Intel 的工程师已经规定好,x86 处理器复位:

  • EIP = 0x0000fff0
  • CR0 = 0x60000010
    • 处理器处于 16-bit 模式
  • EFLAGS = 0x00000002
    • Interrupt disabled
  • TFM (5,000 页+)
    • Volume 3A: ~400 页
2024 南京大学《操作系统:设计与实现》
计算机系统的状态机模型

CPU Reset: 其他体系结构

RISC-V:百花齐放,百家争鸣

  • 初始 PC 无规定;寄存器除了 x0 全部 undefined
  • 少数 CSR 有规定 (例如 interrupt disabled)
    • 设计原则:省电路
    • 软件能做的,硬件绝对不管

百万碎片 😂

  • ARM: 规定了 CPU Reset,但没有规定设备寄存器的映射
  • 每台机器都看起来 “不太一样”
    • qemu-system-aarch64 -machine help
2024 南京大学《操作系统:设计与实现》
计算机系统的状态机模型

为什么读手册很困难?

手册只告诉你 “是什么”、不告诉你 “为什么”

  • Intel 手册是写给 System Programmers 的
    • 有多年硬件编程经验,等着开发产品挣钱
    • 不是你们这种计算机科学入门小白
  • 他们有的知识可能包括:
    • 上一代处理器的编程方法
    • 历史遗留 💩 代码的工作原理

我们的选择:绕开手册

  • AbstractMachine,让你直接操作状态机
2024 南京大学《操作系统:设计与实现》
计算机系统的状态机模型

计算机系统:状态迁移

执行指令

  • 如果有多个处理器?
    • 可以想象成 “每次选一个处理器执行一条指令”
    • 在并发部分会回到这个问题

响应中断

  • if (intr) goto vec;

输入输出

  • 与 “计算机系统外” 交换数据
  • 类似于程序:不使用 syscall 就等于死循环
2024 南京大学《操作系统:设计与实现》