开机要走四棒接力:BIOS 自检 → 找启动设备 → 引导装入程序读入内核 → 操作系统接管;这么绕是因为 BIOS 那块地方装不下系统。
前六节都在讲【程序跑起来之后】的事,这一节回到最开始:按下电源键那几秒,机器在干什么。
一、四棒接力
第一棒:BIOS 自检——确认 CPU、内存、显卡都还在,有问题就报警。 第二棒:BIOS 找启动设备——按设定顺序(磁盘、U 盘、网络)看看哪个能启动。 第三棒:引导装入程序——把操作系统最核心的部分读进内存。 第四棒:操作系统——接管控制权,初始化设备、启动服务,最后桌面出现。
二、两段小程序住在哪儿
BIOS 住在主板上的一小块只读存储里——所以不装系统它也照样在。 引导装入程序住在磁盘的特定位置(引导扇区)——所以它要等装系统时才会被写上。 这个区别很有用:系统坏了 BIOS 还在,所以你能进 BIOS 设置、能从 U 盘启动。 而引导扇区被写坏,就轮到【引导失败】那类报错了。
三、为什么要这么绕
最自然的疑问是:为什么不直接让 BIOS 启动操作系统? 答案很简单也很实在:BIOS 那块地方太小,装不下操作系统。 所以它只干一件最简单的事:把控制权交给一个能读磁盘的小程序,剩下的事一层层往下传。 这种【一次只解决一个问题、把剩下的交给下一棒】的做法,在计算机里到处都是。
四、这一章到这里就收口了
回头看第七章这条线,其实是一层一层的【垫中间】: 驱动垫在程序和硬件之间,抹平硬件的型号差异(7.2)。 高级语言的运行时垫在程序和系统 API 之间,抹平系统差异(7.3)。 虚拟机垫在代码和 CPU 之间,抹平指令集差异(7.5)。 云更是把整台机器都变成了可替换的一层(7.6)。 而 BIOS 与引导装入程序是最早、最朴素的那一次分层——先站稳脚跟,再把活儿交出去。
五、动手 Demo:BIOS与引导装入程序
按下电源键之后,电脑并不是直接进系统的。 它要走一段固定的接力赛——一共有四棒。
steps = (("BIOS", "通电自检"),
("BIOS", "找启动设备"),
("引导装入程序", "读入内核"),
("操作系统", "接管控制权"))
for i, who_what in enumerate(steps, 1):
print("第 %d 步 %s %s" % (i, who_what[0], who_what[1]))
实跑输出:
--------------------------------------------------------------------
BIOS与引导装入程序
--------------------------------------------------------------------
按下电源键之后,电脑并不是直接进系统的。
**它要走一段固定的接力赛——一共有四棒。**
棒次 谁在跑 做什么
-----------------------------------------------------------------------
第一棒 BIOS 通电自检:确认 CPU、内存、显卡都还在
第二棒 BIOS 按设定顺序去找启动设备(磁盘、U 盘、网络)
第三棒 引导装入程序 把操作系统最核心的部分读进内存
第四棒 操作系统 接管控制权,初始化设备、启动服务
**BIOS 住在主板上的一小块只读存储里**——所以它**不装系统也在。**
**引导装入程序住在磁盘的特定位置**——所以它**装系统时才会被写上。**
模拟跑一遍这四棒:
第 1 步 BIOS 通电自检 —— CPU、内存、显卡都回应了
第 2 步 BIOS 找启动设备 —— 在磁盘上找到了引导扇区
第 3 步 引导装入程序 读入内核 —— 把系统核心搬进内存
第 4 步 操作系统 接管控制权 —— 初始化设备、启动服务
第 5 步 操作系统 启动完成 —— 桌面出现了
为什么这么绕、不直接让 BIOS 启动系统?
**因为 BIOS 那块地方太小,装不下操作系统。**
所以它只干一件最简单的事:**把控制权交给一个能读磁盘的小程序(引导装入程序)。**
剩下的事一层层往下传——**这套【一次只解决一个问题】的分层,就是整本书的底色。**
BIOS 住在主板上,所以不装系统也在;引导装入程序住在磁盘上,所以装系统时才写。 绕的原因只有一个:BIOS 那块地方太小,装不下操作系统。
30 秒实验
- 开机时按一下进入设置的键(不同品牌不一样),找找启动顺序在哪儿。
- 想一想:如果引导扇区坏了,为什么还能用 U 盘启动来修。
常见误区
- 以为 BIOS 是操作系统的一部分。它住在主板上,与系统无关。
- 以为开机是一步完成的。它是自检、找设备、读内核、接管四棒接力。
自测三问(点开对答案)
1. 开机的四棒分别是谁在做什么? —— BIOS 自检 → BIOS 找启动设备 → 引导装入程序读入内核 → 操作系统接管。 2. BIOS 和引导装入程序分别住在哪儿? —— BIOS 在主板上的只读存储里;引导装入程序在磁盘的特定位置(引导扇区)。 3. 为什么不让 BIOS 直接启动系统? —— BIOS 所在的存储太小,装不下操作系统,只能把控制权交给能读磁盘的小程序。- ☐ 下一章(第八章 从源文件到可执行文件)
相关笔记
- 运行环境=操作系统+硬件 — 这一章从头到尾的主线
- 云计算平台提供的虚拟运行环境 — 分层思想被放大之后
- 程序加载到内存后才能运行 — 从磁盘搬到内存的第一步
- 💻 计算机是怎样跑起来的 · 索引 — 讲硬件是怎么搭起来的
- ⚙️ 程序是怎样跑起来的 · 索引