03 - 硬件视角的操作系统 [2025 南京大学操作系统原理]

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程序(状态机)
普通指令
系统调用
修改寄存器/内存
操作系统
改变外部状态(文件/屏幕)

图示说明:C 程序是一个状态机,普通指令修改寄存器或内存,系统调用请求操作系统改变外部状态,如写文件或显示到屏幕。

上节课我们讲了,“一切都是状态机!” 程序是一个状态机,在 GDB 里用 info localsinfo 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]

Reset
普通指令
特殊指令
CPU
初始状态
寄存器(PC, CR0等)
取指令
执行指令
修改寄存器/内存
IO/中断
外部世界(设备/定时器)

图示说明: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 的 inout 指令读写端口,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 Reset
固件(Firmware)
硬件初始化
检测CPU/内存/设备
用户配置
BIOS/UEFI界面
加载操作系统
MBR/UEFI引导程序

图示说明: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]

固件有三大任务:

  1. 硬件初始化:检测 CPU 电压、内存大小、存储设备。“没内存条?固件会报警!”
  2. 用户配置:提供 BIOS/UEFI 界面,设置硬件参数,如启用虚拟化或调整 CPU 电压。
  3. 加载操作系统:根据用户选择,从磁盘或 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(512字节)
检查0x55AA
跳转0x7C00
引导程序
加载操作系统内核
操作系统运行

图示说明:固件加载主引导记录(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 AA55 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(0x7C00)
捕获写指令(repeat insl)
查看内存

图示说明:固件加载 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
我在做X,有更好的方法吗?
AI 回答
建议/代码/解释
学习/优化

图示说明:用 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 引导流程细节是啥?” 保持好奇,咱们下节课见!


参考资料

这篇博客带你走进硬件与操作系统的奇妙世界,希望你感受到探索的乐趣!有问题随时邮件我,或者在 QQ 群讨论。让我们用 AI 和代码,创造无限可能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值