operating-system - 64 位和 32 位操作系统中的逻辑地址空间

标签 operating-system

目前我正在阅读Galvin 的操作系统原理 这本书。我很喜欢阅读它,但与此同时我有一个问题。

我可以说如果我使用 64 位操作系统那么逻辑地址空间(CPU 生成的)可以是 64 位的吗? IE。它将能够在物理内存中映射大量帧。如果我使用 32 位操作系统,那么 CPU 最多可以生成 2^32 逻辑地址空间。

对吗?

最佳答案

有点,但有许多技术细节使这些名称不太有用。

首先,有两种不同的大小对操作系统很重要:地址大小和数据大小。地址大小决定了有多大的地址空间可用,而数据大小决定了单字操作中可以使用多少数据。根据我的经验,操作系统通常由数据大小来标识,这意味着地址大小可能是其他东西。

以下是一些示例架构及其地址和数据大小。如表所示,当今最常见的 32 位和 64 位架构具有相同的数据和地址大小,这就是您的陈述部分正确的原因。请注意,16 位模式下的 x86 处理器的地址大小大于数据大小。这是由于在寻址中使用了额外的段寄存器导致的,这使得架构的限制更少。

                 Address size      Data size
x86 16-bit        20 bits           16 bits
x86 32-bit        32 bits           32 bits
x86 64-bit        64 bits           64 bits
ARM 32-bit        32 bits           32 bits
ARM 64-bit        64 bits           64 bits

然而,地址大小并不一定表示可以使用多大的逻辑地址空间。可能存在将空间限制在较小区域的限制。例如,当前的 x86-64 处理器都不支持 64 位地址空间。相反,他们要求任何地址的高 16 位是位 47 的符号扩展,允许 248 地址空间,256 TiB 而不是 16 EiB。这减少了处理器中需要使用的地址线数量,同时允许的数量远远超过目前使用的任何地址线。

最后,到目前为止,所有内容都是针对逻辑或虚拟地址空间的。物理地址空间可以有不同的大小。较新的 32 位 x86 系统具有物理地址扩展,可实现 36 位物理地址,而 x86-64 系统被限制为不超过 52 位物理地址空间,但这可能会受到内存 Controller /主板的进一步限制。当逻辑地址空间大于物理地址空间时,允许将整个物理地址空间一次映射到多个地方。当逻辑地址空间较小时,允许多个完整的地址空间同时存储在物理内存中。

关于operating-system - 64 位和 32 位操作系统中的逻辑地址空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17581230/

相关文章:

python - 在我的批处理文件重命名和移动脚本中遇到 Python os.rename() 问题

c - 嵌入式系统不需要操作系统的数据库

C 父级和 2 个子级之间的管道

operating-system - 即使内存可用,小堆栈的基本原理是什么?

linux - ELF 的代码段何时加载到内存中?

operating-system - Java 可移植性不同 OS/JDK

node.js 从操作系统获取鼠标双击速度

windows - 在进程开始之前将 dll 注入(inject)进程的优雅方法

c - 子进程 pid() 是否被分配给父进程?

mobile - 单个开发人员是否有可能为安卓手机编写一个简单的移动操作系统?