1.指令集体系
- 内存:概念上来说是一个很大的字节数组,保存程序和数据
- 虚拟内存:引用内存位置,硬件和操作系统软件联合将虚拟地址翻译成实际或物理地址
- 程序码:指示程序执行的总体状态
- 指令集:每一个不同类型的指令都有着不一样的起始字节,根据类型的不同编码的长度和格式也不一样,表达不同的含义,每个字节编码必须有唯一的解释
2.指令顺序实现
指令实现阶段:取值、译码、执行、访存、写回、更新
- 取值:从内容中读取指令字节,地址为程序计数器的值
- 译码:从寄存器文件中读入最多两个操作数
- 执行:算术/逻辑达摩院执行指令操作,计算内容引用有效地址;增加或减少栈指针
检验条件码和传送条件,条件成立则更新目标寄存器,决定分支
- 访存:数据写入内存,内存读出数据
- 写回:最多将两个结果写回到寄存器文件
- 更新:将PC设置为下一条指令地址
3.流水线原理
单独的处理每一个指令周期效率很低,所以需要以流水线的方式来进行设计。流水线的每一部分可以处理一个阶段的操作,这样可以同时运行多条指令。
作用
会导致延迟加大,但吞吐量大大提升
局限性
- 各单元阶段划分不一致
- 流水线阶段划分过多降低性能
分支预测
利用分支预测提前预测选择分支,加速运行
流水线冒险
相邻指令之间存在相关时会出现问题,分为数据冒险与控制冒险
- 数据冒险: 下一条指令会用到这一条指令计算结果
- 用暂停避免数据冒险:直到指令计算结果写回再进行下一条指令
- 用转发避免数据冒险:把指令结果直接从一个流水线阶段传到较早阶段
- 加载/使用数据冒险:暂停+转发
- 控制冒险: 一条指令需确定下一条指令位置
- 取消预测错误指令