蒋炎岩操作系统 笔记1

3 min

导论

为什么学操作系统:知道程序能做什么、为什么能做

什么是操作系统:一种程序,管理软硬件资源,为其他程序提供更好的服务

  • 硬件:时钟驱动下的状态机,一个时钟周期进行一次状态转移
  • 软件:也是一个状态机,执行一条语句,相当于进行一次状态转移

应用视角的操作系统

计算机:无情的执行指令的机器

程序的执行就是状态的变化

任何代码都是状态机;编译器实现了高级语言代码到机器代码两种状态机的翻译;对一个程序,想要将结果传递到程序外,都需要操作系统使用系统调用,可以用 strace 命令查看

各种软件:

  • 可见的:vim、bash、ffmpeg、ip、ssh……
  • 不可见的 daemon:systemd、……

硬件视角的操作系统

硬件视角不知道有操作系统的存在:下层不需要知道上层怎么用,只需要提供服务就行了

操作系统就是一个普通的程序,接管中断、I/O、……

可以看成状态机:

  • 状态:内存、寄存器的数值,外部世界的状态(存在但计算机系统不能直接访问)
  • 初始状态:由系统设计者规定,reset 或者启动时转移到初始状态上来
  • 状态迁移:改变 PC 取指令、响应中断、输入输出

固件(firmware):固定在系统中的代码,每次 CPU reset 或者 init 时运行所有程序前配置计算机系统,可以说是加载操作系统;正常状态是只读的,但是可以通过特殊方式打开写保护;BIOS 和 UEFI

数学视角的操作系统

程序是一种“数学严格”的对象

将操作系统视为一个管理了若干程序状态机的“更大”的 “main” 状态机;这个 main 状态机每一步执行,都相当于主动随机选择一个程序状态机,然后走一步;而系统调用相当于创建/退出/写入写出状态机

程序定义了一个状态机 G(V,E)G(V,E),起点 v0v_{0},以及“坏”的状态 FVF\subseteq V,那么程序正确等价于不存在从 v0v_{0}vFv\in F 的路径