Skip to content

《操作系统》2

数字电路与状态机

数字逻辑电路

  • 状态=寄存器保存的值
  • 初始状态=RESET
  • 迁移=组合逻辑电路计算寄存器下一周期的值

数字电路--->状态机;

根据数字电路--->(程序)点亮小灯;

实际上逻辑是蕴含在状态变换当中。

什么是程序(源码视角)?

数字系统本身是状态机

程序是建立在数字系统上的,所以程序本质上也是状态机;

c程序的状态:

状态=堆+栈

初始状态:main的第一条语句

迁移 = 执行一条简单语句

理解c语言函数调用:

进入一个函数回创建一个新的stack frame

c语言的状态:

状态 = stack frame 的列表

初始状态 main(argc,argv)

迁移 = 执行 top stack frame PC, PC++

​ 函数调用 = push frame

​ 函数返回 = pop frame

所有的程序都能写为堆栈的状态变换,不断地PC++,不断地push stack, pop stack。

什么是程序(二进制视角)?

还是状态机:

状态 = 内存+寄存器

初始状态 =

迁移 = 执行指令

一条特殊的指令

程序是一条状态机,绝大多数迁移(指令)都是计算

有一条特殊的指令syscall

把状态(内存+寄存器)全部交给操作系统:用来读写,进程销毁与创建

tips: 使用GDB来查看编译后的指令。

程序 = 计算 + syscall + 计算 + 。。。