我们知道,处理器是计算机系统的核心,处理器包含一套寄存器、一套指令集、一套内存访问的寻址方式,还包括不同的工作模式,不同的工作模式决定了指令是如何被解释和执行的。所有这一切,就是处理器的架构。不同的处理器,或者来自不同厂商的处理器可能具有不同的架构,英特尔处理器架构简称IA——Intel Architecture。
在处理器内部,寄存器和算术逻辑部件的数据宽度决定了处理器的字长,也就是所谓的16位处理器、32位处理器和64位处理器。32位处理器拥有32位的寄存器和算术逻辑部件。从1985年的INTEL 80386开始,32位的计算机的历史已经有几十年。这期间诞生了很多不同型号的处理器,但都是32位处理器。这些处理器的性能和功能不断增强,但维持和延续了相同的基本架构,并与前面的处理器保持兼容。历史上,这些32位的处理器架构简称IA-32。
IA-32架构的处理器拥有32根数据线、至少32根地址线,支持4GB或者超过4GB的物理内存,支持分段内存模型和平坦内存模型,支持分页内存管理,并提供了虚拟内存管理的手段;在操作模式上,支持系统管理模式、实模式、保护模式和虚拟8086模式。
就处理器的硬件结构和功能而言,IA-32架构的处理器提供了分段、分页和虚拟内存管理、内存访问保护、浮点处理、多媒体处理、硬件任务切换、中断和异常的处理、高速缓存控制、电源和温度管理、处理器性能监视和控制、程序调试支持、高级可编程中断控制器、多处理器和多线程支持、虚拟机扩展及复杂的指令集和寻址方式。
你可能会问,这些功能在64位处理器上还有吗?还支持吗?答案是肯定的,甚至还有所增强。但是,我们的任务和目标是掌握处理器内部最基础最核心的部分,而且要对日后用高级语言进行程序开发有帮助。因此,在本书中,我们依然是有选择性地介绍其中一部分内容,比如IA-32e模式的64位子模式、4级和5级分页、多处理器管理和初始化、多处理器多任务和任务切换、多处理器多线程和线程切换、高速缓存,以及与多线程有关的原子操作、锁、线程同步等。这些内容很重要,在用高级语言,写并行程序的时候,这些底层的知识通常是需要了解的。
IA-32架构已经有很长的历史了,随着技术的进步,处理器的寄存器需要加宽,以提高运算速度和运算效率,同时也能为访问更大的内存提供支持。另外,从软件开发的角度来看,由于提供了分页功能,传统的分段模型和内存访问机制需要裁剪和简化,以减轻系统软件和应用软件开发的负担。因此,64位处理器应运而生。
从INTEL 8086开始的x86处理器是向下兼容的,即使处理器升级换代,也能执行以前的程序和软件,也就是保持兼容。这一点非常重要,当初购买软件是花了钱的,如果因为换了新的处理器就不能再用这些老的软件,谁也不会乐意。
在IA-32的时代,随着x86处理器的更新换代,兼容的负担越来越重,使得处理器内部的结构越来越复杂,但这是无法摆脱的,因为你不能抛弃老的用户和老的程序,用时髦的话说,你要维护好现有的软件生态,不然就会被市场抛弃。
但是IA-32时代的兼容负担实在是太重了,INTEL公司决定扔掉这个包袱,开辟新天地。他们决定推出一个全新的64位INTEL架构IA-64,又称INTEL安腾架构(Intel Itanium)。如图2-1所示,IA-64是全新的架构,和IA-32不兼容,所以,传统的32位程序无法在这个新架构的处理器上运行。
图2-1 INTEL处理器架构的变迁
第一款IA-64架构的处理器推出之后,市场反应惨淡。原因很简单,我们前面说过,当初购买软件是花了钱的,而且现在还需要继续使用。如果因为换了新的处理器就不能再用这些老的软件,那还得花钱再买新软件,谁也不会乐意。
与此同时,INTEL公司的老对手AMD公司则反其道而行之,开发了与IA-32架构兼容的64位处理器。一开始,它们称之为x86-64,这个名字意味它是x86系列产品的64位扩展,后来又改为AMD 64。因为兼容以前的32位处理器架构IA-32,老软件可以正常运行,所以推出之后大受欢迎。
这边厢,INTEL公司一看势头不对,只好也跟着开发了与IA-32架构兼容的64位处理器,并称之为IA-32的扩展,即IA-32e。e是Extension,扩展的意思。几个星期之后,他们又称之为EM64T。
这是几十年来,INTEL公司第一次在与AMD公司的竞争中成了跟跑者,而不是领跑者。EM64T并不是一个理想的名称,所以后来INTEL公司又将其正式命名为INTEL 64。至于IA-32e,在后面我们将看到,它变成了一种处理器工作模式的名称。
不管是AMD公司的AMD 64架构,还是INTEL公司的INTEL 64架构,两者在绝大多数方面是一致的,兼容的,因此,业界习惯于使用一个中立的名字:x64。这个称呼涵盖了两个方面的内容,一是指x86系列;二是指64位。即,64位的x86处理器架构。
了解了这段历史,当你看到x86-64、AMD 64、EM64T、INTEL 64或者x64的时候,应当意识到它们其实是一回事,都是指64位的x86处理器架构。
对于AMD公司来说,目前正式使用的名称是AMD 64架构,对于INTEL公司来说,目前正式使用的名称是INTEL 64架构。对于本书来说,我们也使用x64架构这个称呼以保持中立,这一点需要注意。