我问过这个问题Unix并建议在这里询问。
我在 Linux Facebook 小组上回答了一个问题,有人问是否可以在 64 位 PC 上安装 32 位操作系统。我的回答是:
在 64 位 PC 上安装 32 位操作系统是完全可能的。但在 32 位 PC 上安装 64 位操作系统是不可能的。
好吧,然后有人回复了我的评论:
这并非不可以,但是这样做是错误的。
所以...在 32 位 PC 上安装 64 位操作系统真的可行吗?
答案1
答案2
答案3
你能设法安装它(通过一些黑客手段),但它毫无用处,因为它无法启动。所以从技术上讲你可以这样做,但我不建议这样做,因为大多数人都喜欢有一台可以启动的计算机。
如果您的计算机配备的是 32 位操作系统,并且 64 位操作系统运行良好,那么您应该检查您的实际计算机,因为有时 64 位计算机配备的是 32 位操作系统。
答案4
回复您原始评论的人可能遇到过 64 位操作系统(大概是指使用超出 32 位保护模式的可寻址内存或使用 64 位寄存器的操作系统),该操作系统在限制为 32 位内存的处理器上安装和启动,或使用更宽的硬件寄存器。最后一节给出了在 32 位硬件上安装 64 位操作系统的真实示例。中间几节解释了为什么不仅可以安装这样的操作系统,甚至可以使用它(理论上)。
技术细节
64 位操作系统有两个主要特点。第一个特点是可寻址内存超过 4GiB。由于基于 BIOS 的 64 位计算机启动时进入 16 位(又称实)模式,因此可以编写一个操作系统,在某些操作中跳入和跳出长 64 位内存模式(例如,https://www.codeproject.com/articles/45788/the-real-protected-long-mode-assembly-tutorial-for如何退出 64 位模式)。或者,在单任务环境中,让某些程序进入长模式。32 位 DOS 程序通常通过 DOS 扩展器进入和退出 32 位模式才能运行。科学计算平台也可以做类似的事情来获得运行 32 位代码的性能优势(是的!32 位代码可以比 64 位代码更快!)除非必要。
64 位操作系统中可能期望的第二个功能是 64 位寄存器。但可以轻松保持低位模式,并根据需要切换到高位模式。可以有一个包含 16 位、32 位和 64 位寄存器代码的混合程序。要切换寄存器大小,可以使用操作数大小覆盖前缀(操作码前缀 0x66 和 0x67),尽管最后这个细节通常由编译器处理,大多数程序员都看不到。
理论示例
可以编写一个只在某些部分使用 64 位的操作系统。这样的操作系统很容易想象。将 32 位操作系统移植到 64 位操作系统可能首先只将操作系统的某些部分变为 64 位(从而使其成为 64 位操作系统)。假设音频驱动程序是第一个移植的东西;这样的操作系统可以正常运行,直到播放音频文件。我猜这种情况在业余爱好者操作系统领域经常发生,因为有人想对 64 位进行一些实验,或者希望提高操作系统上特定操作集的速度。
在 32 位机器上安装 64 位操作系统的真实示例
64 位和 32 位代码混合的真实示例是 MacOS(版本 ~10.5-10.7)。在 64 位 Intel Mac 上,这些版本的 MacOS 可以启动到 32 位模式内核并运行 64 位应用程序 64 位用户空间操作系统代码。在 32 位机器上,计算机仍可启动。但是,当尝试运行仅 64 位应用程序时,MacOS 不会使计算机崩溃,而是拒绝运行该应用程序。
请注意,32 位和 64 位 Mac 上安装的是同一个磁盘操作系统。您可以在 32 位 Mac 上安装 MacOS,取出磁盘并将其放入 64 位 Mac 中并启动 64 位内核。当然,Hackintosh 场景证明您可以在通用 32 位机器上安装 MacOS。