《操作系统》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 + 计算 + 。。。