从逻辑门到计算机系统

从逻辑门到计算机系统

2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

硬件:数字逻辑电路

大一下:数字逻辑电路与计算机组成

计算机系统的 “公理系统”

  • 数字系统 = 状态机
    • 状态:触发器 (bit array)
    • 迁移:组合逻辑 (真值表)

“数码管” 作为第一个例子

  • UNIX Philosophy 和 “编程” 的力量
2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

应用:编程语言和算法

大一上/下:程序设计

C/Java/Python 程序 = 状态机

  • 状态:栈、堆、全局变量
  • 迁移:语句 (或语句一部分) 的执行
    • “程序设计语言的形式语义”

编程 = 描述状态机

  • 将人类世界的需求映射到计算机世界中的数据和计算
    • 调试理论:Fault, Error 和 Failure
  • 允许调用外部函数 (请求操作系统)
2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

从 “编程语言” 到 “数字电路”

源代码 = 字节序列

696e 7420 6d61 696e 2829 207b 0a20 2020  int main() {.   
2070 7269 6e74 6628 2248 656c 6c6f 2057   printf("Hello W
6f72 6c64 5c6e 2229 3b0a 7d0a            orld\n");.}.

计算机系统线的课程 (计算机系统基础、操作系统) 课程回答的根本问题

  • “字节序列” 是如何真正运行起来的?
    • 应用和硬件视角之间是什么?
2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

教学思路:数学视角的计算机系统

状态机是可以模拟的

  • Everything is a state machine
  • Emulate state machines with executable models
  • Enumeration demystifies operating systems

我们的模拟器

  • 数码管/nvboard
  • mini-rv32ima/NEMU Programming Assignment
  • Mosaic model checker
    • “计算机世界里没有魔法”
    • 一切都是有严格定义的数学对象
2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

1. C → SimpleC

还是 “模拟”

  • 在 C 中模拟 C

center

2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

2. SimpleC → 汇编

指令集体系结构

  • “Low-level semantics”
  • 在逻辑门之上建立的 “指令系统” (状态机)

编译器 (也是个程序)

  • 将 “高级” 状态机 (程序) 翻译成的 “低级” 状态机 (指令序列)
    • 翻译准则:外部可见的行为等价
2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

3. 一条特殊的指令

System Call (syscall, ecall, ...)

syscall = “jal”:  // sysret: 逆操作
    mov %rip, %rcx
    mov %rflags, %r11
    set SS = kernel, SS = kernel, CPL = 0
    jmp IA32_LSTAR  // System Target Address Register
  • 跳转到操作系统代码执行
  • 计算机系统仍然是状态机
2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

4. 操作系统对象和 API

center

  • Concurrency - thread.h 打开潘多拉的盒子
  • Virtualization - Shell; 金山游侠、按键精灵和变速齿轮
  • Persistence - readfat
2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

无意之间

实现一切:Everything is a state machine

  • (User) pstree, libco, gpt.c, sperf, crepl, fsrecov
  • (Kernel) 从 Firmware 到第一个用户程序, thread-os, Linux minimal, “核弹发射器” 驱动……

理解一切:高级语言程序的 “最底层” 视角

  • 也解答了许多 “困扰已久” 的问题
    • a.out 是什么?执行的第一条指令在哪里?printf (和其他库函数) 在哪里?是怎么实现的?
2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

从逻辑门到计算机系统

打印 Hello World

  • 应用程序 (app) → 库函数 → 系统调用 → 操作系统中的对象 → 操作系统实现 (C 程序) → 设备驱动程序 → 硬件抽象层 → 指令集 → CPU, RAM, I/O设备 → 门电路

操作系统课给这个稍显复杂的过程一个清晰的轮廓

  • 你可以在其中的每一步都对应到一个具体的示例代码
    • “这一切是可以掌控的”
    • RTFM, RTFSC, ASFAI
2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

《操作系统》:你的真正 “编程” 启蒙课

你不再惧怕任何 “system”

  • 嵌入式系统
  • 通用操作系统
  • 数据库系统
  • 分布式系统

也不再惧怕任何 “需求” 的实现

  • 找到合适的系统调用实现
  • 做不到?可以自己加个系统调用
  • 软件上实现不了?可以改 CPU 来支持!
2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

一些有趣的例子

“一切都是状态机”

  • 如果我们能得到状态的快照?
    • Profiler, model checker, failure recovery, ...

“观察状态机的执行”

  • Lockdep: 在每次 lock/unlock 的时候插入一条 printf”
    • 这就是 dynamic analysis 的本质

“文件系统是磁盘上的一个数据结构”

  • 通过 append-only 实现 journaling
    • 更多的存储系统也是数据结构 (例子:block chain)
2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

并发:走向分布式系统

如何为网络上的多台计算机提供统一的应用程序接口?

  • 把多个分布的、随时可能离线的计算机组成一个存储系统
  • 在存储的基础上完成计算

center

2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

虚拟化:重新理解操作系统设计

Microkernel, Exokernel, Unikernel

  • 没有人规定操作系统里一定要有 “文件”、“进程” 这些对象

center

2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

持久化:重新理解持久存储设计

文件系统没能解决的需求

  • 大量的数据 (订单、用户、网络……) + 非简单目录遍历性质的查询

center

2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

和操作系统相关的 Topics

Computer Architecture

  • 计算机硬件的设计、实现与评估

Computer Systems

  • 系统软件 (软件) 的设计、实现与评估

Network Systems

  • 网络与分布式系统的设计、实现与评估
2024 南京大学《操作系统:设计与实现》
从逻辑门到计算机系统

和操作系统相关的 Topics (cont'd)

Programming Languages

  • 状态机 (计算过程) 的描述方法、分析和运行时支持

Software Engineering

  • 程序/系统的构造、理解和经验

System/Software Security

  • 系统软件的安 (safety) 全 (integrity)
2024 南京大学《操作系统:设计与实现》