背景回顾:回顾我们 “操作系统 = 对象 + API” 视角上构建的应用生态:操作系统上的可执行文件和库函数仅仅通过 “计算” 和系统调用 API,就构建出了完整的操作系统世界。现在是时候近距离穿越这个边界,近距离观察操作系统内核了。
本讲内容:实现操作系统内核的基础机制;50 行实现操作系统内核。
系统调用指令是一种特殊的 “长跳转”——而跳转的目标是由操作系统配置好、应用程序不能决定的。类似地,处理器中断也会被动调用长跳转到操作系统内核。操作系统内核代码会 “封存” 进程的状态机:
此时,计算机系统就处于所有程序都被封存、操作系统代码正在执行的状态。操作系统会选择性地调度下一个寄存器现场到 CPU 上,实现上下文切换。
本次课程的示例代码中包含一些非常重要的调试技巧,例如 hook 每一次 gdb stop,在停止时便利寄存器的数值,并且打印出 “变化” 的寄存器。这些看似不起眼的技巧,可以大幅提升你的调试效率,务必在实践中体会和掌握:你需要这些技巧来完成操作系统内核相关的实验。