CSAPP 处理器体系结构

《深入理解计算机系统》第4章笔记

一个处理器支持的指令和指令字节编码称为它的ISA(Instruction-set Architecture)。这一章主要讲以Y86指令集体系结构为例讲了处理器中指令的执行流程以及流水的原理和实现。

Y86指令集体系结构

Y86 程序中的每条指令都会读取或修改处理器状态的某些部分,这称为程序员(用汇编代码写程序的人或机器级代码的编译器)可见状态:

enter description here

Y86指令集

enter description here

指令编码:每条指令的第一个字节表示指令的类型,这个字节分为两个部分,每个部分四位:高四位是代码(code)部分,低四位是功能(function)部分。

enter description here

CISC vs RISC

enter description here

逻辑设计和硬件控制语言HCL

硬件设计中,电子电路是用来计算位的函数(function on bits),以及在各种存储器元素中存储位。实现一个数字系统主要有三个部分:计算位的函数的组合逻辑、存储位的存储元素,以及控制存储元素更新的时钟信号。

逻辑门

逻辑门是数字电路的基本计算元素。它们产生的输出,等于它们输入位值的某个布尔函数

组合电路和HCL布尔表达式

很多的逻辑门组合成一个网,就能构建计算块(computational block),称为组合电路(combinational circuits)。构建这些网有两条限制:

  • 两个或多个逻辑门的输出不能连接在一起。否则它们可能会使线上的信号矛盾,可能会导致一个不合法的电压或电路故障
  • 这个网必须是无环的。也就是在网中不能有路径经过一系列的门而形成一个回路,这样的回路会导致该网络计算的函数有歧义。

字级的组合电路和HCL整数表达式

字级的组合电路: 对数据字(data word)进行操作的电路,在HCL中,将所有的字级的信号都声明为int,而不指定字的大小

集合关系(set membership)

实现将一个信号和众多可能的信号做比较,判断正在处理的某些指令是否属于一类指令代码

存储器和时钟控制

为了产生时序电路,必须引入按位存储信息的设备,考虑两种:

  • 时钟寄存器存储单个位或字
  • 随机访问存储器存储多个字

Y86的顺序(sequential)实现

将处理组织成阶段

处理一条指令包含很多操作,我们把其组织成某些特殊的阶段序列,使得即使指令的动作差异很大,但是所有的指令都遵守统一的序列:

  • 取指(fetch),取指阶段,从存储器中读入指令,地址为程序计数器(PC)的值
  • 解码(decode),解码阶段从寄存器中读入最多两个操作数,得到其值
  • 执行(execute),算术逻辑单元(ALU)要么执行指令指明的操作,计算存储器引用的有效地址,要么增加或者减少栈指针。
  • 访存(memory),可以将数据写入存储器,或者从存储器中读入数据
  • 写回(write back),最多可以写两个结果到寄存器文件
  • 更新PC(update PC),将PC设置为下一条PC的地址

SEQ的硬件结构、时序、阶段实现 因为比较复杂,可以参考书上的内容

流水线的通用原理

流水线化的系统有一些通用的属性和原理,在流水线系统中,待执行的任务被划分成若干个相互独立的阶段。

计算流水线

由一些执行计算的逻辑以及保存计算结果的寄存器组成。时钟信号控制在每个特定的时间间隔加载寄存器。

enter description here

流水线操作的详细说明

三段流水线的时序

enter description here

流水线操作的一个时钟周期

enter description here

流水线的局限性

  • 不一致的划分
  • 流水线过深,收益反而下降(由寄存器延迟造成的)

带反馈的流水线系统

可能产生的相关:数据相关(data dependency)、顺序相关(sequential dependency)、控制相关(control dependency)

Y86的流水线实现

插入流水线寄存器

在SEQ+的各个阶段之间插入流水线寄存器,并对信号重新做排列

对信号做重新排列和标号

在流水线化的设计中,对应正在进过系统的各个指令,对指令中处理的值进行重新排列和标号

预测下一个PC

流水先冒险(hazard)

数据相关和控制相关导致的流水线产生的计算错误,成为冒险(hazard)。同样,冒险也分为数据冒险和控制冒险两大部分。

用暂停(stalling)来避免数据冒险

暂停时,处理器会停止流水线中一条或多条指令,知道冒险不再满足

用转发(forwarding)来避免数据冒险

小结

指令集体系结构(ISA)在处理器行为(就指令集合以及其编码而言)和如何实现处理器之间提供了一层抽象。

流水线化通过让不同的阶段并行操作,改进系统的吞吐量性能。

处理器设计的几个重要经验:

  • 管理复杂性是首要问题
  • 我们不需要直接实现ISA
  • 硬件设计人员必须谨慎小心,一旦芯片被制造出来,就几乎不可能改正任何错误了。