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