Mosaic Model and Checker
Mosaic Model and Checker
Mosaic Model and Checker
数学视角的操作系统
状态
多个 “应用程序” 状态机
当然,可以是模型
初始状态
仅有一个 “main” 状态机
这个状态机处于初始状态
迁移
选择一个状态机执行一步
就像我们在操作系统模型上看到的那样
Mosaic Model and Checker
计算机系统中的不确定性 (non-determinism)
调度
:状态机的选择不确定
多处理器的 “选择” 是无法控制的
操作系统可以主动随机选择状态机执行一步
I/O
:系统外的输入不确定
read 返回的结果也有两种可能性
这样程序的执行就不是 “一条线” 了
从初始状态出发,可能有多个可能的 “下一个状态”
Mosaic Model and Checker
《离散数学》忽然更有用了
程序定义了状态机
G
(
V
,
E
)
G(V, E)
G
(
V
,
E
)
加上一个起点
v
0
v_0
v
0
再加上
F
⊆
V
F \subseteq V
F
⊆
V
是 “坏” (faulty) 的状态
程序正确
≡
\equiv
≡
不存在从
v
0
v_0
v
0
到
v
∈
F
v \in F
v
∈
F
的路径
还记得你们怎么在
G
G
G
里找路径吗
DFS/BFS 啊!
恭喜你!你离图灵奖进了一步 (迈出了重要的第一步)
要有一个
疯狂
的想法:软件是可以自动证明的
Turing Award Lecture:
Model checking: algorithmic verification and debugging
Mosaic Model and Checker
插曲:如果你想得图灵奖?
需要找一个
tractable
的问题
F
⊆
V
F \subseteq V
F
⊆
V
+ 暴力枚举显然太 trivial 了
我们有更好的方式表达规约 (temporal logic)
G
(
A
→
F
B
)
\mathbf{G}(A \rightarrow \mathbf{F} B)
G
(
A
→
F
B
)
“如果 A 发生,则最终 B 会发生”
哦!你需要构建一个好的逻辑系统
提出一些有趣的检查算法
在软件系统里又是
useful
的
要走很多弯路,而且今天 temporal logic 也没落了
但 Verification 没有死,而且在 AI 时代肯定会走得更远
Mosaic Model and Checker
Putting Them Together
模型
理论上,我们可以建模任何系统调用
当然,我们选择建模
最重要
的那些
Three Easy Pieces!
检查器
最简单的 BFS 就行 (只要能获得状态机的状态)
可视化
我们就是绘制一个顶点是状态的图
G
(
V
,
E
)
G(V, E)
G
(
V
,
E
)
Mosaic Model and Checker
于是,我们有了一个更复杂的玩具
模块
系统调用
行为
基础
choose(xs)
返回一个 xs 中的随机的选择
基础
write(s)
向调试终端输出字符串 s
基础
sched()
切换到随机的线程/进程执行
虚拟化
fork()
创建当前状态机的完整复制
并发
spawn(fn)
创建从 fn 开始执行的线程
持久化
bread(k)
读取虚拟设磁盘块
k
k
k
的数据
持久化
bwrite(k, v)
向虚拟磁盘块
k
k
k
写入数据
v
v
v
持久化
sync()
将所有向虚拟磁盘的数据写入落盘
持久化
crash()
模拟系统崩溃