ThreadOS 中的线程切换

计算机硬件也是状态机

  • “共享的内存,容纳了多个状态机”
    • 共享的代码
    • 共享的全局变量
    • 启动代码的堆栈 (仅启动代码可用)
    • $T_1$ 的 Task (仅 $T_1$ 和中断处理程序可用)
      • 堆栈 (中断时,寄存器保存在堆栈上)
    • $T_2$ 的 Task (仅 $T_2$ 和中断处理程序可用)
      • 堆栈 (中断时,寄存器保存在堆栈上)
  • 状态迁移
    • 执行指令或响应中断

什么是操作系统?

虚拟化:操作系统同时保存多个状态机

  • C 程序 = 状态机
    • 初始状态:main(argc, argv)
    • 状态迁移:指令执行
      • 包括特殊的系统调用指令 syscall
  • 有一类特殊的系统调用可以管理状态机
    • CreateProcess(exec_file)
    • TerminateProcess()

从线程到进程:虚拟存储系统

  • 通过虚拟内存实现每次 “拿出来一个执行”
  • 中断后进入操作系统代码,“换一个执行”