2017-2018-1 20155216 《信息安全系统设计基础》第七周学习总结
教材学习内容总结
一、ISA抽象的作用
ISA在编译器编写者和处理器设计人员之间提供了一个概念抽象层,编译器编写者只需知道允许哪些指令,以及它们是如何编码的;而处理器设计者必须建造出执行这些指令的处理器。
定义处理器上的软件如何构建,这是ISA的最重要内涵,现代处理器都是支持高级语言编程、操作系统等等特性,ISA要定义出指令集内的指令是如何支撑起C语言里堆栈、过程调用,操作系统里异常、中断,多媒体平台里数字图像处理、3D加速等等。
二、ISA
概念:
一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构ISA。
虽然每个厂商制造的处理器性能和复杂性不断提高,但是不同型号在ISA级别上都保持着兼容。因此,ISA在编译器编写者和处理器设计人员之间提供了一个概念抽象层。
这个概念抽象层即ISA模型:CPU允许的指令集编码,且顺序地执行指令,也就是先取出一条指令,等到她执行完毕,再开始下一条。然而,现代处理器的实际工作方式可能跟ISA隐含的计算模型大相径庭。通过同时处理多条指令的不同部分,处理器可以获得较高的性能。但其必须对外表现出符合ISA模型的执行结果。
在计算机科学中,用巧妙的方法在提高性能的同时,又保持一个更简单、更抽象模型的功能,这种思想是众所周知的(抽象)。
指令集:
一个ISA可能包含多个指令集
通常会把CPU的扩展指令集称为”CPU的指令集”(因为基本的,类似加减的指令似乎是必须被CPU所支持的指令)。每款CPU在设计时就规定了一系列与其硬件电路相配合的指令集。
流水线及其实现方式
所谓流水线处理,如同生产装配线一样,将操作执行工作量分成若干个时间上均衡的操作段,从流水线的起点连续地输入,流水线的各操作段以重叠方式执行。这使得操作执行速度只与流水线输入的速度有关,而与处理所需的时间无关。这样,在理想的流水操作状态下,其运行效率很高。
如果某个设计的处理流程分为若干步骤,而且整个数据处理是单流向的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以采用流水线设计方法来提高系统的工作频率。
利用流水线的设计方法,可大大提高系统的工作速度。这种方法可广泛运用于各种设计,特别是大型的、对速度要求较高的系统设计。虽然采用流水线会增大资源的使用,但是它可降低寄存器间的传播延时,保证系统维持高的系统时钟速度。在实际应用中,考虑到资源的使用和速度的要求,可以根据实际情况来选择流水线的级数以满足设计需要。
流水线图示:
Y86-64指令集体系结构
Y86-64指令:
halt:这个指令将会终止指令的执行。
nop:这是一个占位指令,它不做任何事情,后续为了实现流水线,它有一定的作用。
xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数。比如rrmovl指令,则代表将一个寄存器的值,赋给另外一个寄存器。
opl:操作指令,比如加法,减法等等。
jmp,jle,jl,je,jne,jge,jg:条件跳转指令,根据后面的条件进行跳转。
cmovxx:条件传送指令,后面的xx代表的是条件。特别的是,条件传送只发生在两个寄存器之间,不会将数据传送到存储器。
call与ret:方法的调用和返回指令。一个将返回地址入栈,并跳到目标地址。一个将返回地址入PC,并跳到返回地址。
push与pop:入栈和出栈操作。
逻辑设计和硬件控制语言HCL
在硬件设计中,用电子电路来计算对位进行运算的函数,以及在各种存储器元素中存储位。大多数现代电路技术都是用信号上的高电压或者低电压来表示不同的位值。在当前的技术中心,逻辑 1 是用 1.0 伏特的高电压表示,而逻辑 0 是用 0.0 伏特的低电压表示。要实现一个数字系统需要三个组成部分:
1、计算对位进行逻辑操作的函数的组合逻辑
2、存储位的存储器元素
3、控制存储器元素更新的时钟信号
基本逻辑设计——逻辑门
HCL表达式 和 C 语言逻辑表达式的区别
1、逻辑门是持续输出的,如果电路的输入变化了,在一定的延迟之后,输出也会相应的变化,而C表达式是在执行到的时候才会求值。
2、两者操作的值不同,逻辑门只对值 0 和值 1 进行操作,而C 逻辑表达式允许参数是任意整数,0表示false,其它任意值都表示true。
3、C 逻辑表达式存在短路,比如对于a && b这个符号来说,C语言中的规定是如果前者为假,则后者不会再计算。而HCL当中没有这种说法。
组合电路和HCL布尔表达式
1、两个或多个逻辑门的输出不能连在一起。否则它们可能会导致线上的信号矛盾,可能会导致一个不合法的电压或电路故障。
2、这个网必须是无环的,也就是在网中不能有路径经过一系列的门而形成一个回路,这样的回路会导致该网络计算的函数有歧义。
Y86-64的顺序实现
处理命令各阶段操作
1、取指:取指阶段从存储器读取指令字节,地址为程序计数器PC的值
2、译码:译码阶段从寄存器文件读入最多两个操作数
2、执行:在执行阶段,算数/逻辑单元要么根据ifun的值执行指令指明的操作,计算机存储器引用的有效地址,要么增加或减少栈指针
4、访存:访存阶段可以将数据写入存储器,或从存储器读出数据
5、写回:写回阶段最多可以写两个结果到寄存器文件
6、更新PC:将PC设置成下一条指令的地址
SEQ硬件结构
教材学习中的问题和解决过程
-
问题1:指令集中的指令格式
-
问题1解决方案:
一条二进制机器指令由:指令码(操作码)+操作数组成。
操作码用来说明:指令的功能和执行的操作;
操作数说明:操作所涉及的源和目的数据的位置;
源:立即数(即指令中包含的常亮)、寄存器、存储器、I/O端口等;
代码调试中的问题和解决过程
- 问题1:
long sun(long *start,long count)
{
long sum=0;
while(count)
{
sum+=*start;
start++;
count--;
}
return sum;
}
汇编代码:
机器码:
- 问题1解决方案:
只能查看到机器码和X86-64汇编代码,无法查看Y86-64汇编代码。
代码托管
结对及互评
本周结对学习情况
- [20155214](http://www.cnblogs.com/besti155214/p/7782336.html)
- 结对照片
- 结对学习内容
- ISA
- 硬件控制语言HCL
其他(感悟、思考等,可选)
1、如果能更好的解决管理复杂性方面的问题,将会使硬件资源在最小的成本下获得最大的性能。
2、采用流水线和更多并行性的系统中,要想正确处理异常变得更加复杂。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第三周 | 114/114 | 3/3 | 20/20 | |
第四周 | 136/250 | 2/5 | 18/38 | |
第五周 | 87/337 | 2/7 | 22/60 | |
第六周 | 271/608 | 2/9 | 30/90 | |
第六周 | 185/716 | 2/11 | 30/90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:25小时
-
实际学习时间:20小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)