• 2017-2018-1 20155333 《信息安全系统设计基础》第七周学习总结


    2017-2018-1 20155333 《信息安全系统设计基础》第七周学习总结

    教材学习内容总结

    • ISA
    • 一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构ISA。
    • 不同型号的处理器在ISA级别上都保持着兼容。因此,ISA在编译器编写者和处理器设计人员之间提供了一个概念抽象层,即ISA模型:CPU允许的指令集编码,且顺序地执行指令,也就是先取出一条指令,等到它执行完毕,再开始下一条。然而,现代处理器的实际工作方式可能跟ISA隐含的计算模型大相径庭。通过同时处理多条指令的不同部分,处理器可以获得较高的性能。但其必须对外表现出符合ISA模型的执行结果。
    • CPU硬件简介
      大多数现代电路设计都是用信号线上的高电压和低电压来表示不同的位值。
    • 要实现一个数字系统需要三个主要的组成部分:

    ①计算对位进行操作的函数的组合逻辑(ALU)

    ②存储位的存储器元素(寄存器)

    ③控制存储器元素更新的时钟信号

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

    将很多逻辑门组合成一个网,就能构建计算块,称为组合电路。(相当于一个表达式)

    算术/逻辑单元(ALU)是一种很重要的组合电路,这个电路有三个输入(两个数据输入及一个控制输入)。根据控制输入的设置,电路会对数据输入执行不同的算术或逻辑操作。

    • 存储器和时钟

    • 组合电路从本质上讲,不存储任何信息。它们只是简单地响应输入信号,产生等于输入的某个函数的输出。为了产生时序电路,也就是有状态并且在这个状态上进行计算的系统,我们必须引入按位存储信息的设备。

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

    • 大多数时候,寄存器都保持在稳定状态(用x表示),产生的输出等于它的当前状态。信号沿着寄存器前面的组合逻辑传播,这时,产生了一个新的寄存器输入(用y表示),但只要时钟是低电位的,寄存器的输出就仍然保持不变。当时钟变成高电位的时候,输入信号才加载到寄存器中,成为下一个状态y,直至下一个时钟的上升沿。

    • 寄存器是作为电路不同部分中的组合逻辑之间的屏障。每当每个时钟到达上升沿时,值才会从寄存器的输入传送到输出。

    • 寄存器文件(通用寄存器组成的逻辑块) 有两个读端口,还有一个写端口。电路可以读两个程序寄存器的值,同时更新第三个寄存器的状态。每个端口都有一个地址输入,表明选择哪个程序寄存器。
      虽然寄存器文件不是组合电路,因为它有内部存储。不过,从寄存器文件读数据就好像它是一个以地址为输入、数据为输出的一个组合逻辑块。

    • 指令编码

    • 指令集的一个重要性质就是字节编码必须有唯一的解释。任意一个字节序列要么是一个唯一的指令序列的编码,要么就不是一个合法的字节序列。因为每条指令的第一个字节有唯一的代码和功能组合,给定这个字节,我们就可以决定所有其他附加字节的长度和含义。

    • 每条指令需要1——6个字节不等,这取决于需要哪些字段。每条指令的第一个字节表明指令的类型:高4位是代码部分(例:6为整数类操作指令),低4位是功能部分(例:1为整数类中的减法指令) 61合起来即为sub指令。

    • 处理一条指令的序列:

    1. 取指(fetch):取指阶段从存储器读入指令,地址为程序计数器PC的值。从指令中抽取出指令指示符字节的两个四位部分,称为icode(指令代码)和ifun(指令功能)。
    2. 解码(decode):解码阶段从寄存器文件读入最多两个操作数,得到值valA or/and valB。
    3. 执行(execute):在执行阶段,算术/逻辑单元(ALU)要么执行指令指明的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针。
    4. 访存(memory):访存阶段可以将数据写入存储器,或者从存储器读出数据。读出的值为valM。
    5. 写回(write back):写回阶段最多可以写两个结果到寄存器文件。
    6. 更新PC(PC update,程序计数器):将PC设置成下一条指令的地址。
    • 基本知识:

    (1)处理器:执行一系列指令完成相应功能

    (2)指令体系结构:处理器支持的指令和指令的字节级编码

    (3)指令集在机器型号上有着一定要求(不同型号相互兼容)

    (4)通过处理多条指令的不同部分(流水线)提高性能

    • 定义Y86体系结构

    (1)过程:定义指令集(对操作及位长定义),寄存器标识符定义,编码(将每一条指令根据固定格式翻译成唯一的二进制编码,整数采用小端法编码,根据地址及指令长度更新指针)
    ,对细节把握

    (2)遇到异常时停止指令执行(完整设计中会调用异常处理程序)

    (3)逻辑门,存储器和时钟等基础知识,同时介绍HCL语言,清晰明确的显示出所有候选条件,类似C语言switch语句

    • 定义指令实现阶段(同体系结构课本)

    (1)取指,解码,执行,访存,写回,更新Pc
    (2)对指令跟踪执行,定义保存变量和模块值(valC),这样在介绍硬件结构时可通过相关标识进行表示
    4. 硬件结构

    • SEQ:完全顺序执行,使用较少的硬件资源,需要信号向后传递,导致处理太慢;
    • SEQ+:和SEQ相比在时钟周期开始时更新PC值,提前确定下条指令地址
    • PIPE-:在SEQ+各阶段间加入流水寄存器,对信号重新排列,通过暂停方式处理数据冒险
    • PIPE:在PIPE-基础上可以通过转发处理数据冒险,避免了停顿,提升吞吐量
    • 流水线

    (1)由时钟信号控制,使多条指令不同阶段可以同时执行,增加了延迟,提升吞吐量

    (2)问题:流水阶段长度不一,流水线深度过大插入寄存器影响性能

    (3)因为存在反馈的流水线(即一条指令可能需要多次执行某个操作,或使用某个数据,访问某个存储器或寄存器)导致流水线冒险(数据,控制)

    (4)数据冒险解决方案:暂停(系统判断是否会产生冒险,会则插入气泡,延迟下条指令执行),转发(使产生的结果理解送入需要的位置,避免暂停),加载使用(当存储器读发生较晚时需要暂停和转发机制同时使用)

    (5)异常处理

    (6)控制逻辑和机制

    • 处理return:暂停流水线直到ret指令到达写回阶段
    • 加载/使用冒险:在对存储器读和使用之间需要暂停一个周期
    • 预测错误分支:当预测失败时应该可以返回到之前状态,去掉错误指令
    • 异常:出现异常时,停止后序指令执行,并避免当前异常指令写回

    (7)性能分析

    CPI=1+处罚项(预测错误+返回+暂停)

    目标:使CPI=1;一个周期执行一条指令

    1. 对流水线的理解:

    (1)流水线主要讲解流水线的概念,分类,根据是否存在反馈回路分为线性非线性流水线,对非线性流水线的调度,本质就是想办法使流水线执行起来不冲突,在教材上通过预约表冲突向量的方式并考虑到吞吐量计算出最佳调度方案;

    (2)指令执行使用流水线技术,就是在整体上在固定的时间有效完成更多的事情。

    教材学习中的问题和解决过程

    • 问题1:
    • 问题1解决方案:
    • 问题2:
    • 问题2解决方案:
    • ...

    代码调试中的问题和解决过程

    • 问题1:XXXXXX
    • 问题1解决方案:XXXXXX
    • 问题2:XXXXXX
    • 问题2解决方案:XXXXXX
    • ...

    代码托管

    上周考试错题总结

    • 错题1及原因,理解情况
    • 错题2及原因,理解情况
    • ...

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 代码中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 其他

    本周结对学习情况

    - [2015532](http://www.cnblogs.com/zjy1997/)
    - 结对照片
    - 结对学习内容
        - 教材第四章
        - XXXX
        - ...
    

    其他(感悟、思考等,可选)

    xxx
    xxx

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 10/10 1/1 10/10
    第二周 80/90 1/2 15/25
    第三周 100/190 1/3 15/40
    第四周 150/340 1/4 18/58
    第五周 2/6 20/78
    第六周 2/8 20/98
    第七周 2124/ 2/10 20/118

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:30小时

    • 实际学习时间:20小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    Scala_模式匹配
    Scala_特质
    Scala_继承
    Scala_对象
    Scala_类
    Scala_关键字
    Scala_数据结构
    Scala_方法、函数、柯里化
    Scala_控制结构
    Scala_基本语法
  • 原文地址:https://www.cnblogs.com/rh123456/p/7788004.html
Copyright © 2020-2023  润新知