加载第一个进程

加载第一个进程

2024 南京大学《操作系统:设计与实现》
加载第一个进程

回顾:进程 = 状态机

编译器:C 状态机 → 汇编状态机的翻译器

  • 特殊的指令/函数:syscall
  • 我们同样可以建模 (模拟) 进程的执行
def StateMachine():
    b = sys_read()

    if b == 0:
        sys_write('I got a zero.')
    else:
        sys_write('I got a one.')

def main():
    sys_spawn(StateMachine)
2024 南京大学《操作系统:设计与实现》
加载第一个进程

操作系统的启动

Firmware 阶段

  • CPU Reset 后,Firmware 代码开始执行
  • 加载操作系统

操作系统初始化阶段

  • 操作系统扫描系统中的硬件、初始化数据结构……
  • 加载第一个进程 (状态机)

操作系统执行阶段

  • 状态机在 CPU 上执行
  • 允许执行 syscall 进入操作系统代码
2024 南京大学《操作系统:设计与实现》
加载第一个进程

真的是这样吗?

我们能控制这个行为吗?

  • 计算机系统没有魔法
  • 你能想到的事就能实现

人工智能就能帮你实现

  • 我希望用 QEMU 在给定的 Linux 内核完成初始化后,直接执行我自己编写的一个 hello 二进制文件。我应该怎么做?
  • 在这个过程中,发散出很多概念 → 知识体系的快速建立
2024 南京大学《操作系统:设计与实现》