首页 / 知识库 / 进大厂必备计算机基础 / 计算机操作系统原理

07 - 内存不够用怎么办

内存(RAM)是程序运行时存放代码和数据的地方,但它有两个硬伤:容量有限。你只有 16G 内存,却同时开着几十个程序,它们要的内存加起来早就超了。OS 是怎么摆平的?这章先讲「不够用」的问题,下一章讲「怎么隔离」。

先分清两种「存储」

初学者常把内存和硬盘搞混,先掰开:

  • 内存(RAM):程序运行时的「工作台」。速度快,但断电就没了,容量小、贵。
  • 硬盘(磁盘):数据的「仓库」。速度慢,但断电还在,容量大、便宜。

程序要运行,必须先把用到的东西搬到内存这张「工作台」上;CPU 只跟内存打交道,不直接从硬盘里取数据干活。

问题:工作台不够大

假设你正开着很多程序,物理内存眼看要塞满了,这时又要启动一个新程序。硬来的话就崩了。OS 的巧办法是:把内存里暂时用不到的数据,先挪到硬盘上腾地方。

具体做法:

  1. OS 发现内存快满了。
  2. 它挑出一些「最近不太用」的内存内容,写到硬盘上一块专门的区域。
    • 这块区域,Windows 叫页面文件(pagefile),Linux 叫交换分区(swap)
  3. 腾出来的内存,就分给新的需求。
  4. 等哪天又需要之前挪走的数据了,再从硬盘换回内存(可能又得挪走别的来腾地方)。

这套「内存和硬盘之间来回倒腾」的机制,叫交换(Swapping)/ 换页。它制造了一种「内存好像比实际大」的错觉。

好比小桌子上摆不下所有文件,你就把暂时不看的先收进抽屉(硬盘),需要时再拿出来。桌子(内存)还是那么大,但你能处理的文件变多了。

代价:硬盘比内存慢太多了

这招不是白来的。硬盘比内存慢成百上千倍(第 10 章会讲这个差距有多大)。所以:

  • 偶尔换一换,感觉不到。
  • 一旦内存严重不足,OS 疯狂地在内存和硬盘之间来回倒腾,CPU 大部分时间都耗在等硬盘上,系统就会卡到几乎死机。这个现象有个专门的名字叫抖动(Thrashing)

这就是为什么内存不足时电脑会卡成 PPT——它不是在干活,是在拼命搬箱子。加内存条之所以立竿见影,就是让工作台够大,不用再频繁搬箱子。

承上启下

现在我们知道 OS 会用硬盘给内存「续命」。但这里藏着一个更根本的机制:程序在使用内存时,用的地址其实不是真实的物理地址,而是一套「假地址」。正是这套假地址,让「换来换去」「程序间隔离」都成为可能。这就是下一章的主角——虚拟内存

小结

  • 内存快但小、断电即失;硬盘慢但大、断电还在。程序必须先把数据搬进内存才能被 CPU 处理。
  • 内存不够时,OS 把暂时不用的内存内容挪到硬盘(swap / 页面文件),腾地方给新需求,制造「内存变大」的错觉。这叫交换 / 换页
  • 代价是硬盘慢:内存严重不足时来回倒腾会导致系统抖动,卡到几乎死机——所以加内存条很有用。
  • 这一切的底层支撑,是下一章的虚拟内存

下一章 → 08 - 每个程序都以为自己独占内存 | 回到 README 目录