32/64位应用程序,操作系统和处理器之间有什么关系?

时间:2012-03-21 15:43:33

标签: linux memory operating-system processor

我搜索了这些主题,但不确定我是否正确理解了他们的关系。我总结了以下几点,请更正/补充。

  • 32位或64位处理器意味着处理器可以一次处理32/64位。使用32位或64位处理器表示底层寄存器,地址总线或数据总线的大小也相同。

  • 为了使用32/64位处理器,我们有32/64位操作系统

  • 为了在32/64位操作系统中工作,我们开发了32/64位应用程序

  • 可以在64位操作系统中运行32位应用程序,在32位操作系统中运行64位应用程序(LinuxPAE64

  • 无法在32位处理器上运行64位应用程序/操作系统


另外,我有两个与记忆有关的问题。

  1. 处理器的内存映射布局似乎与处理器的指令大小无关。例如,大多数英特尔酷睿2系统(64位)都有一个非常接近下图所示的存储器映射。 为什么 64位处理器没有选择更广泛的内存映射?

    enter image description here

  2. 什么限制64位操作系统使用最多(2 ^ 64 - 设备/总线地址)大小的RAM?

1 个答案:

答案 0 :(得分:3)

有许多不同类型的处理器(ARM,MIPS,x86,...)。

我可以谈谈x86(32位)/ x86-64(64位)。

位数主要指寄存器大小。对于x86,虚拟地址空间限制为32位(4GiB)。这意味着32位应用程序(假设它在32位CPU上运行的应用程序)只能同时看到4GiB。

对于x86-64,所有虚拟地址的大小均为64位。但是,通过要求所有不支持的位与最重要的支持位具有相同的值,CPU可以自由地不支持所有64位。操作系统必须查询支持的位数。 (我的Core i5支持48位)

物理地址空间,即CPU实际可以处理的内存量,首先是x86,大小为32位。但是从Pentium 1开始,CPU支持Pyisical Address Extension (PAE),允许最多36位(64GiB)的RAM。 (操作系统必须启用扩展)

目前x86-64将物理地址空间限制为52位(4PiB)。在这里再次CPU可以免费支持更少的位。 (我的Core i5支持36位)

由于x86和x86-64使用相同的操作码,含义略有不同,因此32位应用程序不能只在64位CPU上运行(在64位模式/长模式下)。

但是x86-64有一个所谓的兼容模式(长模式的子模式),它允许它执行32位应用程序。 (操作系统必须切换模式。)

处理器不选择存储器映射。它是mainbord& amp;的责任。 BIOS,可部分由OS配置。主要原因& BIOS制造商将所有内容保留在较低的4GiB地址空间中,与32位操作系统兼容。 (出于与旧的16位DOS应用程序的兼容性原因,即使x86-64 CPU默认禁用对每个物理地址空间的第二个MiB的访问)

如上所述,x86-64通过规范将物理地址空间限制为52位。更远的是由CPU实现限制的地址空间,甚至是mainbord实现更远的地址空间。 (所有这些都是为了降低实施成本)。所以没有办法解决2⁶⁴的RAM。