20145337 《信息安全系统设计基础》第6周学习总结
教材学习内容总结
- 处理器支持的指令和指令的字节集编码称为它的指令集体系结构ISA
- Y86包括定义各种状态元素、指令集和他们的编码、一组程序规范和异常事件处理
- Y86程序用虚拟地址引用存储器位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址。
- 虚拟存储器提供给Y86程序一个单一的字节数组映像
halt
命令停止命令的执行,对Y86来说,执行halt指令会导致处理器停止,并将状态码设置为HLT- 当需要指明不应访问任何寄存器时,就用ID值0xF表示
- Y86的每条指令的第一个字节有唯一的代码和功能组合,字节编码有唯一的解释,保证处理器可以无二义地执行目标代码程序
- IA32与Y86的不同
- Y86中寄存器字段位置固定,IA32中寄存器字段位置不同
- Y86对寄存器采用4位编码,IA32采用3位
- Y86对常数数值编码成4个字节,IA32将常数值编码成1、2、4个字节
- Y86遇到HLT、ADR、INS等异常时,处理器会调用一个异常处理程序。
- 当执行pushl%esp指令时,处理器行为不确定。约定:1.压入%esp的原始值。2.压入减去4的%esp的值
逻辑设计和硬件控制语言HDL
- 硬件设计,采用电子电路来计算对位进行运算的函数,和存储器元素中的存储位。
- 实现一个数字系统的三个组成部分:计算对位进行操作的函数的组合逻辑、存储位的存储器元素、控制存储器元素更新的时钟信号
- 逻辑门对单个的位进行操作,而不是整个字
- 构建组合电路的限制:1.两个或多个逻辑门的输出不能连接在一起。否则他们可能会使线上的信号矛盾,导致不合法的电压或电路故障。2.在网中不能有路径经过一系列的门而形成一个回路
- 存储设备都是由同一个时钟控制,时钟是一个周期性信号,决定什么时候要把新值加载到设备中,两类存储器设备:时钟寄存器、随机访问存储器
- Y86处理器会用时钟寄存器保存程序计数器,条件代码和程序状态
- 寄存器文件写入字是由时钟信号控制的,控制方式类似于将值加载到时钟寄存器
- 我们的处理器还包括另外一个只读存储器,用来读指令。实际系统中,两个存储器被合并为一个双端口的存储器:一个用来读指令,一个用来读写数据
Y86的顺序实现
- 取指
- 译码
- 执行
- 访存
- 写回
- 更新PC
SEQ硬件结构###
- 在SEQ中,所有硬件单元的处理都在一个时钟周期内完成。
- SEQ线路图的画图惯例:
- 浅灰色方框表示硬件单元
- 控制逻辑块是用灰色圆角矩形表示的
- 线路的名字在白色椭圆中说明
- 宽度为字长的数据连接用中等粗度的线表示
- 宽度为字节或者更窄的数据连接用细线表示
- 单个位的连接用虚线表示
SEQ的时序
- SEQ的实现包括组合逻辑和两种存储器设备:
时钟寄存器 程序计数器和条件码寄存器
随机访问存储器 寄存器文件、指令存储器和数据存储器 - 每个时钟周期,程序计数器都会装在新的指令地址;只有在执行整数运算指令时,才会装载条件码寄存器;只有在执行rmmovl、pushl或call指令时,才会写数据存储器;寄存器文件的两个写端口允许每个时钟周期更新两个程序寄存器。
- 组织计算原则:处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。
- 用时钟来控制状态元素的更新,值通过组合逻辑传播。
SEQ阶段的实现
- 取指阶段:
- 以PC为第一个字节的地址,一次读6个字节。
- icode:控制逻辑块计算指令
- ifun:功能码
- 三个一位的信号(根据icode值计算):instr_valid:发现不合法的指令;need_regids:包含寄存器指示符字节吗;need_valC:包括常数字吗
- 后五个字节是寄存器指示符字节和常数字的组合编码。
- 译码和写回阶段:
- 都需要访问寄存器文件,根据四个端口的情况,判断应该读哪个寄存器产生信号valA、valB。
- 寄存器文件,支持同时进行两个读和两个写,每个端口有一个地址连接(寄存器ID)和一个数据连接(32根线路),既可以作为寄存器文件的输出字,又可以作为他的输入字。
- 执行阶段:
- 包括算数/逻辑单元(ALU),输出为valE信号。ALU通常作为加法器使用
- 包括条件码寄存器
- 每次运行产生:零、符号、溢出、产生信号set_cc
- 访存阶段
- 读或者写程序数据。
- 两个数据块产生存储器地址和存储器输入证据的值,两个产生控制信号表明应该是读还是写。当执行读操作时,数据存储器产生valM。
- 根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat。
- 更新PC阶段
- 产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM或者valP。
- 流水线的通用原理
- 流水线化的重要特性:增加了系统的吞吐量,即单位时间内服务的顾客总数,不过也会轻微的增加执行时间,即服务一个用户需要的时间。
- 处理器设计的几个重要经验:
- 管理复杂性是首要问题,尽量保持硬件设计的简单。
- 不需要直接实现ISA。
- 一开始就保证设计正确是非常重要的。
- 创建一个流水线化的Y86处理器的好开端。但是,将流水线技术引入一个带反馈的系统,当相邻指令同存在相关时会导致出现问题。
- 流水线控制逻辑必须处理以下4种控制情况,这些情况是其他机制(例如数据转发和分支预测)不能能处理的:
- 处理ret:流水线必须暂停直到ret指令到达写回阶段。
- 加载/使用冒险:流水线必须暂停一个周期。
- 预测错误的分支:在分支逻辑发现不应该选择分支之前,分支目标处的几条指令已经进流水线了。必须从流水线中去掉这些指令。
- 异常:当―条指令导致异常,我们想要禁止后面的指令更新程序员可见的状态,并睏异常指令到达写回阶段时,停止执行。
本周代码托管截图
老师,我没有办法生成密钥,不能push
其他(感悟、思考等,可选)
Y86与IA32略有不同,理解起来有点难度。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 | |
第五周 | 500/1000 | 3/7 | 22/60 | |
第六周 | 300/1300 | 2/9 | 20/90 |