32位操作系统可以在64位处理器中运行吗?


25

32位操作系统和64位操作系统有什么区别?32位操作系统可以在64位处理器中运行吗?


如果您在谈论Windows(Win32标记似乎表明了这一点),那么绝对是-Vista和Win7 64位通过兼容层支持几乎所有32位应用程序-我还没有发现任何能解决这一问题的方法在64位Vista上无法正常运行(系统级驱动程序除外)
marc_s 2009年

5
问题似乎更多是,您是否可以将Win Vista x86安装在具有64位处理器的盒子上,而不是x86应用程序是否在Win Vista x64上运行。
KTC

Answers:


34

您的问题是特定于体系结构的。x64本质上是对x86体系结构的扩展。它支持64位地址空间。它提供了一些新的指令和新的寄存器。

您可以在x64机器上运行32位x86 Windows。请注意,您不能在Itanium 64位系统上执行此操作。


16

64位处理器可以同时运行32和64个操作系统(至少x64可以)。一个32位处理器只能在本地运行32个。

区别主要在于指针/引用的大小。在64位计算机上,您可以在64位地址范围内引用地址(因此可以为您提供2 ^ 64字节的内存)。在32位上,您只能寻址2 ^ 32字节(= 4 GB)。现在,如果您看一下当前的计算机,显而易见的是为什么世界正在迁移到64位:32位不再能轻松访问所有RAM。

在x64(AMD / Intel)上,您还有64位的其他优点。CPU具有更多的寄存器,因此允许更有效的代码。

在其他体系结构上,64位和32位之间的差异不太明显。例如,Nintendo 64(还记得吗?)是一台64位计算机,但其大多数代码是32位。因此,在这种情况下,64位可作为一种营销技巧。


3

当前接受的答案通常是正确的,但不是特别正确。确实没有一个单独的东西叫做“ 32位CPU”或“ 64位CPU”,它的描述只涉及CPU体系结构的一小部分,尤其是它引用的数字。 CPU和存储器之间的地址选择线的数量,即可用于存储器操作的所谓地址空间

在过去的日子里,当人们习惯坐下来编织(包装)处理器和内存之间的电线时,您可能不得不使用32或(理论上,因为当时不存在) CPU和内存控制器之间的64根导线,用于指定您要访问的内存地址。例如,假设我们有一个2位内存体系结构:发送00将选择地址0,01将选择地址1,10将选择地址2,而11将选择地址3。这2位给我们2 ^ 2个字节RAM(4个字节)。

如果您使用的是32位CPU,并且在CPU与内存控制器之间增加了32条连线,那么您就可以神奇地支持更多的内存,那么现在您将拥有一个可以运行32位的“ 64位CPU”代码或64位代码。这是什么意思,这是怎么发生的?好吧,让我们从这个答案的前半部分中取出2位CPU,并添加另一条线,将其变成3位CPU,将我们的RAM从4字节变为2 ^ 3或8字节。

现有的“ 2字节”代码将运行,并设置最后两根导线的值,如上述(00-11)所示。默认情况下,我们会将多余的连接设置为零,因此实际上在运行2字节代码时,当它选择00时,实际上选择的是000,而当它选择11时,实际上选择的是011。

现在,程序员希望编写“本机” 3字节代码,并编写其软件以利用额外的地址空间。她告诉CPU她知道自己在做什么,并且将手动控制新的多余电线。她的软件知道多余的连线,并正确发送000-111,从而可以完全访问此新CPU架构支持的内存范围。

但这不是必须的。实际上,事情通常不会这样发生。首次引入64位CPU(有很多)时,它们都采用了全新的体系结构/设计。他们不仅增加了32条线,然后说:“这是一个可以在32位或64位模式下使用的64位CPU,”但是他们说:“这是我们的新CPU,它只需要使用这种全新的机器语言进行编程,就可以采用这种全新的方式运行,可以解决比以往的x86 / i386 32位CPU优雅得多的各种问题,并且它是本机64位体系结构。 ”。

这就是英特尔Itanium的故事,由于它沉没的程度很大,现在被称为“ Itanic”。它本应在新的64位时代中预示着,这是值得一看的。可变长度指令,巨大的高速缓存,64位地址空间,大量寄存器,超级令人兴奋,超级酷炫,而且很难说服所有人重新编译或重写20年的旧代码。那是AMD和Intel真正竞争的时候,AMD曾提出过一个绝妙的主意:“让我们忘记所有这些'解决世界上所有问题'的业务,只需要在i386上增加32根线,并制造32位兼容的64位处理器即可。位CPU”和x86_64 CPU体系结构诞生了。

实际上,如果您查看主要操作系统(Linux,Windows,BSD等)的内核名称和源代码,就会发现它们对AMD64 CPU和AMD64体系结构的引用乱七八糟。AMD提出了一项制胜法宝,使所有人都可以切换到64位世界,同时保持与32位应用程序的兼容性,从而使32位OS可以在64位硬件甚至32位应用程序上运行。可以在64位硬件上的64位OS上运行。英特尔迟早采用其“英特尔EM64T”架构(与AMD64基本相同),紧随其后,而x86_64胜出,而Itanic以及MIPS64和ALPHA64等其他产品在台式机/服务器市场上再也没有出现。

tl; dr amd64 aka x86_64 CPU设计为与32位和64位内核和代码兼容,但是大多数64位CPU肯定不是以相同的方式向后兼容。一个32位CPU最多可以访问4GiB的内存,而一个64位CPU可以访问惊人的16个EiB(16×1024 ^ 6字节,是4GiB的40 亿倍的内存)。


1
您有一些事实错误:1)itanium没有引入可变长度指令(每个x86都有)。它增加了很长的字指令,能够同时在多个64位量上运行。2)x86_64不仅拍了更多地址线;它还增加了一堆额外的寄存器,并将所有寄存器(以及对其进行操作的ALU)从32位扩展到64位。将其与8086/8088进行比较,后者增加了4条地址线和段选择器寄存器,但将它们全部保留在16位,就像之前的8080。
psusi

-1

32位和64位OS都可以在64位处理器上运行,但是64位OS可以使用64位处理器的全部功能(更大的寄存器,更多的指令)-简而言之,它可以同时执行更多的工作。32位处理器仅支持32位Windows操作系统。


3
通常这是不正确的,尽管特别适用于x64。
ChrisInEdmonton,2009年

1
32位处理器将运行任何旨在在这种处理器体系结构上运行的操作系统。
Waxhead

32位x86操作系统显然不能在ARM64上运行,因此32 and 64 bit OS can run on a 64 bit processor通常是不正确的
phuclv 2015年

@Phúc可能有64位处理器,不支持其32位twin。但是,您在参数中使用了错误的逻辑。32位MicroSparc上的SunOS 4.4.1也不会在ARM32上运行。使用逻辑手段,通常不正确的做法是32位操作系统可以在32位处理器上运行。如果像我一样忽略常识,我可以说32位ARM OS在Intel i386 / x64上运行,因为Android开发人员在其Wintel计算机上运行Android ARM映像。当然,该操作系统适用于正确的处理器系列,并且当然,该操作系统在物理硬件上运行,而不是仿真(足够多的信息,请说出来)
Tino
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.