11 - 从开机到跑起一个程序,OS 都做了什么
最后一章,我们不讲新知识,而是把前面所有零件串成一条完整的故事线。跟着「开机 → 打开一个程序 → 程序干活」走一遍,你会发现前面每一章都在这条线上各就各位。
第一幕:开机
你按下电源键:
- 主板上一段固化的小程序(BIOS/UEFI)先醒来,检查硬件是否正常。
- 它从硬盘上找到操作系统,把操作系统内核加载进内存。
- 内核开始运行,初始化各种管理机制:进程管理、内存管理(建立页表体系)、文件系统、加载设备驱动……
- 最后启动一堆后台服务,把登录界面显示给你。
此刻,那个「管家」(第 01、02 章)已经就位,随时准备接管一切。
第二幕:你双击一个程序
你双击 微信.exe:
- 这个
.exe只是硬盘上的一个程序(静态菜谱,第 03 章)。OS 通过文件系统(第 09 章)找到它在硬盘上的数据。 - OS 创建一个进程(第 03 章),给它分配一整套家当:一套独立的虚拟地址空间(第 08 章)、进程档案等。
- 把程序需要的代码/数据从硬盘装入内存——但用的是虚拟内存机制,暂时用不到的部分先不加载,按需再说(第 07、08 章)。
- 进程里创建出线程(第 03 章)来实际执行代码。
菜谱进了厨房,火开起来了,程序「活」了。
第三幕:程序开始干活
现在这个进程要和别人抢 CPU、访问内存、读写文件:
- 抢 CPU:它和其他几百个进程一起,被调度器(第 05 章)安排,靠时间片轮转(第 04 章)轮流用 CPU。切换时发生上下文切换。
- 访问内存:它用虚拟地址访问内存,MMU 查页表翻译成物理地址(第 08 章)。要的数据不在内存?触发缺页中断,OS 从硬盘换回来。
- 多线程协作:内部多个线程共享数据,改公共数据时要加锁防止竞态,还要小心死锁(第 06 章)。
- 读写文件 / 上网:这些是「越权」操作,程序通过系统调用请 OS 代劳(第 02 章),OS 从用户态切到内核态帮它办。
- 加速:频繁访问的数据靠各级缓存(第 10 章)加速,读过的文件留在内存页缓存里。
一张图把 OS 的职责收进脑子里
你的程序(进程 + 线程)
│
┌───────────────┼────────────────┐
│ │ │
要 CPU 要 内存 要 文件/设备
│ │ │
▼ ▼ ▼
进程调度 虚拟内存/分页 文件系统 + 驱动
(时间片/优先级) (MMU+页表+swap) (inode/系统调用)
│ │ │
└───────────────┴────────────────┘
│
底层用「缓存 + 存储金字塔」加速
│
▼
硬件(CPU / 内存 / 硬盘 / 设备)
用一句话概括整个操作系统
操作系统就是那个替所有程序管好 CPU、内存、文件和设备,并保证大家互不干扰的「管家」。它用调度分配 CPU,用虚拟内存管理内存,用文件系统组织硬盘,用系统调用守住安全边界,用缓存把整体速度拉起来。
如果你能把这段话背后的道理讲清楚,操作系统的核心认知就已经建立了。
恭喜你学完了
回顾一下这一路:
- 为什么需要 OS:硬件难用、程序会互相踩踏 → 需要一个管家(01、02)。
- CPU 怎么分:进程/线程、时间片轮转、调度、并发的坑与锁(03~06)。
- 内存怎么管:内存不够用 swap、虚拟内存与分页(07、08)。
- 数据怎么存:文件系统、存储金字塔与缓存(09、10)。
接下来推荐你看 计算机组成原理,去搞懂这些「硬件」本身又是怎么运转的。
回到 README 目录 | 下一篇教程 → 计算机组成原理