Mosaic Model and Checker

Mosaic Model and Checker

2025 南京大学《操作系统原理》
Mosaic Model and Checker

数学视角的操作系统

状态

  • 多个 “应用程序” 状态机
    • 当然,可以是模型

初始状态

  • 仅有一个 “main” 状态机
    • 这个状态机处于初始状态

迁移

  • 选择一个状态机执行一步
    • 就像我们在操作系统模型上看到的那样
2025 南京大学《操作系统原理》
Mosaic Model and Checker

计算机系统中的不确定性 (non-determinism)

调度:状态机的选择不确定

  • 多处理器的 “选择” 是无法控制的
  • 操作系统可以主动随机选择状态机执行一步

I/O:系统外的输入不确定

  • read 返回的结果也有两种可能性

这样程序的执行就不是 “一条线” 了

  • 从初始状态出发,可能有多个可能的 “下一个状态”
2025 南京大学《操作系统原理》
Mosaic Model and Checker

《离散数学》忽然更有用了

程序定义了状态机 G(V,E)G(V, E)

  • 加上一个起点 v0v_0
  • 再加上 FVF \subseteq V 是 “坏” (faulty) 的状态
    • 程序正确 \equiv 不存在从 v0v_0vFv \in F 的路径

还记得你们怎么在 GG 里找路径吗

2025 南京大学《操作系统原理》
Mosaic Model and Checker

插曲:如果你想得图灵奖?

需要找一个 tractable 的问题

  • FVF \subseteq V + 暴力枚举显然太 trivial 了
    • 我们有更好的方式表达规约 (temporal logic)
    • G(AFB)\mathbf{G}(A \rightarrow \mathbf{F} B)
      • “如果 A 发生,则最终 B 会发生”
      • 哦!你需要构建一个好的逻辑系统 😭
  • 提出一些有趣的检查算法

在软件系统里又是 useful

  • 要走很多弯路,而且今天 temporal logic 也没落了
  • 但 Verification 没有死,而且在 AI 时代肯定会走得更远
2025 南京大学《操作系统原理》
Mosaic Model and Checker

Putting Them Together

模型

  • 理论上,我们可以建模任何系统调用
  • 当然,我们选择建模最重要的那些
    • Three Easy Pieces!

检查器

  • 最简单的 BFS 就行 (只要能获得状态机的状态)

可视化

  • 我们就是绘制一个顶点是状态的图 G(V,E)G(V, E)
2025 南京大学《操作系统原理》
Mosaic Model and Checker

于是,我们有了一个更复杂的玩具

模块 系统调用 行为
基础 choose(xs) 返回一个 xs 中的随机的选择
基础 write(s) 向调试终端输出字符串 s
基础 sched() 切换到随机的线程/进程执行
虚拟化 fork() 创建当前状态机的完整复制
并发 spawn(fn) 创建从 fn 开始执行的线程
持久化 bread(k) 读取虚拟设磁盘块 kk 的数据
持久化 bwrite(k, v) 向虚拟磁盘块 kk 写入数据 vv
持久化 sync() 将所有向虚拟磁盘的数据写入落盘
持久化 crash() 模拟系统崩溃
2025 南京大学《操作系统原理》