x86/x64:一场被“民科”误读的架构史
x86/x64:一场被“民科”误读的架构史
开篇之前,我必须先吐槽几句。每次看到网上那些把x86简单粗暴地等同于32位,把x64等同于64位的“科普”文章,我就感到一阵阵的眩晕。这简直是对计算机体系结构发展史的侮辱!难道这些作者就没想过,为什么会有x86-64这种命名?难道他们觉得AMD的工程师都是吃干饭的,随便起了个名字?要知道,架构的演进从来不是一蹴而就的,更不是简单的数字游戏。
追溯历史本源
要理解x86/x64,就必须从它的根源说起。上世纪70年代末,Intel 推出了8086处理器,这标志着x86架构的开端。随后,80286、80386相继问世,其中80386是一个重要的里程碑,它引入了32位架构,也就是我们常说的IA-32(Intel Architecture, 32-bit)。
“x86”这个名字的由来也颇有趣味。最初,它只是指Intel 8086及其后续的8088、80186、80286等一系列处理器。由于这些处理器的型号都以“86”结尾,因此就被统称为“x86”架构。后来,随着32位80386的普及,“x86”逐渐成为了32位Intel架构的代名词。需要注意的是,早期的x86指令集属于CISC(复杂指令集计算机),与后来的RISC(精简指令集计算机)架构有着显著的区别。CISC指令集指令复杂,寻址方式多样,但执行效率相对较低。关于CISC和RISC的对比,我们这里就点到为止,不再深入展开,否则又要跑题了。
AMD64的逆袭
时间来到21世纪初,当Intel还在纠结于Itanium架构(一种完全不同的64位架构,与x86不兼容)时,AMD 却另辟蹊径,推出了x86-64架构,也就是AMD64。这步棋可谓是险中求胜,直接奠定了AMD在64位计算领域的地位。AMD64架构在原有的x86指令集基础上进行了扩展,使其能够支持64位运算和更大的寻址空间。更重要的是,AMD64架构保持了与32位x86指令集的向后兼容性,这意味着现有的32位x86应用程序无需修改即可在64位系统上运行。这种兼容性是AMD64能够迅速获得市场认可的关键因素之一。
AMD在命名策略上也颇具匠心。他们没有采用类似于“x86-64”这样略显笨拙的名字,而是直接使用了“AMD64”,既简洁明了,又突出了AMD在这一架构上的创新。最终,“x64”这个名字也被广泛接受,成为了64位x86架构的通用代名词。
Intel的追赶与EM64T
面对AMD在64位市场的领先地位,Intel终于坐不住了。他们放弃了对Itanium架构的执着,转而采用了与AMD64架构兼容的设计,并将其实现命名为EM64T(Extended Memory 64 Technology),后来又更名为Intel 64。虽然Intel最终采用了与AMD相同的底层架构,但在指令集实现和微架构设计上仍然存在一些差异。这些差异主要体现在一些特定的指令优化和硬件特性上,对于普通用户来说,感知并不明显。
技术辨析
现在,让我们来深入讨论一下32位和64位架构的本质区别。最直观的区别在于寻址能力。32位架构的寻址空间为2的32次方,也就是4GB。这意味着32位系统最多只能使用4GB的内存。当然,也有一些技术,例如PAE(Physical Address Extension,物理地址扩展),可以突破4GB的限制,但这种方式存在诸多局限性,例如每个进程仍然只能访问4GB的内存空间。而64位架构的寻址空间则达到了2的64次方,理论上可以支持高达16EB(Exabyte)的内存。当然,实际的内存支持能力还受到主板、操作系统等因素的限制,但远大于32位系统。
除了寻址能力,32位和64位架构在寄存器大小、数据处理能力等方面也存在差异。64位架构拥有更大的通用寄存器,可以一次性处理更大的数据,从而提高数据处理效率。此外,64位架构还引入了一些新的指令集,例如SSE2(Streaming SIMD Extensions 2)等,可以进一步提升性能。
指令集与兼容性
x86和x64指令集的兼容性是一个复杂的问题。由于x64架构在设计时就考虑到了向后兼容性,因此64位系统可以运行32位应用程序。这是通过一种名为WOW64(Windows 32-bit on Windows 64-bit)的技术来实现的。WOW64充当了一个翻译层,将32位应用程序的指令翻译成64位系统可以理解的指令。反之,32位系统则无法直接运行64位应用程序,因为它们无法识别64位指令。
总结与升华
说了这么多,相信大家对x86/x64架构的理解应该更加深入了。x86并非总是指32位,x64也并非仅仅是64位的代名词。它们代表着一个复杂的历史演进过程,一部充满技术创新与市场竞争的历史。理解x86/x64架构的关键在于理解其历史、技术特点以及指令集的演变。我希望读者不要满足于简单的“结论”,而应该深入学习计算机体系结构的基础知识,避免人云亦云。要知道,真正的知识不是背诵几个概念,而是能够独立思考、解决问题的能力。否则,永远只能在“民科”的泥潭里打转。
现在的计算机教育啊,真是让人恨铁不成钢!