X86是什么?

x86-64引技术实际上是在x86平台上从32位到64位的一次扩充。而这一扩充包含的内容能够不仅仅体现在对物理内存的扩充上,在指令集、CPU寄存器结构、甚至是应用程序的虚拟内存上都得到了非常大的扩充。然而,值得注意的是,x86从32位到64位的变化,并没有象以前从16位到32位的变化那样,在系统软件层面带来了革命性的变化(例如页式地址管理、多任务的引入等等)。我们的操作系统仍然使用以前的各种机制来对硬件进行管理,只是在64位平台上,数据(如整型数)变得更宽了,线性地址以及物理地址也都变得更宽了。

虚拟地址

虽然逻辑地址扩展到了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没有什么两样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值