程序是什么?
- 程序 = 状态机
- 状态:数据(堆和栈) -> 栈帧(含PC寄存器)
- 初始状态:刚装入内存时的状态 -
main()
刚进入 - 状态迁移:指令的执行
- 函数调用:看作压栈
- 函数返回:看作出栈
- 随机数:看作上下限区间内这么多种状态 - 比如0~10之间的整数随机数就有11种状态
- 状态机的结束:trap,syscall
- 也可以认为:程序 = 计算+syscall
- 操作系统 = 对象(文件,进程etc.) + API = C语言程序
- 编译器
- 将源代码级别的状态机转化为二进制代码级别的状态机
- 二者的可观测行为要严格一致
- 可以这样理解编译器的优化过程:在可观测行为一致时改写代码
- compiler barrier:需要对内存进行操作
今天的操作系统
- “虚拟化”应用广泛
- NUMA
- 非对称处理器(大小核:性能核与能效核)
- Intel-VT/AMD-V等等
- 各种设备
- 互联互通