首页 / 知识库 / 进大厂必备计算机基础 / 计算机组成原理

05 - 内存:数据的临时仓库

CPU 干活飞快却没记性,它要的指令和数据都得从内存现取。这一章讲清楚内存到底长什么样、CPU 怎么在里面精确找到一个数。

内存就是一排编了号的格子

把内存想象成一栋楼里一长排大小相同的储物柜

地址:  0     1     2     3     4     5    ...
     ┌────┬────┬────┬────┬────┬────┐
     │ 01 │ FF │ 6A │ 00 │ 3C │ ...│
     └────┴────┴────┴────┴────┴────┘
  • 每个格子大小一样(通常是 1 字节 = 8 个 bit)。
  • 每个格子里存着一串 0/1(也就是一个字节的数据)。
  • 每个格子都有一个唯一的编号,这个编号就叫地址(Address)

CPU 想读写内存,靠的就是这个地址:「把 3 号格子里的数据给我」「把这个结果存到 100 号格子」。这就是按地址访问

就像快递柜:每个格口有编号,你凭编号就能精确地存取某一格,不用一个个翻。地址之于内存,就是格口编号。

关键特性:随机访问,一样快

内存的英文是 RAM(Random Access Memory,随机访问存储器)。这个「随机访问」是它最大的优点:

不管访问的是 0 号格子还是 100 万号格子,速度都一样快。 想访问哪个直接报地址,一步到位。

这和硬盘(尤其是机械硬盘)不同——机械硬盘要靠磁头移动、盘片旋转到指定位置,访问不同位置快慢差很多。内存则是「随点随到」。

CPU 怎么和内存对话

CPU 通过总线(第 03 章的「高速公路」)向内存发两类信号:

  • :CPU 发出「地址 + 读」,内存把该地址的数据送回 CPU。
  • :CPU 发出「地址 + 数据 + 写」,内存把数据存进该地址。

CPU 执行的每条指令,背后往往都伴随着这样的读写。比如 a = b + c,大致就是:从内存读出 b、读出 c、相加、把结果写回 a 所在的内存地址。

内存的两个「软肋」

内存快、随机访问是优点,但它有两个躲不掉的短板:

1. 断电就丢(易失性) 内存靠持续供电来维持里面的 0/1,一断电,数据全没。所以它只能当「临时工作台」,长期保存得靠硬盘。这也是为什么没保存的文档,一断电就没了。

2. 相对 CPU 来说,还是慢 内存已经很快了,但 CPU 更快。CPU 每取一次内存数据,都得「等」内存好一会儿(相对而言)。如果 CPU 每算一步都干等内存,那再快的大脑也被拖成蜗牛。

这第二个软肋,正是下一章的核心:既然内存跟不上 CPU,就在它俩中间加一层更快的「缓存」。这也和你在操作系统篇学过的「存储金字塔」完全呼应。

补充:内存地址和虚拟内存

还记得操作系统篇第 08 章的虚拟内存吗?程序里用的地址其实是「虚拟地址」,由 MMU 翻译成这里说的「真实物理地址」再去访问内存格子。

  • 组成原理(本章)关心的是:内存物理上就是一排编号的格子,按地址读写。
  • 操作系统关心的是:怎么用虚拟地址这层「障眼法」,让多个程序安全地共用这些格子。

两者是同一个内存的两个视角,合起来看就完整了。

小结

  • 内存是一长排编号的格子,每格通常 1 字节,每格有唯一地址;CPU 靠地址按地址访问读写数据。
  • 内存是 RAM(随机访问):访问任意地址速度都一样快,随点随到(不像机械硬盘挑位置)。
  • CPU 通过总线对内存发「读 / 写」信号完成数据交换,每条指令背后常伴随内存读写。
  • 内存两大软肋:断电即失(只能当临时工作台)、相对 CPU 仍然慢(需要缓存来救场)。
  • 本章讲的是物理内存视角,和操作系统篇的虚拟内存是同一内存的两面。

下一章 → 06 - 为什么要有寄存器和多级缓存 | 回到 README 目录