信息安全系统设计基础第六周学习总结
第四章 处理器体系结构
第一节 Y86指令集体系结构
程序员可见的状态
- 程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp,%ebp。他们都可以存储一个字。%esp被入栈、出栈、调用和返回指令作为栈指针。
- PC(程序计数器):存放当前正在执行指令的地址。
- 程序存储器:就是一个很大的字节数组,保存着程序和数据。Y86用虚拟地址来引用存储器位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址。
- 条件码:ZF、OF、SF。都是一位条件码,用来保存最近的算术或逻辑指令所造成影响的有关信息。
- Stat:程序状态的最后一个部分是状态码,它表明程序执行的总体状态。它会指示是正常运行还是出现了某种异常。
Y86指令
1.在movl指令中,指令名字的第一个字母就表明了源类型。指令第二个字母指明了目的类型。立即数(i)、寄存器(r)、存储器(m)。两个存储器传送指令中的存储器引用方式是简单地基址和偏移量形式。
2.addl,subl,andl,xorl是四个整数操作指令,Y86中只允许对寄存器数据进行操作。
3.jmp,jle,jl,je,jne,jge,jg是七个跳转指令,根据分支指令的类型和条件码的设置来选择分支。
4.cmovle,cmovl,cmove,cmovne,cmovge,cmovg是六个条件传送指令,这些指令的格式与寄存器-寄存器传送指令rrmovl一样,但只有当条件码满足所需要的约束时,才会更新目的寄存器的值。
5.call指令将返回地址入栈,然后跳到目的地址。
6.pushl和popl指令实现了入栈和出栈。
7.halt指令停止指令的执行(IA32中的指令hlt)。
指令编码
每条指令的第一个字节表明指令的功能
这个字节分为两个部分
高四位是代码部分
低四位是功能部分
有的指令只有一个字节长,因为可能附加有寄存器指示符字节,指定一个或两个寄存器。这些寄存器字段为rA,rB。有则有,无则无,只有一个的则将第二个设为0xF。
有的指令需要一个附加的4字节常数字作为立即数数据或地址指示符偏移量或分支指令和调用指令的目的地址。所有整数采用小端法编码。
Y86异常
Y86程序
- 以“.”开头的词是编辑器命令
- 命令 .pos0告诉编辑器应该从地址0处开始产生代码,这个地址是所有Y86程序的起点
第二节 逻辑设计和硬件控制语言HCL
逻辑门
- 与(AND):Y=a&&b
- 或(OR):Y=a||b
- 非(NOT):Y=!a
组合电路和HCL布尔表达式。
两个限制:
- 两个或多个逻辑门的输出不能连在一起
- 这个网必须是无环的
字级的组合电路和HCL整数表达式
在HCL中,多路复用函数是用情况表达式来描述的,格式如下:
[
select_1 : expr_1
select_2 : expr_2
...
select_k : expr_k
]
集合关系
判断集合关系:
iexpr in {iexpr1,iexpr2,...,iexprk}
其中被测值iexpr和待匹配的值iexpr1-iexprk
寄存器和时钟
组合电路简单的响应输入信号,产生等于输入的某个函数的输出,并存在状态在这个状态上进行计时,如此产生了时序电路。
储存器设备:
- 时钟计时器
- 随机访问储存器
时钟计时器:
随机访问储存器:
第三节 Y86的顺序实现
将处理组织成阶段
1.取指
2.译码
3.执行
4.访问
5.写回
6.更新PC
SEQ硬件结构
1.取指
2.译码
3.执行
4.访存
5.写回
SEQ的时序
四个硬件单元:
1.程序计数器
2.条件码寄存器
3.数据存储器
4.寄存器文件
由于Y86指令集得本质,要遵循以下原则组织计算:
处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态
SEQ阶段的实现
- 取指阶段,包括指令储存器硬件单元
- 译码和回写阶段
- 执行阶段,包括算数/逻辑单元
- 访存阶段,读或写程序数据
- 更新PC阶段
- SEQ小结
第四节 流水线的通用原理
流水线化的一个重要特性是增加了系统的吞吐量
计算流水线
吞吐量={1 instruction/(加载寄存器时间+组合逻辑时间)}*{1000 picosecond/1 nanosecond}
流水线操作的局限性
书上的例子是一个理想的流水线化的系统,若将这个系统分成三个互相独立的阶段,每个阶段所需的时间应是原来逻辑需要时间的三分之一,然而现实中不能实现。
原因:
1.不一致的划分
2.流水线过深,收益反而下降
作业
遇到的问题:
在创建环境时,已经建立了文件,却无法make。
参考来源:《深入理解计算机系统》