• CSAPP(3):处理器如何执行指令


    前一章叙述了c语言如何转化为汇编程序,如何使用汇编程序。但是,汇编程序具体是如何执行的呢?例如(add %eax %edx)这条指令,我们知道它的功能,处理器是何如执行指令来获得想要的结果?——这是本章的主题。

    (一)Y86指令集体系结构

    为了简化问题,我们不使用Intel和ATT的指令集体系结构,抽象简化一个Y86。Y86的定义了各种状态元素、指令集及其编码、编程规范、异常事件处理。

    1

    2

    3

    (二)存储器和时钟

    存储设备都是由同一个时钟控制的。时钟是一个周期性的信号,决定什么时候把新值加载到设备中。

    存储设备分两种:

    1)时钟寄存器(硬件寄存器),存储单个位或字,时钟信号控制寄存器加载输入值;

    2)随机访问存储器(存储器)存储多个字,用地址来选择该读写哪个字,包括:处理器的虚拟存储系统、程序寄存器等。

    (硬件和机器级编程,“寄存器”这一概念是有细微差距的。硬件中,寄存器是直接连接到电路中的;而机器级编程中,寄存器是寄存器文件中可寻址的字,地址为寄存器ID。为避免歧义,两类寄存器分别称为:硬件寄存器和程序寄存器。)

    4

    (图为时钟寄存器工作方式,Y86中用时钟寄存器保存程序计数器(PC)、条件代码(CC)和程序状态(Stat))

    (三)指令执行6大阶段

    5

    下面是Y86各个指令对应于6各阶段的分解,可以对照上面的说明仔细对照

    6

    (四)SEQ处理器

    我们直接实现上述的6大阶段对应的硬件结构,称为SEQ处理器

    7

    上面展示了每条指令所对应的分阶段执行情况,现在我们把这些指令汇总,给出每个阶段的指令情况:

    9

    10

    (相应的need_regids, need_valC;  srcB, dstM; aluB; mem_data, mem_write指令情况见课本)

    (五)流水线

    SEQ实现的问题是:一个时钟周期内,必须完成6大阶段。故而时钟周期必须非常慢。所以我们使用流水线模型。

    流水线的两个重要概念:

    throughput(吞吐量):单位时间内服务的顾客总数;

    延迟(latency):服务一个用户所需要的时间。

    流水线模型需要在各个阶段之间都放上流水线寄存器

    下面是流水线的图例说明:

    8

    可以看到流水线的巨大优点,然而流水线就没有一点问题吗?

    1. 将系统计算划分为一组具有相同延迟的阶段是很严峻的挑战;

    2. 流水线过深的话,收益反而下降。(现在处理器采用很深的(15+阶段)流水线,Y86采用5阶段流水线)

    3. 带反馈的流水线。1)data dependency(数据相关):相邻指令之间可能是相关的。流水线模式下,可能下一条指令需要的数据,上一条指令还没产生。2)control dependency(控制相关):下一条指令是否执行依赖的条件,上一条指令还没有计算出来。

    当我们实现流水线结构时,我们要解决第三个问题。

    (六)Y86的流水线实现——PIPE-

    首先对于SEQ,我们将PC的计算挪到取指阶段(在时钟开始是计算,而不是结束时计算),然后再在各个阶段之间加上流水线寄存器:

    11

    在PIPE-结构的基础上,根据我们之前的学习,只要再解决几个大问题即可:

    1.如何解决数据相关?

    2.如何解决控制相关?重点是ret指令和条件跳转指令

    3.如何处理异常指令?

    解决数据相关

    需要仔细的体会这一过程,尤其是时钟控制下,状态更新如何进行。

    12

    13

    解决控制相关

    这一问题分解来看,需要分三个部分:1.如何预测下一个PC值?2.如何处理ret指令?3.如何处理预测错误分支?

    14

    15

    16

    处理异常指令

    17

    对于控制相关问题,还需要多做一些说明,如何多个控制问题组合在了一起,我们应该如何处理?这一问题留到最后作为补充、

    (七)PIPE处理器实现

    根据上面的讨论,我们只要在PIPE-中加入上述问题的解决方案之后,就得到了我们想要的PIPE处理器。

    1.实现转发。只需要添加几个电路即可实现。

    18

    具体的PIPE的HCL描述,见课本。

    2.实现暂停和取消指令

    19

    在此新型流水线寄存器的基础上,很容易实现暂停某指令或者取消某指令,由此,我们就可以实现之前问题的解决方案。

    (八)控制相关情况的组合

    20

  • 相关阅读:
    关于冥想
    Read Later
    你追求的跟我相反
    UML for Java Programmers之dx实战
    20140525
    面试基础-语言基础篇
    面试基础-linux操作系统篇
    面试基础-数据库篇
    面试基础-计算机网络篇
    Eclipse同时编译多个cpp文件
  • 原文地址:https://www.cnblogs.com/wangyanphp/p/6131240.html
Copyright © 2020-2023  润新知