什么定义了 cpu 的地址 space?

Does what define a cpu's address space?

我的困惑是基于这三个想法 -

  1. 是否为 2^(cpu 上可用的所有地址引脚的数量)?

  2. 是2^(一个特定寄存器的大小)吗?

  3. 是一个地址范围内的所有地址都能理解的硬件电路吗?那又是什么呢?

我在这里问的不是虚拟地址space,我不知道它叫什么,也许它是包括ram在内的所有物理设备的物理地址space。 另外即使我得到了正确的答案那么我想问一下,为什么我的 cpu 有 2^39 位(512GB)的内存地址 space 和 64KB+3 I/O 内存 space。此信息写在我的系统打包文件中(带有集成的 lynx point-m PCH 的英特尔核心 i3-4005U)。

如果我问错了,欢迎您编辑我的问题。谢谢。

CPU 的物理地址大小 space 是设计者的任意选择。缓存标签和 TLB 条目的宽度必须足够宽,因为缓存是物理标记的(包括大多数 CPU 中的 L1d,包括所有 Intel),以及处理物理地址的其他内部事物。 (就像存储缓冲区一样,用于将加载地址与未完成的存储进行匹配。也用于将存储与 in-flight 代码地址进行匹配。)

所有 Haswell-client CPU 共享相同的核心微架构,因此即使笔记本电脑芯片不需要那么多,一些 single-socket non-Xeon 桌面可能。 (我认为这是真的;通过将缓存标记宽度更改 1 位或 2 位来节省少量 space and/or 功率可能是合理的,但如果英特尔这样做的话 IDK;我认为他们真的只想验证一次设计。)

请记住,设备内存(包括 PCIe 卡,例如 VGA 或 Xeon Phi 计算卡)通常会 映射到物理地址 space 所以 CPU 可以用 loads/stores 访问它(在将虚拟页面指向物理地址 space 的那些区域之后)。 PCIe 使用固定宽度的链路并将地址作为消息“数据包”的一部分发送;更多地址不需要额外的引脚。

DDR3 DRAM 控制器在每个通道上有许多地址线来发送 row/column 地址;可以不使用一个引脚。它与其他 DDR 版本非常相似;维基百科在 DDR4 文章中有一些信号图:https://en.wikipedia.org/wiki/DDR4_SDRAM#Command_encoding