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

10 - 为什么读硬盘比读内存慢那么多

前面几章反复出现一句话:「硬盘比内存慢」。到底慢多少?为什么会这样?这章讲清楚存储金字塔缓存思想——这是整个计算机世界里最重要、最通用的一个思想,不止操作系统用,处处都在用。

速度差距大到超乎想象

计算机里的存储设备,速度和容量刚好成反比。从快到慢排下来是一座金字塔:

            ▲ 越往上:越快、越贵、越小
    ┌───────────────┐
    │   寄存器       │   在 CPU 里,最快
    ├───────────────┤
    │   CPU 缓存     │   L1/L2/L3,很快
    ├───────────────┤
    │   内存 (RAM)   │   快,断电即失
    ├───────────────┤
    │   固态硬盘 SSD │   慢一些,断电还在
    ├───────────────┤
    │   机械硬盘 HDD │   更慢,更便宜、更大
    └───────────────┘
            ▼ 越往下:越慢、越便宜、越大

差距有多夸张?打个比方,如果把「从 CPU 缓存拿数据」看成1 秒,那么:

  • 从内存拿,大概相当于 几分钟
  • 从固态硬盘拿,相当于 几天
  • 从机械硬盘拿,相当于 几个月

这就是为什么第 07 章说「内存不够、频繁换硬盘会卡到死机」——每次找硬盘要数据,对 CPU 来说都是漫长的等待。

矛盾:又想快,又想大又便宜

我们当然希望所有存储都像寄存器一样快,可那样太贵了,根本装不起几个 G。反过来,全用大硬盘又太慢。

怎么办?答案是分层 + 缓存:把它们组合起来用,让「大部分访问都落在快的那一层」。

缓存思想:把常用的放在离你近的地方

**缓存(Cache)**的核心思路一句话:

把「最近、最常用」的数据,复制一份放到更快的那一层,下次直接从快的地方拿。

CPU 要数据时,先问最快的缓存有没有:

  • (命中):直接拿,飞快。
  • 没有(未命中):只好去下一层(内存、硬盘)找,慢,但找到后会顺手复制一份放进缓存,赌你待会儿还会用。

这招为什么有效?因为程序访问数据有个规律叫局部性

  • 你刚用过的数据,很可能马上又要用(比如循环里的计数器);
  • 你用了某个数据,它旁边的数据也很可能马上要用(比如遍历一个数组)。

所以把「刚用的」和「旁边的」提前放进快的层,命中率就很高,整体速度被大大拉快。

这个思想到处都是

缓存不是 CPU 的专利,它是通用智慧,你会在无数地方再遇到它:

  • 浏览器缓存:网页图片存本地,第二次打开就不用重新下载。
  • Redis:把数据库里的热点数据放进内存,避免每次都去查慢的数据库。
  • CDN:把网站内容复制到离你最近的服务器,加载更快。
  • 操作系统:读过的文件内容会先留在内存里(叫「页缓存」),下次再读同一文件就快得多。

记住这句万能咒语:慢的东西,就在它前面架一层「常用数据的快副本」。 这几乎是所有性能优化的起点。

小结

  • 存储设备是一座金字塔:寄存器 → 缓存 → 内存 → SSD → 机械硬盘,越往下越慢越大越便宜,速度差距成千上万倍。
  • 既想快又想大又便宜是矛盾的,解法是分层组合 + 缓存
  • 缓存的核心:把最近、最常用的数据复制到更快的层,命中就飞快;靠的是程序访问的局部性规律。
  • 缓存是贯穿整个计算机世界的通用思想:CPU 缓存、页缓存、浏览器缓存、Redis、CDN……本质都一样。

下一章 → 11 - 从开机到跑起一个程序,OS 都做了什么 | 回到 README 目录