4

我了解 32 位机器可以访问的内存大小限制为 4GB。由于还必须处理诸如 PCIe、USB、串行、并行、PS/2、音频 I/O、CD 驱动器、软盘驱动器、存储卡读卡器等 I/O 端口,结果是少于CPU 本身支持 4GB RAM。我刚才提到的所有事情和其他事情也需要相当多的记忆。

现在我很困惑的是它怎么能支持几GB的硬盘空间?它如何通过这些 SATA/ATA 接口访问甚至高达 1 TB 的外部存储。外接USB硬盘等USB大容量存储设备也是如此,我很惊讶CPU可以访问这么大的存储空间,同时限制为32位。32位处理器可以支持多大的HDD没有限制吗?

4

3 回答 3

5

不知道从哪里开始 :-)

这是一个非常简单的解释,自 286 以来并不完全正确,但可能有助于您掌握基本概念:

内存寻址是通过地址总线完成的:32 位地址总线可以表示 2^32 个不同的地址。一次操作中可操作的最小内存量称为“字”大小,它受数据总线宽度的限制。

可寻址存储器的最大数量是字大小乘以地址数。

在“块 IO”操作中,字大小的等价物是块大小,通常要大得多。这是一个权衡:可以使用相同的地址长度访问更大的数据,但翻转单个位需要覆盖整个块。

更大的区别在于,地址不需要像内存中那样同时出现在“地址总线”上:命令(和响应)以顺序“数据包”的形式传输,就像在网络上一样。因此,地址大小没有硬件强加的限制,尽管我确信协议指定了一个合理的上限。

如您所见,可寻址磁盘大小与 CPU 总线宽度和寄存器大小完全无关。

于 2013-05-03T11:04:32.573 回答
1

对于当今大多数应用程序开发人员来说,更喜欢处理 64 位文件指针。例如lseek64 for linux 或SetFilePointer for Windows - 所以从文件的角度来看,您可以处理 2^64 单个文件。

但从硬件层面来看,它更有趣——因为每个磁盘都被分割(在集群上的逻辑单元中,在扇区上的磁盘单元中)。每个簇有许多字节,可以通过单个查询来寻址和读取。操作系统对您隐藏了这些操作。但就集群而言,TB 更容易解决。

于 2013-05-03T10:45:07.510 回答
1

32 位处理器可以处理比 32 位大得多的数字(例如使用“带进位相加”指令)。处理器可以将大地址值写入 I/O 控制器的地址寄存器(例如使用几个 32 位数据存储指令)。由于这种间接寻址,磁盘 I/O 地址独立于处理器总线地址。

于 2013-05-03T11:57:53.790 回答