回顾:程序/硬件的状态机模型

计算机软件

  • 状态机 (C/汇编)
    • 允许执行特殊指令 (syscall) 请求操作系统
    • 操作系统 = API + 对象

计算机硬件

  • “无情执行指令的机器”
    • 从 CPU Reset 状态开始执行 Firmware 代码
    • 操作系统 = C 程序

一个大胆的想法

无论是软件还是硬件,都是状态机

  • 而状态和状态的迁移是可以 “画” 出来的!
  • 理论上说,只需要两个 API
    • dump_state() - 获取当前程序状态
    • single_step() - 执行一步
    • gdb 不就是做这个的吗!

GDB 检查状态的缺陷

太复杂

  • 状态太多 (指令数很多)
  • 状态太大 (很多库函数状态)

简化:把复杂的东西分解成简单的东西

  • 在《操作系统》课上,简化是非常重要的主题
    • 否则容易迷失在细节的海洋中
    • 一些具体的例子
      • 只关注系统调用 (strace)
      • Makefile 的命令日志
      • strace/Makefile 日志的清理

一个想法:反正都是状态机……

我们真正关心的概念

  • 应用程序 (高级语言状态机)
  • 系统调用 (操作系统 API)
  • 操作系统内部实现

没有人规定上面三者如何实现

  • 通常的思路:真实的操作系统 + QEMU/NEMU 模拟器
  • 我们的思路
    • 应用程序 = 纯粹计算的 Python 代码 + 系统调用
    • 操作系统 = Python 系统调用实现,有 “假想” 的 I/O 设备
def main():
    sys_write('Hello, OS World')