为什么 32 位 CPU 最大支持 4G 内存

发布于 2024-06-28 20:35:02 字数 1468 浏览 43 评论 0

要解答这个问题需要先了解 CPU 如何从内存中读取数据。

CPU 内存通信

上图展示了 CPU 和内存之间存在的 3 条系统总线,分别是 数据总线地址总线控制总线 ,分别用于传输内存数据、传输内存地址以及控制内存读写。当 CPU 需要从内存(某个地址)中读取数据时,会分别经历以下几个流程:

  1. 寻址阶段:首先,CPU 的地址寄存器存储目标内存地址。这个地址通常来自程序代码中的某个指令,例如加载指令(如 x86 中的 MOV、ARM 中的 LDR 等)。
  2. 发起请求:CPU 发出一个内存读取请求。为此,CPU 将内存地址放在地址总线上,然后在控制总线上设置一个读信号,指示内存访问单元(如北桥或直接内存控制器等)进行读操作。
  3. 总线传输:控制总线传输一个读信号,地址总线传输内存地址。这个过程可能涉及到某种计算机内的内存映射、地址翻译(例如虚拟地址到物理地址)等步骤。
  4. 内存响应:内存控制器定位需要访问的内存单元,读取数据,并将数据放到数据总线上。
  5. 数据放置到寄存器:CPU 从数据总线上获取数据,并将其保存到对应的寄存器中。在这个过程中,数据通过 CPU 的缓存(如 L1,L2,L3 等缓存)传输。操作完成后,数据将保存在 CPU 寄存器中,并可供后面的指令使用。

简化一下就是,CPU 需要读取 0xc000108000 地址的数据,它先将地址通过 MMU 单元转换为真实的内存地址,然后再将地址通过地址总线传输给内存,同时通过控制总线发送一个读取信号,表示要读取这个地址的数据。内存读取数据后,将数据通过数据总线传回内存。

上面读取内存数据的流程涉及到内存地址的传输,而内存地址传输需要地址总线,但地址总线位宽是有限的(每次能传输的数据有限),N 位的每次最多能传输 N bit 数据,也就是 0~2N-1。当 N 等于 32 时,2N-1 正好等于 4G。

举个例子,假如一个村庄的所有房间都需要通过门牌号才能定位到房间位置,那如果只有 100 个门牌号,即使村庄建了 101 间房,因为第 101 间房无法分配到门牌号致使它无法被定位,也就无人知道有这间房,从而变成了“鬼屋”。

扩展阅读

计算机中有一个概念叫 machine word (机器字),在 32 位系统下,它的长度为 4 个字节,64 位下为 8 个字节。操作系统可以原子的读写一个机器字,利用这个特性可以实现很多原子操作,我在后面的文章中会逐步分享。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

软甜啾

暂无简介

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文