|
|
AMD64
结构和软件接口
Rich Brunner著
杨全胜翻译
一、X86-64指令集结构
1.x86-64结构
- AMD 使用x86结构并扩展到64位来获得x86-64结构
- 处理器使用32位x86传统模式来执行现在的32位操作系统和应用程序。
- 处理器在“长模式”方式下运行64位操作系统并能同时运行32位和64位应用程序。
- 只有在64位模式下才能处理64位地址空间和64位寄存器
- 简单和具有兼容性的扩展使得处理器能全速高性能地运行x86和x86-64程序
- 所有用户可以获得32位性能和32位兼容性。
- 在需要的时候,用户可以放弃32位兼容性而转移到64位地址和数据类型。
2.x86程序员模式
3.64位模式操作
- 新指令只有两个
- MOVSXD 将双字的符号位扩展到四字
- SWAPGS 内核模式下的指令,用于减少中断处理的开销
- 新的覆盖(override)允许命名16GP和16
SSE寄存器
- 不管指令使用多少寄存器,每个指令只需要一个覆盖字节来标明扩展寄存器
- 堆栈调整到64位
- 该结构支持64位虚拟地址空间和52位物理地址空间
- 具体实现时略少些
- 内存页面机制扩展以提供64位寻址
- 4级页
- 页表条目就是X86的PAE模式条目的简单扩展
- 中断和例外建立64位状态
- SMI(系统管理中断)受影响于32位模式
- 废弃了一些冗余指令编码
- 64位模式不使用分段模式——平板寻址
4. “长模式(Long Mode)”概览
- 长模式由两个子模式组成
- 64位模式
- 兼容模式
- 长模式由一个全局控制位(LME)来使能
-
当LME=0,
CPU是一个标准的32位处理器
5. 64位模式
- 缺省的数据大小为32位
- 64位使用新的REX前缀
- 16位采用传统的操作尺寸前缀(66h)
- 缺省的地址大小是64位
- 指针是64位的
前缀类型 |
没有 |
REX |
66h |
操作尺寸 |
32 |
64 |
16 |
6. 兼容模式
- 该模式能使现有的应用程序无需修改就能在长模式下运行
- 选择代码段(CS.L=0)
- 使用远转换(Far Transfer)优于全模式开关,比模式开关快
- 无需修改的应用级代码运行
- 传统分段
- 传统的地址和数据尺寸缺省值
- 系统方面使用64位模式语义
- 中断和例外使用长模式句柄
- 页面机制使用长模式语义
7. REX前缀字节
- 添加寄存器编码而无需改变原来的指令模式
- 可选的REX前缀指明64位操作尺寸
- 添加了3个寄存器编码位
- REX实际上是16位前缀家族的
- 在64位模式中平均指令长度是0.4字节
8. 段和分段方式
- 64位模式提供平板、非分段的虚拟地址空间
- 传统的16位模式下的分段框架在64位模式下不能使用
- 长模式下代码段依然存在
-需要指明缺省模式(16,32和64位)个执行特权级
- 也意味着已经有的执行特权级和检查机制被保留下来
- 通过普通的远转换指令,开在64位模式和兼容模式之间切换
- CALLF、RETF、JMPF、IRETF、INT
9. X86-64 64位虚拟寻址
10. 结构反馈
- 指令集不影响性能
- RISC 避免了RISC-CISC之争
-对于ISA,兼容性是最主要的操作机构。由于x86是将其作为基本功能安装的,所以ISA功能是必须的一个选择。
- X86的代码密集性是很突出的
- 下面信息是关于x86以及来自于SpecINT2000编译系统
- 代码长度大约增加5%,主要原因是由于使用64位代码文字
- 指令数大约减少15%
+ 附加的寄存器确实得到好处
+ 很多spill/fill存储器被消除
+ Call-Exit序列得到大幅改善
- 降低了指令数提高了IPC,意味着性能得到实质性的提高
- “Hammer”IPC提高大约5%
- x86-64指令数下降大约15%
- 网络大约改善20%
- 你的代码使用数将根据你的应用变化
- IA-64反馈严格的和下列情况相反:指令数增加和IPC下降
二、操作系统模式
1. 64位考虑
- Hammer
BIOS 标准的x86的32位代码
- 在操作系统加载和启动控制的时候转换到64位操作
- 没有附加的固件需求
- 32位应用
- 处理器核心提供完全的x86兼容性(全速的,但不支持V86模式)
- 操作系统在核心调用的边界上提供一个转换层
- 64位应用程序需要64位操作系统
- 所有情况的都是新的,目前的操作系统不具备64位功能
- 设备驱动程序
- 64位操作系统需要64位设备驱动程序
- 分布包括很多设备驱动
- 固件回调不在被支持
- 新的64位工具
- 仿真、模拟
- 编译器、连接器、库
- 调试器和性能分析器
2. 64位计算策略
- 传统模式
- Hammer处理器设计成能够以脉冲前沿(leading-edge)执行方式运行任何32位操作系统
- 在驱动程序、OS和BIOS多个层面上完全兼容先前的x86系列
- 兼容模式
- 在64位操作系统控制下,现有的32位应用程序可以以脉冲前沿方式执行
- 应用程序无需重编译,也没有模拟层
- 64位模式
- 要求应用程序能够在写和端口操作中充分发挥x86-64的64位能力
- 在许可和用户要求的情况下做移植
- 也许只有1%的应用程序需要这种模式
3. 64位操作系统和应用程序交互
4.兼容转换层
- 整合一个库到操作系统中
- 对终端用户透明
- 64位操作系统建立了一个驻留的32位处理核心来处理32位应用程序
- 32位应用程序被动态连接到转换层
- 转换层实现所有的32位核心调用
- 必要的时候解释参数
- 调用64位核心
- 必要的时候转换结果
- 在Windows和Linux上都有很好的实现
|
|
|
|
CopyRight © 2003
|
|