【NJU OS】09 操作系统的状态机模型

动手写操作系统

大学的真正意义

将已有的知识和方法重新消化,为大家建立好 “台阶”,在有限的时间里迅速赶上数十年来建立起的学科体系。

“专业世界观” 的学习方法

  • 经典研究论文 (OSDI, SOSP, ATC, EuroSys, …)
  • 久经考验的经典教学材料 (xv6, OSTEP, CSAPP, …)
  • 海量的开源工具 (GNU 系列, qemu, gdb, …)
  • 第三方资料,慎用 (tutorials, osdev wiki, …)

硬件和软件的桥梁

Bare-metal 与程序员的约定

为了让计算机能运行任何我们的程序,一定存在软件/硬件的约定

  • CPU reset 后,处理器处于某个确定的状态
    • PC 指针一般指向一段 memory-mapped ROM
      • ROM 存储了厂商提供的 firmware (固件)
    • 处理器的大部分特性处于关闭状态
      • 缓存、虚拟存储、……
  • Firmware (固件,厂商提供的代码)
    • 将用户数据加载到内存
      • 例如存储介质上的第二级 loader (加载器)
      • 或者直接加载操作系统 (嵌入式系统)

x86 Family: CPU Reset 行

CPU Reset 之后:发生了什么?

  • 从 PC (CS:IP) 指针处取指令、译码、执行……
  • 从 firmware 开始执行
    • ffff0 通常是一条向 firmware 跳转的 jmp 指令

Firmware: BIOS vs. UEFI

  • 都是主板/主板上外插设备的软件抽象
    • 支持系统管理程序运行
  • Legacy BIOS (Basic I/O System)
  • UEFI (Unified Extensible Firmware Interface)

Legacy BIOS: 约定

Firmware 必须提供机制,将用户数据载入内存

Legacy BIOS 把第一个可引导设备的第一个扇区加载到物理内存的 7c00 位置
此时处理器处于 16-bit 模式
规定 CS:IP = 0x7c00, (R[CS] << 4) | R[IP] == 0x7c00
可能性1:CS = 0x07c0, IP = 0
可能性2:CS = 0, IP = 0x7c00
其他没有任何约束

调试 QEMU: 确认 Firmware 的行为

鸡和蛋的问题解决

有个原始的鸡:Firmware

  • 代码直接存在于硬件里
  • CPU Reset 后 Firmware 会执行
    • 加载 512 字节到内存 (Legacy Boot)
    • 然后功成身退

Firmware 的另一用处

  • 放置一些 “绝对安全的代码”
    • BIOS 中断 (Hello World 是如何被打印的)
    • ARM Trusted Firmware
      • Boot-Level 1, 2, 3.1, 3.2, 3.3
      • U-Boot: the universal boot loader

今天的 Firmware: UEFI

UEFI 上的操作系统加载

操作系统的状态机模型(需复习)

“操作系统” 的状态机已经启动

操作系统:是个 C 程序

总结

  • 一切皆可调试 (包括 firmware)
    • 理解操作系统是如何被启动的
    • 学会使用 gdb (必备生存技能)
  • 操作系统也是程序
    • AbstractMachine 扩展了程序的语义,仅此而已
  • Copyrights © 2019-2024 Hxy
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信