【问题标题】:If a 32 bit address processor can access 4GB how does this processor deal with hard disk of size 500 Gb?如果一个 32 位地址处理器可以访问 4GB,这个处理器如何处理大小为 500 Gb 的硬盘?
【发布时间】:2021-12-30 10:08:54
【问题描述】:

一个 32 位寄存器可以存储 232 个不同的值。可以存储在 32 位中的整数值的有符号范围是 -2,147,483,648 到 2,147,483,647(无符号:0 到 4,294,967,295)。因此,具有 32 位内存地址的处理器可以直接访问 4 GiB 的字节可寻址内存。那么这种处理器如何处理大小超过 4 GB 的磁盘呢?

【问题讨论】:

标签: operating-system


【解决方案1】:

因此,具有 32 位内存地址的处理器可以直接访问 4 GiB 的字节可寻址内存。那么这种处理器如何处理大小超过 4 GB 的磁盘呢?

对于磁盘;通常它们不是字节可寻址的,并且可以读取或写入的最小量(块大小)是 512 字节或更大(可能是 4096 字节)。块号也可能大于 32 位(例如,可能是 48 位块号)。

使用 512 字节块和 48 位块编号(这在 1990 年代后期很常见;对于 ATA 和 SATA 等),您最终会得到最大磁盘大小为 134217728 GiB。

当然,CPU 可能(见注释)不能直接访问磁盘上的任何数据。软件(文件系统)必须要求设备驱动程序获取它想要的块,设备驱动程序要求硬件(磁盘控制器)在磁盘和内存之间复制数据。取决于操作系统;该软件接口(由文件系统用于要求设备驱动程序读取或写入块)很可能使用 64 位块号(例如,两个 32 位寄存器连接在一起)。

注意:最近,使用非易失性 RAM(例如 https://en.wikipedia.org/wiki/3D_XPoint )作为存储的可能性改变了一些事情(它是字节可寻址的并且确实使用物理地址);但现代硬件都是“64 位”(物理地址在实践中可能是 48 位或更大),因此即使理论上的限制要小得多,但在实践中仍然足够大(例如,可能 200000 GiB)。

【讨论】:

    【解决方案2】:

    在大多数台式计算机的主 CPU 架构 x86-64 上,AHCI(高级主机控制器接口)中的接口是标准化的。计算机使用此接口访问硬盘,实际上,该接口是符合 PCI-Express 规范的 PCI-Express 设备。

    对于 PCI,CPU 有一个内存控制器,当写入 RAM 的某些部分时,它将写入 PCI 设备寄存器而不是 RAM。软件(操作系统)将写入未缓存的 RAM,而是写入 PCI 设备的寄存器。通过这种方式,它可以告诉设备(包括 AHCI)执行一些操作,例如从硬盘到 RAM 的 DMA 操作,反之亦然。

    我没有完整阅读规范,但规范可能包含 64 位寄存器,可以写成 2 个 32 位字。更常见的是,软件会先写入寄存器的较低部分,然后再写入寄存器的较高部分。这允许任何 32 位计算机仍然能够与 AHCI 交互。在 64 位计算机上,寄存器将被写入一次 64 位写入。

    因此,32 位计算机仍然能够触发 DMA 写入到远高于 4GB 的硬盘的某些部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-07
      • 2010-09-19
      • 1970-01-01
      • 2010-12-14
      • 2011-04-23
      • 2016-04-21
      • 1970-01-01
      • 2021-11-18
      相关资源
      最近更新 更多