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

学习目标

  • 了解ISA抽象的作用
  • 掌握ISA,并能举一反三学习其他体系结构
  • 了解流水线和实现方式

教材学习内容总结

4.1 Y86指令集体系结构

  • ISA(指令集体系结构)

  • 一个处理器支持的指令和指令的字节级编码

  • 有8个程序寄存器:%eax、%ecx、%edx、%ebx、%esi、%edi、%esp、%ebp

  • 处理器的每个程序寄存器存储一个字,寄存器%esp被入栈、出栈、调用和返回指令作为栈指针

  • 有3个一位的条件码:ZF、OF、SF

  • Y86指令集:

    movl指令分成了4个不同的指令:irmovl、rrmovl、mrmovl、rmmovl

    源和目的:源可以是立即数(i)、寄存器(r)、存储器(m)。目的可以是寄存器(r)、存储器(m)。

  • 四个整数操作指令,OPI: addl、subl、andl、xorl

    它们只对寄存器数据进行操作 这些指令会设置3个条件码:ZF、OF、SF

  • 7个跳转指令(jXX): jmp、jle、jl、je、jne、jge、jg

    根据分支指令的类型和条件码的设置来选择分支

  • 6个条件传送指令(cmovXX): cmovle、cmovl、cmove、cmovne、cmovge、cmovg

    这些指令的格式与rrmovl一样,但是只有当条件码满足所需要的约束时,才会更新目的寄存器的值

  • 指令编码

每条指令需要1-6个字节不等

每条指令的第一个字节表明指令的类型:

这个字节分为两个部分:高4位是代码部分、低四位是功能部分

  • Y86异常

    AOK:正常操作

    HLT:处理器执行halt指令

    ADR:遇到非法地址

    INS:遇到非法指令

  • Y86程序

这个程序中,以“.”开头的词是汇编器命令

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

  • HCL语言只表达硬件设计的控制部分,只有有限的操作集合。
  • 逻辑门:

AND:&&

OR:||

NOT:!

  • 多路复用器{MUX)

    多路复用器根据输入控制信号的值,从一组不同的数据信号中选出一个

    在这个简单的多路复用器中,两个数据信号是输入位a和b,控制信号是输入位s

    bool out=(s&&a)||(!s&&b)

  • 字级的组合电路和HCL整数表达式: 位级实现

    字级抽象

    bool Eq=(A==B)

  • HCL中,多路复用函数是用情况表达式来描述的,这个表达式包含一系列情况,每种情况i都有一个布尔表达式selecti和一个整数表达式expri,前者表明什么时候该选择这种情况,后者指明的是得到的值

  • 组合逻辑电路

    算数/逻辑单元(ALU)是一种很重要的组合电路

  • 集合关系

  • 存储器和时钟

    时钟寄存器(寄存器):存储单个位或字。时钟信号控制寄存器加载输入值。

    随机访问存储器(存储器):存储多个字,用地址来选择该读或该写哪个字。

    程序计数器(PC)

    条件代码(CC)

    程序状态(Stat)

4.3 Y86的顺序实现

  • SEQ硬件结构

    在SEQ中,所有硬件单元的处理都在一个时钟周期内完成。

    SEQ线路图的画图惯例:

    浅灰色方框表示硬件单元

    控制逻辑块是用灰色圆角矩形表示的

    线路的名字在白色椭圆中说明

    宽度为字长的数据连接用中等粗度的线表示

    宽度为字节或者更窄的数据连接用细线表示

    单个位的连接用虚线表示

  • SEQ的时序

    SEQ的实现包括组合逻辑和两种存储器设备: 时钟寄存器、程序计数器和条件码寄存器

    随机访问存储器 寄存器文件、指令存储器和数据存储器

    每个时钟周期,程序计数器都会装在新的指令地址;只有在执行整数运算指令时,才会装载条件码寄存器;只有在执行rmmovl、pushl或call指令时,才会写数据存储器;寄存器文件的两个写端口允许每个时钟周期更新两个程序寄存器。

    组织计算原则:处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。

    用时钟来控制状态元素的更新,值通过组合逻辑传播。

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

    管理复杂性是首要问题,尽量保持硬件设计的简单。

    不需要直接实现ISA。

  • 一开始就保证设计正确是非常重要的。

    创建一个流水线化的Y86处理器的好开端。但是,将流水线技术引入一个带反馈的系统,当相邻指令同存在相关时会导致出现问题。

    流水线控制逻辑必须处理以下4种控制情况,这些情况是其他机制(例如数据转发和分支预测)不能能处理的:

    处理ret:流水线必须暂停直到ret指令到达写回阶段。

  • 加载/使用冒险:流水线必须暂停一个周期。

    预测错误的分支:在分支逻辑发现不应该选择分支之前,分支目标处的几条指令已经进流水线了。必须从流水线中去掉这些指令。

  • 异常:当―条指令导致异常,我们想要禁止后面的指令更新程序员可见的状态,并睏异常指令到达写回阶段时,停止执行。

Y86模拟器的安装

  • 构建YIS环境

    解压命令:tar -xvf sim.tar

  • 图形界面需要安装Tcl/Tk

sudo apt-get install tcl8.5-dev tk8.5-dev tcl8.5 tk8.5

  • 进行文件的修改(打开文件目录下的makefile文件夹,用leafpad或者其他记事本进行修改)
GUIMODE=-DHAS_GUI       (去掉原有注释#)

TKLIBS=-L/usr/lib/ -ltk8.5 -ltcl8.5

TKINC=-I/usr/include/tcl8.5
  • make clean;make

  • 运行图形界面

  • 代码运行中遇到的问题
  • 问题: 无法进行install,显示进程被占用

  •  

    解决过程: 输入命令ps -aux 查看进程,用sudo kill PID强制结束进程,之后成功安装。

代码托管

代码上传截图:

码云链接

学习进度条

 代码行数(新增/积累)博客量(新增/积累学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 5/5 1/1 8/8
第二周 120/120 1/1 12/12
第三周 100/100 1/1 15/15
第四周 80/80 1/1 9/9
第五周 50/50 1/1 6/6
第六周 350/350 1/1 12/12
第七周 120/120 2/2 15/15

参考资料

《深入理解计算机系统V3》学习指导