词条 | X86_64 |
释义 | x86-64引技术实际上是在x86平台上从32位到64位的一次扩充。而这一扩充包含的内容能够不仅仅体现在对物理内存的扩充上,在指令集、CPU寄存器结构、甚至是应用程序的虚拟内存上都得到了非常大的扩充。然而,值得注意的是,x86从32位到64位的变化,并没有象以前从16位到32位的变化那样,在系统软件层面带来了革命性的变化(例如页式地址管理、多任务的引入等等)。我们的操作系统仍然使用以前的各种机制来对硬件进行管理,只是在64位平台上,数据(如整型数)变得更宽了,逻辑地址、线性地址以及物理地址也都变得更宽了。 2. 系统结构的变化AMD64的出现,给全新的64位的x86带来了很多结构上的变化: 1)64位整型数 在x86-64中,所有通用寄存器(GPRs)都从32位扩充到了64位,名字也发生了变化。8个通用寄存器(eax, ebx, ecx, edx, ebp, esp, esi, edi)在新的结构中被命名为rax, rbx, rcx, rdx, rbp, rsp, rsi, rdi,它们都是64位的。所有算术逻辑操作、寄存器到内存的数据传输现在都能以64位的整形类型进行操作。堆栈的压栈和弹出操作都以8字节的单位进行,而且指针类型也拥有了64位。 2)新增寄存器 在新的架构中,另外新增了8个通用寄存器:64位的r8, r9, r10, r11, r12, r13, r14, r15。这样就有利与编译器将函数参数、返回值等放在这些新增的GPR里面进行传递,从而提高了程序的运行速度。同时,128位的MMX寄存器也从原来的8个增加到了16个。 3)增大的逻辑地址空间 目前在新的架构中,应用程序可以拥有的逻辑地址空间从4GB增加到了256TB(2^48),而且这一逻辑地址空间在未来可能增加到16EB(2^64)。 4)增大的物理地址空间 目前的x86-64架构,可以支持的物理内存扩展到了1TB(2^40),当然,在未来该数字可以扩展到4PB(2^52)。相比于经过PAE技术扩展的i386的64GB物理内存,新的架构带来了不小的飞跃。 5)无缝使用SSE指令 新的架构借鉴和吸收了Intel的SSE、SSE2的核心指令,并在2005年加入了SSE3。在这一新的架构下,可以不再需要x87浮点协处理器来完成浮点运算了。 6)NX位 跟PAE技术一样,新的x86-64架构也在页表项中增加了NX位,来帮助CPU判断该页包含的内容是否是可以执行的,从而避免借助“buffer overrun”导致的病毒攻击。 7)去除旧的机制 在新架构的“长模式(long mode)”下,很多在IA32中被提出,但确不经常被操作系统用到的一些机制不再被支持。这些机制包括段式地址变化机制(FS和GS仍然被保留),任务转移门(TSS)机制,以及虚拟86模式。当然,出于向下兼容的考虑,x86-64在“传统模式”(Legacy mode)下,仍然对这些机制进行了保留。 3. 虚拟地址虽然逻辑地址扩展到了64位,但是,现有的设计并没有完全用到这64位的空间(2^64=16EB),因为使用到如此大的空间,势必造成很大的系统开销。AMD64在设计的时候就决定在x86-64的第一阶段,只用这64位中的低48位来做页式地址转换,高16位(48-64位)将填充第47位相同的内容(这种方式类似于符号扩展)。如果逻辑地址不符合此规定,系统将产生异常。符合此规定的地址称为canonical form,地址的范围分为两段:0 到 00007FFF-FFFFFFFF,以及FFFF8 000-0000 0000到FFFFFFFF-FFFFFFFF,总共为256TB。这种虚拟地址的分层结构,也为操作系统的设计带来了一定便利:可以取地址的上半段保留做为操作系统的逻辑地址空间,而低地址部分做为装载应用程序的空间,而canonical form不允许的地址空间则做为操作系统的标志、以及特权级的标识等。当然,这样的设计在未来地址进一步扩展的时候将称为一个新的问题。 下图展示了今天的设计以及未来可能的扩展: 采用64位地址空间的x86-86被称为是运行在“长模式”(long mode)下,该模式可以看成是对PAE模式的一个扩充。长模式允许使用三个不同的物理页面大小:4KB、2MB和1GB。在使用64位中的48位用来存放地址时,与PAE模式下的三级页面映射机制不同的是,长模式下线性地址到物理地址的映射需要经过四级地址映射。在这四级地址映射机制中,原来PAE模式下仅拥有4个表项的页目录指针表被扩展到512个表项。同时,在最末一级加入一级新的页面映射结构,该结构被称为第四级页表(Page-Map Level 4 Table,PML4),它跟PAE模式下的页目录及页表(在长模式中,成为了页目录)一样,拥有512个表项。如果地址进一步扩充,如把64位寻址全部用上,该页表就能够扩充到33,554,432个表项,或者干脆再加一层地址映射(PML5),当然,按照目前只用了48位的情况下,用到512个表项的PML4就已经够用了。 可以想象,用到48位的x86-64虚拟地址的分配机制为: 0-11(12)位:页内偏移; 12-20(9)位:由PML4来映射; 21-29(9)位:高一级页目录来映射(如果PS=1,则该页表项指向一个2MB的页); 30-38(9)位:再高一级的页目录来映射(如果PS=2,则该页表项指向一个1GB的页); 39-47(9)位:页目录指针表来映射。 x86-64的长模式下,对16位以及32位代码进行了兼容,即使CPU上跑的是64位的操作系统,历史遗留的16位以及32位代码将都能够在该操作系统上运行。由于x86-64兼容IA32的指令,所以,这些代码在这种情况下运行,基本上没有性能损耗。 在传统模式(Legacy mode)下,x86-64的CPU的工作模式跟传统的IA32没有什么两样。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。