据我所知,32位机器可以访问的内存大小限制为4GB。由于有PCIe,USB,串行,并行,PS / 2,音频I / O,CD驱动器,软驱,存储卡读卡器等I / O端口,因此必须处理,结果是CPU本身支持4GB RAM。我刚刚提到的所有事情和其他事情也会占用相当多的记忆。
现在我感到困惑的是它如何支持几GB的硬盘空间?如何通过这些SATA / ATA接口访问甚至高达1 TB的外部存储。同样适用于外部USB硬盘等USB大容量存储设备,我很惊讶CPU可以访问这么大的存储空间,但限制为32位。 32位处理器可以支持多大的硬盘没有限制吗?
答案 0 :(得分:4)
不知道从哪里开始: - )
这是一个非常简单的解释,自286以来并不完全正确,但可能会帮助你掌握基本概念:
存储器寻址通过地址总线完成:32位地址总线可以表示2 ^ 32个不同的地址。在一次操作中可操作的最小内存量称为“字”大小,它受数据总线宽度的限制。
可寻址存储器的最大数量是字大小乘以地址数。
在“块IO”操作中,字大小的等价物是块大小,通常要大得多。这是一个权衡:可以使用相同的地址长度访问更大的数据,但是翻转单个位需要覆盖整个块。
更大的区别在于地址不需要同时出现在内存中的“地址总线”上:命令(和响应)以顺序“数据包”的形式传输,就像在网络上一样。因此,对地址大小没有硬件限制,尽管我确信协议指定了合理的上限。
如您所见,可寻址磁盘大小与CPU总线宽度和寄存器大小完全无关。
答案 1 :(得分:1)
对于大多数现在应用程序开发人员更喜欢处理64位文件指针。例如,对于Linux为lseek64或对于Windows为SetFilePointer - 因此从文件的角度来看,您可以处理2 ^ 64个单个文件。
但是从硬件层面来看它更有趣 - 因为每个磁盘都被拆分(在集群上的逻辑单元中,在扇区上的磁盘单元中)。每个群集都有许多字节,可以通过单个查询进行寻址和读取。操作系统会隐藏这些操作。但就群集而言,太容易解决太字节问题。
答案 2 :(得分:1)
32位处理器可以处理比32位更大的数字(例如使用“with with carry”指令)。处理器可以将大地址值写入I / O控制器的地址寄存器(例如,使用多个32位数据存储指令)。由于这种间接寻址,磁盘I / O地址与处理器总线地址无关。