分类:
2010-03-13 22:17:40
尽管虚拟地址有64位的宽度,但目前的实现机制(以及任何已知处在计划阶段的芯片)并不允许整个16EB的虚拟地址空间都被使用。大多数的操作系统和应用程序在可见的未来都用不到如此巨大的地址空间(比如,Windows在AMD64上的实现仅应用了16TB,即44位的宽度),所以实现如此巨大的地址宽度只会增加系统的复杂度和地址转换的成本,带不来任何好处。AMD因此决定,在对这一架构的首次实现中,只有虚拟地址的最低48位才会在地址转换(页表查询)时被使用。但是,任何虚拟地址的48位至63位必须与47位一致(按照的方式),否则处理器将会报告一个异常。符合这一规则的地址被称作“传统格式”。传统格式将从0至00007FFF`FFFFFFFF,以及从 FFFF8000`00000000至FFFFFFFF`FFFFFFFF总计256TB的地址范围作为可以使用的虚拟地址空间。
这种“古怪”的规则为日后扩展到真正的64位寻址保留了一个重要的特性:很多的操作系统(包括但不限于Windows NT系列)将地址空间的高半部分(被称作内核空间)留给自己,将低半部分(用户空间)留给应用程序代码、用户态栈、堆和其他数据区。这种“传统地址”的设计保证了每一个符合AMD64的实现都拥有两个内存片段:低半段从00000000`00000000开始,随着更多的虚拟地址位变得可用而“向上生长”;高半部分被“悬挂”在地址空间的顶部而“向下生长”。同样,将未被使用的地址位内容固定下来防止被操作系统用作标志位、特权级标号等其他用途,是为了避免当架构扩展至52, 56, 60 和64位的时候出现问题。
业界称谓惯例:
由于AMD64和Intel64基本上一致,很多软硬件产品都使用一种不倾向任何一方的词汇来表明它们对两种架构的同时兼容。出于这个目的,AMD 对这种CPU架构的原始称呼——“x86-64”被不时地使用,还有变体“x86_64”。其他公司如和在营销资料中使用“x64”作为对 “x86-64”的缩写。
许多操作系统及产品,尤其那些是在Intel进入这块市场之前就引入“x86-64”支持的,使用“AMD64”或“amd64”同时指代 AMD64和Intel64。