处理器的位(32 位或 64 位)是硬件还是软件上下文?

Is bit (32 or 64 bit) of a processor an hardware or software context?

我有 运行 在某些情况下,我真的希望我对这种微不足道的现象有正确的看法。在 Visual Studio 中开发 C# 软件并且必须使用第 3 方库时,该指令有时会包含注意使用适用于 64 位处理器的库版本(例如 sqlite dlls)。像这样的事情和其他事情让我相信处理器的位大小(即 64 位或 32 位)是一个软件问题。然后再次安装 OS,有时您会听到类似“此 ISO 映像适用于 64 位处理器”的声音。当我意识到在计算机商店中,计算机以 RAM 和 HD 大小、处理器名称和速度为广告时等(例如 500GB HD、4GB RAM、Intel Celeron 处理器 2.2Ghz...)从未听说过在该上下文中提到 64 位或 32 位。

从上面的解释来看,

  1. 是 64 位还是 32 位的软件(即已安装的操作系统) 或硬件的东西?
  2. 如果以上为真,安装 64 位安全吗? OS(例如 Ubuntu 64 位 OS)在几乎任何计算机上,或者有 hardware/processor考虑?

您的 ISO 映像应该显示 "this ISO image is for 64 bit OSes"。 (或者希望更具体地说是 x86-64 OSes,因为 x86 不是世界上唯一的 ISA。)

  • 64 位内核(长模式)可以运行 64 位用户space(长模式)或 32 位(兼容模式)。这只能在支持长模式(即支持 64 位)的硬件上 运行。
  • 32 位内核(传统模式)只能运行 32 位用户-space(传统模式)。它也可以使用 vm86 模式来 运行 16 位软件,但是 64 位内核不能(没有像 VirtualBox 这样的完全虚拟化)。

因此 32 位 OS 可以将您的 64 位 CPU 限制为仅 运行 在 32 位模式下。


据我所知,即使在 x86 之外,这些要点通常也是正确的(模式名称除外),尽管我不确定 64 位 MIPS 和 PowerPC 甚至是不同的模式。 (即指令集中可能有空间来添加 64 位指令,而无需像 x86-64 那样改变现有指令编码的含义)。

64 位 ARM 有点像 x86-64:AArch64 是一个新的 ISA,但是一些支持它的 CPU 可以 运行 ARM32 用户-space 进程(也许 运行 ARM32 OS 也是)。但是一些较新的 Apple 芯片完全放弃了对 32 位 ARM 模式的硬件支持。 (AArch64 是一个足够激进的改变,这是值得做的。与 AMD64 不同,AMD 非常保守,几乎没有清除 x86 在难以解码和 运行 有效方面的缺点。(例如轮班保持标志不变,计数 = 0。这可以节省解码器和其他地方的晶体管,因为更多的晶体管可以与 32 位模式共享。)


在 32 位 OSes 完全过时之前,您有时会看到 64 位 Windows 与 32 位计算机的广告。

您所说的计算机广告总是针对包含 OS 的系统,因此 CPU 支持的内容仅与 OEM 相关;他们可以选择销售带有 32 位 OS 的 64 位机器(实际上仍然在上网本上这样做,因为 64 位 Windows 需要更多 space,因为它包含用于两者都有,而 32 位 Windows 对 64 位库没有用)。

使用 Linux,您可以进行纯 64 位安装,但销售的 PC 很少有 Linux。而且它不会节省太多 space,因为正常的 Linux 安装只有几个关键的 32 位库,而不是所有内容的第二个副本。尽管如此,64 位安装确实比纯 32 位安装需要更多 space。 x86-64 的代码大小通常稍大,即使指令数较少也是如此。

x86-64 还为具有大量指针数据结构的程序占用更多 RAM(除非你使用像 x32: 32-bit pointers in long mode 这样的 ABI),这是你仍然看到一些 32 位的低端计算机的另一个原因Windows 正在出售。 32 位 OS 实际上可能 运行 比内存为 2GB 或更少的 64 位更好。