目前我正在阅读 Galvin 的操作系统原理一书。我很喜欢阅读它,但同时我有一个问题。
我可以说如果我使用 64 位操作系统,那么(CPU 生成的)逻辑地址空间可以是 64 位的吗?即它将能够在物理内存中映射大量帧。如果我使用 32 位操作系统,那么 CPU 最多可以生成 2^32 个逻辑地址空间。
那是对的吗?
目前我正在阅读 Galvin 的操作系统原理一书。我很喜欢阅读它,但同时我有一个问题。
我可以说如果我使用 64 位操作系统,那么(CPU 生成的)逻辑地址空间可以是 64 位的吗?即它将能够在物理内存中映射大量帧。如果我使用 32 位操作系统,那么 CPU 最多可以生成 2^32 个逻辑地址空间。
那是对的吗?
有点,但有许多技术细节使这些名称不太有用。
首先,有两种不同的大小对操作系统很重要:地址大小和数据大小。地址大小决定了可用的地址空间有多大,而数据大小决定了单字操作可以使用多少数据。以我的经验,操作系统通常由数据大小来识别,这意味着地址大小可能是别的东西。
下面是一些示例架构及其地址和数据大小。如表所示,当今最常见的 32 位和 64 位架构具有相同的数据和地址大小,这就是您的陈述部分正确的原因。请注意,16 位模式下的 x86 处理器的地址大小大于数据大小。这是由于在寻址中使用了额外的段寄存器造成的,这使得架构的限制更少。
地址大小 数据大小 x86 16 位 20 位 16 位 x86 32 位 32 位 32 位 x86 64 位 64 位 64 位 ARM 32 位 32 位 32 位 ARM 64 位 64 位 64 位
然而,地址大小并不一定表明可以使用多大的逻辑地址空间。可能存在将空间限制在较小区域的限制。例如,当前没有 x86-64 处理器支持 64 位地址空间。相反,它们要求任何地址的高 16 位是第 47 位的符号扩展,允许 2 48地址空间,256 TiB 而不是 16 EiB。这减少了需要在处理器中使用的地址线数量,同时允许的地址线数量远远超过目前使用的任何人。
最后,到目前为止,一切都与逻辑或虚拟地址空间有关。物理地址空间可以有不同的大小。较新的 32 位 x86 系统具有物理地址扩展,可启用 36 位物理地址,并且 x86-64 系统被限制为不超过 52 位物理地址空间,但这可能会受到内存控制器/主板的进一步限制。当逻辑地址空间大于物理地址空间时,它允许将整个物理地址空间一次映射到多个位置。当逻辑地址空间较小时,它允许多个完整的地址空间同时存储在物理内存中。