【NJU OS】02 操作系统上的程序

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

程序就是状态机

状态机

  • 状态机 = 状态 + 迁移

C语言的语义

C 程序的状态机模型 (语义,semantics)

  • 状态 = stack frame 的列表 (每个 frame 有 PC) + 全局变量
  • 初始状态 = main(argc, argv), 全局变量初始化
  • 迁移 = 执行 top stack frame PC 的语句; PC++
    • 函数调用 = push frame (frame.PC = 入口)
    • 函数返回 = pop frame

应用:将任何递归程序就地变为非递归

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

还是状态机

  • 状态 = 内存M + 寄存器R
  • 初始状态 = (稍后回答)
  • 迁移 = 执行一条指令
    • 我们花了一整个《计算机系统基础》解释这件事
    • gdb 同样可以观察状态和执行

一条特殊的指令

调用操作系统 syscall

  • 把 (M,R) 完全交给操作系统,任其修改
    • 一个有趣的问题:如果程序不打算完全信任操作系统?
  • 实现与操作系统中的其他对象交互
    • 读写文件/操作系统状态 (例如把文件内容写入M)
    • 改变进程 (运行中状态机) 的状态,例如创建进程/销毁自己

程序 = 计算 + syscall

计算机系统不存在玄学

  • 一切都建立在确定的机制上
  • 理解操作系统的重要工具:gcc, binutils, gdb, strace
  • Copyrights © 2019-2024 Hxy
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信