03 - 硬件视角的操作系统 [2025 南京大学操作系统原理]
[00:00:00]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
大家好!我是姜艳艳,欢迎来到《操作系统原理》的第三课!上节课我们从应用视角聊了程序和系统调用,今天我们要换个角度,从硬件视角来看操作系统。就像我说的,“硬件根本不知道有没有操作系统,它只管执行指令!” 我希望用亲切的方式,带你们走进硬件的世界,理解操作系统如何在“无情的执行指令的机器”上运行。这节课是个科普故事,串联起硬件、固件和操作系统的全貌,点燃你们的好奇心!
我会从状态机模型出发,聊聊硬件如何工作,固件如何启动系统,以及操作系统如何接管控制权。内容整理自字幕,保留了我的原话风格,修正了错别字,补充了逻辑和例子,用 Markdown 写成博客,方便你回顾学习。准备好了吗?咱们开始吧!
1. 复习:程序是状态机,系统调用是关键
[00:00:16]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[00:00:16]~[00:09:35]
图示说明:C 程序是一个状态机,普通指令修改寄存器或内存,系统调用请求操作系统改变外部状态,如写文件或显示到屏幕。
上节课我们讲了,“一切都是状态机!” 程序是一个状态机,在 GDB 里用 info locals
或 info registers
能看到状态,比如 x=1, y=2
。执行一条语句,状态就迁移到下一个状态,比如 x=2
。“但 C 语言模型有个局限,如果不调用库函数,程序连终止都做不到,只能读写内存!” 这时就需要系统调用,就像“向上天祈祷”,把控制权交给操作系统,请求它做事,比如退出程序或写文件。
例子:调用 exit(0)
是一个系统调用,操作系统会终止程序。“这就像祈祷‘请让我退出’,操作系统啪的一下帮你搞定!” 本学期的课程会围绕系统调用展开,今天我们从硬件视角,看看操作系统如何在 CPU 上运行。
补充:问 AI,“系统调用和普通函数调用的区别是什么?” 它会告诉你,系统调用会切换到内核态,执行操作系统代码,而普通函数只在用户态运行。
2. 硬件视角:CPU 是无情的执行指令机器
[00:09:35]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[00:09:35]~[00:28:03]
图示说明:CPU 从复位(Reset)进入初始状态,设置寄存器(如 PC、CR0),循环取指令并执行,普通指令修改内部状态,特殊指令处理 IO 或中断,与外部世界交互。
硬件是什么?
[00:09:39]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[00:09:39]~[00:11:22]
“硬件就是个无情的执行指令的状态机!” 你们在数字逻辑电路课上写过 RISC-V 单周期处理器吧?CPU 就是一个状态机,从一个状态(寄存器和内存的值)通过执行指令迁移到下一个状态。“硬件根本不知道有没有操作系统,它只管执行指令!”
例子:RISC-V 处理器从 PC 寄存器取指令地址,读取内存中的指令,译码后执行,比如 add x1, x2, x3
修改寄存器 x1。“不管是 NEMU 模拟的 x86 还是 RISC-V,硬件都不关心上面跑的是啥程序!”
状态机的核心:初始状态与 Reset
[00:11:22]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[00:11:22]~[00:13:06]
状态机的关键是初始状态。“初始状态由系统设计者规定,靠 Reset 信号实现!” 你们写 Verilog 时见过 reset
信号吧?上电时,寄存器可能是随机值,Reset 信号会把 CPU 重置到可控状态。
例子:x86 CPU 的 Reset 状态在英特尔手册中有详细定义,比如 PC 设为 0xFFFF0000
,控制寄存器 CR0 设为特定值。“以前我们得啃 400 页手册,今天问 AI ‘x86-64 CPU Reset 状态是啥?’ 秒出答案!”
硬件与外部世界:IO 与中断
[00:13:06]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[00:13:06]~[00:28:03]
CPU 除了执行指令,还能通过特殊指令与外部交互。“这就像 C 程序的系统调用,硬件也有类似机制!” 比如:
- IO 指令:x86 的
in
和out
指令读写端口,RISC-V 用内存映射 IO(Memory-Mapped IO),通过load/store
访问特定地址。 - 中断:定时器或设备会触发中断信号,CPU 暂停当前指令,跳转到中断处理程序。
例子:GPIO(通用输入输出)用 IO 控制树莓派的 LED 灯。“用 gpio set 23 1
拉高 23 号引脚电平,灯就亮了;设为 0,灯就灭了!” 中断让操作系统定期接管控制权。“即使程序死循环,定时器中断也能让操作系统抢回 CPU!”
补充:问 AI,“GPIO 和中断如何协同工作?” 它会解释,GPIO 控制设备状态,中断通知 CPU 设备事件,比如按键按下。
3. 固件:从 Reset 到操作系统
[00:28:03]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[00:28:03]~[00:47:57]
图示说明:CPU 复位后运行固件,固件初始化硬件、提供用户配置界面(如 BIOS/UEFI),最终加载操作系统引导程序(如 MBR 或 UEFI)。
固件是什么?
[00:30:12]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[00:30:12]~[00:33:56]
“固件(Firmware)是 CPU Reset 后执行的第一段代码,控制整个计算机!” 它固化在主板上的只读存储器(ROM)中,确保 Reset 后 PC 指向合法代码。“厂商在内存控制器上做特殊映射,让 PC 指向固件!”
例子:老式计算机的 BIOS(基本输入输出系统)是固件的一种,启动时显示 CPU 和内存信息,允许设置开机密码或启动顺序。“你见过 BIOS 界面吧?可以选从 U 盘启动,我的课件就是这么跑的!”
固件的作用
[00:33:56]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[00:33:56]~[00:38:31]
固件有三大任务:
- 硬件初始化:检测 CPU 电压、内存大小、存储设备。“没内存条?固件会报警!”
- 用户配置:提供 BIOS/UEFI 界面,设置硬件参数,如启用虚拟化或调整 CPU 电压。
- 加载操作系统:根据用户选择,从磁盘或 U 盘加载引导程序。
例子:UEFI 固件支持复杂设备,如指纹锁和网络启动。“新电脑装老 Linux,上不了网?可能是网卡驱动太新,固件得先识别!”
固件的安全与历史
[00:38:31]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[00:38:31]~[00:47:57]
“固件太重要了,bug 可能导致电脑变砖!” 1998 年的 CIH 病毒利用主板写保护漏洞,改写固件跳转指令,让电脑无法开机。“这病毒把 ROM 搞坏,只能换芯片!” 今天,固件更新需厂商签名,安全性大大提高。
故事:“那时候 HTTP 明文传输,我在教室架个假 Wi-Fi,就能偷密码!现在 HTTPS 和云备份让病毒难搞了。”
4. 从固件到操作系统:引导过程
[00:47:57]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[00:47:57]~[01:12:30]
图示说明:固件加载主引导记录(MBR),检查末尾的 0x55AA 签名,跳转到 0x7C00 执行引导程序,最终加载操作系统内核。
主引导记录(MBR)
[00:48:09]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[00:48:09]~[00:56:34]
“固件和操作系统设计者有个约定:磁盘前 512 字节是主引导记录(MBR)!” 如果 MBR 末尾是 0x55AA
,固件认为磁盘可启动,将其加载到内存地址 0x7C00
并跳转执行。
例子:MBR 包含 446 字节汇编代码、64 字节分区表和 2 字节签名。“我用一行 Shell 脚本生成 MBR,包含 EB FE
(死循环跳转)和 55 AA
!” 用 QEMU 模拟,改 55 AA
为 55 BB
,启动失败,证明手册没骗人!
echo -ne '\xEB\xFE\x12\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\xAA' > mbr.bin
引导程序与操作系统
[00:56:34]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[00:56:34]~[01:10:56]
MBR 的 446 字节代码负责加载更大的引导程序(如 GRUB),最终加载操作系统内核。“GRUB 的选择界面就是个 EFI 文件,运行后加载 Linux 内核!”
例子:UEFI 引导更现代,支持 Fat32 分区。“我挂载 U 盘,看到 EFI 目录,里面有 bootx64.efi
,这就是启动器!” UEFI 甚至支持字体,Windows 的转圈圈动画就是用字符实现的。
RISC-V 的引导
[01:10:56]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[01:10:56]~[01:12:30]
RISC-V 的引导更灵活,通常从地址 0x1000
开始,运行固件如 OpenSBI 或 U-Boot。“OpenSBI 初始化硬件,加载内核,入口地址在项目文档里!” 克隆 OpenSBI 仓库,用 make
编译,生成固件镜像.
例子:“我改了 Makefile,用 RISC-V 64 位工具链编译 OpenSBI,启用调试信息。跑 make
,得到固件文件!”
5. 调试固件:揭开神秘面纱
[01:12:30]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[01:12:30]~[01:24:05]
图示说明:固件加载 MBR 到内存 0x7C00,用调试器设置 Watchpoint 捕获写操作,确认是 repeat insl
指令写入,查看内存验证数据。
Watchpoint 的魔法
[01:00:23]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[01:00:23]~[01:04:41]
“想知道谁把 MBR 加载到 0x7C00?用 Watchpoint!” 在 QEMU 调试器中,设置 watch 0x7C00
,捕获写操作。“我发现是 repeat insl
指令,从磁盘加载 512 字节,逐步写入 0x7C00!”
例子:“PC 在 0xFAT18,执行 repeat insl
,先写入 EB FE
,再写入 12 34
。内存数据和 MBR 一致,证明固件真干了这事!”
调试 BIOS 源码
[01:04:41]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[01:04:41]~[01:15:00]
固件是代码,开发它的人也要调试!“CBios 是个开源 BIOS 项目,下载源码,编译带调试信息,像调试 C 程序一样!” 用 GDB 加载符号表,设置断点,观察固件行为.
Unix 哲学与 AI
[01:15:00]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[01:15:00]~[01:24:05]
调试复杂项目如 OpenSBI,Makefile 很吓人!“别慌,Makefile 也是状态机!” 用 make -n
查看命令,替换空格为换行,生成清晰日志。“再把日志丢给 AI,解释每个编译选项,秒变专家!”
例子:“我用 VS Code 解析 make -n
输出,AI 告诉我 -g
是调试信息,-O2
是优化级别。Unix 哲学真香!”
6. AI 时代:重塑学习与创造
[01:24:05]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[01:24:05]~[01:28:48]
图示说明:用 AI Prompt 提出问题,AI 提供建议、代码或解释,优化学习和创造过程。
AI:你的超级助手
[01:24:19]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[01:24:19]~[01:26:24]
“AI 是战略核武器!” 用 Prompt,“我在做 X,有更好的方法吗?” 能解决任何问题。“调试程序?AI 建议用 GDB TUI!编译 OpenSBI?AI 教你解析 Makefile!”
例子:“我问 DeepSeek,‘如何优化 GDB 调试?’ 它推荐条件断点和 .gdbinit
脚本。学习效率爆表!”
创造的未来
[01:26:24]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
[01:26:24]~[01:28:48]
“别卷 GPA,去做有执念的事!” 1998 年的 CIH 病毒作者挑战“100% 防毒”神话,启发安全进步。“今天有 AI,你们的舞台更大!用几百行代码实现 Agent,结合 Unix 哲学,超越传统工具!”
7. 总结与展望
[01:28:48]-[G:\姜艳艳操作系统操作空间\output\字幕\3\03 - 硬件视角的操作系统 [2025 南京大学操作系统原理].mp4]
“硬件视角的操作系统,就是在状态机上跑的程序!” 硬件响应指令、IO 和中断,固件从 Reset 开始接管,加载 MBR 或 UEFI 引导程序,最终运行操作系统。“操作系统启动后,变成中断处理程序,随时抢回控制权!”
我的期望:用状态机思维理解系统,用 AI 和 Unix 哲学解锁效率。“你们和顶尖人类的差距没那么大!问对问题,写代码,改变世界!”
下节课预告:我们会深入系统调用的实现,看看操作系统如何管理硬件资源。试试用 make -n
解析项目,或者问 AI,“RISC-V 引导流程细节是啥?” 保持好奇,咱们下节课见!
参考资料:
- 课程主页(示例代码下载)
- Bilibili 视频:03 - 硬件视角的操作系统
- 工具推荐:QEMU、CBios、OpenSBI
- 手册:Intel x86 手册、
man make
这篇博客带你走进硬件与操作系统的奇妙世界,希望你感受到探索的乐趣!有问题随时邮件我,或者在 QQ 群讨论。让我们用 AI 和代码,创造无限可能!