2026-02-23 01:40:56 +08:00
|
|
|
|
# 操作系统:给电脑请个"大管家"
|
2026-02-15 01:57:52 +08:00
|
|
|
|
|
2026-02-18 15:52:55 +08:00
|
|
|
|
::: tip 🎯 核心问题
|
2026-02-23 01:40:56 +08:00
|
|
|
|
**有了完美的 CPU 和无限的内存,电脑就能直接用了吗?**
|
|
|
|
|
|
在上一章,我们见证了晶体管如何组合成强大的 CPU。但其实,如果直接使用这些冷冰冰的硬件,哪怕只是想在屏幕上打出一个字母,你都需要手写几百行晦涩的机器指令。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
为了不让大家在每次用电脑时都被逼疯,前辈们创造了一个夹在“硬件”和“你”之间的超级管家——**操作系统(Operating System, 简称 OS)**。本章我们不谈深奥的理论,只聊聊这个大管家是怎么通过三大“障眼法”,把复杂的硬件调教得服服帖帖的。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
## 0. 承上启下:如果没有操作系统会怎样?
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
上一章我们提到,CPU 是一个不知疲倦的无情计算机器,通电后就会一行一行地执行指令。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
但这带来了几个现实的灾难:
|
|
|
|
|
|
1. **CPU 独占危机**:CPU 一次只能干一件事。如果你正在听歌,想切出去看个网页?抱歉,没有操作系统的调度,你的电脑必须停下音乐,才能去加载网页。
|
|
|
|
|
|
2. **内存踩踏事故**:微信和游戏都在使用内存。如果没有保安管理,游戏一不小心把数据写到了微信的内存地盘,微信当场崩溃。
|
|
|
|
|
|
3. **硬盘迷宫**:硬盘本质上只是一张密密麻麻刻满 0 和 1 的巨大光盘。要想找到你昨天存的照片,你必须准确记住它存放在第 12345 圈磁道的第 678 个扇区。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
为了解决这些噩梦,操作系统诞生了。它对外提供了一套优雅的“幻觉”,这就是它的三大核心魔法:**进程(管理 CPU)**、**虚拟内存(管理内存)** 和 **文件系统(管理硬盘)**。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
## 1. 进程管理:制造“同时运行”的幻觉
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
你平时用电脑,常常是一边挂着微信,一边听着音乐,还能一边打字。但如果你买的电脑其实只有一个 CPU 核心,它是怎么同时做这三件事的?
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
答案是:**它并没有同时做**。是操作系统在进行疯狂的“时间管理”。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
<ProcessDemo />
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
::: tip 💡 核心原理解析:时间片轮转(Time Slicing)
|
|
|
|
|
|
操作系统把 CPU 的时间切成了极其微小的片段(比如 10 毫秒)。
|
|
|
|
|
|
- 第 1-10 毫秒:让 CPU 去执行**微信**的接收消息逻辑。
|
|
|
|
|
|
- 第 11-20 毫秒:把微信强制暂停,让 CPU 去执行**音乐**的播放逻辑。
|
|
|
|
|
|
- 第 21-30 毫秒:把音乐暂停,让 CPU 去响应你的**键盘打字**。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
因为切换的速度实在太快了(一秒钟切换成百上千次),在人类迟钝的感知中,就觉得这三个软件是“同时”在运行的。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
在操作系统的术语里,运行中的程序就被称为**进程(Process)**。操作系统就是这群进程的冷酷无情的排班经理。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
## 2. 内存管理:给每个程序画个“海市蜃楼”
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
解决了 CPU 轮流用的问题,接下来是存放数据的内存。如果所有的进程都挤在同一块物理内存里,很容易发生互相干扰和偷看数据的危险。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
操作系统的第二大魔法,叫作**虚拟内存(Virtual Memory)**。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
<MemoryDemo />
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
::: tip 💡 核心原理解析:内存映射
|
|
|
|
|
|
操作系统对每一个启动的进程撒了一个弥天大谎:“嘿,你独占了整整 4GB 的纯净内存空间,随便用!”(这就是**虚拟内存**)。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
但实际上,当进程往这个“虚拟空间”里放东西时,操作系统的底层会拿出一个**映射表(页表)**,偷偷把数据塞进**真实物理内存(Physical Memory)**中各种零碎、不连续的角落里。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
**这么做有两个巨大的好处:**
|
|
|
|
|
|
1. **绝对安全**:微信永远只能看到自己的虚拟空间,它根本不知道音乐的数据在物理内存的哪个角落,自然就不会发生“踩踏”。
|
|
|
|
|
|
2. **碎片利用**:物理内存就算被用得像狗皮膏药一样稀碎,映射给进程的虚拟空间依然是连续且整齐的。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
## 3. 文件系统:把“荒地”变成“档案馆”
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
如果你买了一块崭新的硬盘,它里面其实是一片荒芜的存储单元。如果你想存一张照片,硬盘硬件只会问你:“请告诉我你要存在第几个字节地址?”这显然反人类。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
操作系统的第三大魔法是**文件系统(File System)**,它为你构建了我们最熟悉的:文件夹(目录)和文件的概念。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
<FilesystemDemo />
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
::: tip 💡 核心原理解析:从地址到路径
|
|
|
|
|
|
文件系统本质上是一个超级大型的“翻译官”加“账本”:
|
|
|
|
|
|
1. **账本功能**:它悄悄地把硬盘切分成无数个小块(Block),然后用一个账本记录下来“哪几个小块现在是空的可以存数据,哪几个小块已经存了东西”。
|
|
|
|
|
|
2. **翻译功能**:当你双击一层层文件夹,打开 `D盘/照片/宠物.jpg` 时,并不是硬盘真的长出了树枝一样的结构。而是文件系统在它的账本里疯狂翻阅,最终翻译出:哦,这个路径其实对应的是硬盘上的第 1056、1057 和 998 块小地方,然后把数据取出来交给你。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
## 4. 总结:伟大的幕后英雄
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
让我们通过一个你每天都在经历的场景,串联起今天学到的知识。当你**双击鼠标打开一个游戏**时,为了伺候你,大管家做了什么?
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
1. **文件系统**:立刻从底层硬盘的杂乱数据块中,拼凑出游戏的执行文件和美术资产。
|
|
|
|
|
|
2. **内存管理**:为你分配一个巨大的虚拟内存空间,制造出“这台电脑只有这一个游戏”的幻觉,并把刚才找到的文件放进物理内存的空隙里。
|
|
|
|
|
|
3. **进程管理**:在它的名册上新建一个“游戏进程”,并在下一个瞬间,立刻剥夺其他正在运行软件的 CPU 权利,把 CPU 的计算力全盘移交给你的游戏。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
我们之所以能那么轻松、优雅地在数字世界里冲浪,全都是因为底层的操作系统在替我们负重前行。
|
2026-02-18 15:52:55 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 延伸阅读
|
|
|
|
|
|
|
2026-02-23 01:40:56 +08:00
|
|
|
|
如果你觉得操作系统的各种“管理学”十分有趣,你可以看看这些进阶话题:
|
|
|
|
|
|
- **进程与线程的区别**:除了进程,还有一种叫作“线程”的东西,它们是干什么用的?(为什么 Google Chrome 那么吃内存?)
|
|
|
|
|
|
- **页面置换算法**:当物理内存全都塞满了,但你又打开了一个新软件,操作系统该把谁的数据临时踢到硬盘里?(LRU 算法)
|
|
|
|
|
|
- **操作系统的多态**:Windows 和 macOS 会在底层实现上有什么不同?为什么有些软件只能在特定系统上运行?
|