【发布时间】:2013-07-10 21:30:20
【问题描述】:
目前我正在阅读高尔文的操作系统原理一书。我很喜欢阅读它,但同时我有一个问题。
我可以说如果我使用 64 位操作系统,那么(CPU 生成的)逻辑地址空间可以是 64 位的吗? IE。它将能够在物理内存中映射大量帧。如果我使用 32 位操作系统,那么 CPU 最多可以生成 2^32 个逻辑地址空间。
对吗?
【问题讨论】:
标签: operating-system
目前我正在阅读高尔文的操作系统原理一书。我很喜欢阅读它,但同时我有一个问题。
我可以说如果我使用 64 位操作系统,那么(CPU 生成的)逻辑地址空间可以是 64 位的吗? IE。它将能够在物理内存中映射大量帧。如果我使用 32 位操作系统,那么 CPU 最多可以生成 2^32 个逻辑地址空间。
对吗?
【问题讨论】:
标签: operating-system
有点,但有许多技术细节使这些名称不太有用。
首先,操作系统有两种不同的大小:地址大小和数据大小。地址大小决定了有多大的地址空间可用,而数据大小决定了在单字操作中可以使用多少数据。根据我的经验,操作系统通常由数据大小来识别,这意味着地址大小可能是其他东西。
以下是一些示例架构及其地址和数据大小。如表所示,当今最常见的 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 位的符号扩展,允许 248 地址空间,256 TiB 而不是 16 EiB。这减少了需要在处理器中使用的地址线数量,同时允许的地址线数量远远超过目前任何人使用的数量。
最后,到目前为止,一切都与逻辑或虚拟地址空间有关。物理地址空间可以有不同的大小。较新的 32 位 x86 系统具有物理地址扩展,可启用 36 位物理地址,并且 x86-64 系统被限制为不超过 52 位物理地址空间,但这可能会受到内存控制器/主板的进一步限制。当逻辑地址空间大于物理地址空间时,它允许将整个物理地址空间一次映射到多个位置。当逻辑地址空间较小时,允许在物理内存中同时存储多个完整的地址空间。
【讨论】: