2017-2018-1 20155305 《信息安全系统设计基础》第七周学习总结
教材内容总结
1.程序员可见状态
- Y86程序中的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态。其中包括:
- 8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp和%ebp。
- 条件码:ZF(零)、SF(符号)、OF(有符号溢出)
- 程序计数器(PC):存放当前正在执行的指令的地址
- 存储器:很大的字节数组,保存着程序和数据。Y86系统用虚拟地址来引用存储器的位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或者物理地址。
- 状态码(stat):表明程序执行的总体状态。
- Y86指令
- movl:irmovl、rrmovl、mrmovl、rmmovl,分别显式地指明源和目的地的格式。第一个字母表明源的类型,i(立即数)、r(寄存器)或m(存储器 ),第二个字母代表目的,可以是r或者m。
- 整数操作指令OPl:addl、subl、andl和xorl。只对寄存器数据进行操作,同时还设置条件码。
- 跳转指令jXX:jmp、jle、jl、je、jne、jge、jg,根据分支指令的类型和条件码的设置来选择分支。
- 条件传送指令cmovXX:cmovle、cmovl、cmove、cmovne、cmovge和comvg,与寄存器-寄存器传送指令rrmovl一样,但只有当条件码满足所需要的约束时才会更新目的寄存器的值。
- call指令将返回地址入栈,然后跳转到目的地址。ret指令从这样的过程调用中返回。
- pushl和popl:入栈和出栈。
- halt:停止指令的执行。
- 所有数值都用十六进制表示:
2.CPU硬件
大多数现代电路设计都是用信号线上的高电压和低电压来表示不同的位值。 要实现一个数字系统需要三个主要的组成部分:- 计算对位进行操作的函数的组合逻辑(ALU)
- 存储位的存储器元素(寄存器)
- 控制存储器元素更新的时钟信号 3.逻辑门 逻辑门是数字电路的基本计算元素,它们产生的输出,等于它们输入位值的某个布尔函数。 将很多逻辑门组合成一个网,就能构建计算块,称为组合电路。 4.组合电路和HCL布尔表达式 组合电路:将很多的逻辑门组合成一个网,能构建计算块。 构建这些网有2条限制:
- 两个或多个逻辑门的输出不能连接在一起
- 这个网必须是无环的。 5.存储器和时钟 时钟是一个周期性信号,决定了什么时候要把新值加载到设备中。大多数时候,寄存器都保持在稳定状态(用x表示),产生的输出等于它的当前状态。信号沿着寄存器前面的组合逻辑传播,这时,产生了一个新的寄存器输入(用y表示),但只要时钟是低电位的,寄存器的输出就仍然保持不变。当时钟变成高电位的时候,输入信号才加载到寄存器中,成为下一个状态y,直至下一个时钟的上升沿。 寄存器是作为电路不同部分中的组合逻辑之间的屏障。每当每个时钟到达上升沿时,值才会从寄存器的输入传送到输出。 6.指令编码 每条指令需要1——6个字节不等,这取决于需要哪些字段。每条指令的第一个字节表明指令的类型:高4位是代码部分(例:6为整数类操作指令),低4位是功能部分(例:1为整数类中的减法指令) 61合起来即为sub指令。
- 取指:从存储器读取指令字节,地址为程序计数器(PC)的值。指令指示符字节两个四位部分,称为icode(指令代码)和ifun(指令功能)。vaIP(下一条指令的地址)=PC+已取出指令的长度。
- 译码:从寄存器文件读入最多两个操作数,得到valA和/或valB。
- 执行:算数逻辑单元(ALU)根据ifun的值执行指令指明的操作,计算存储器引用的有效地址,或者增加或减少栈指针。得到的值称为valE。也可根据条件码执行跳转。
- 访存:将数据写入存储器,或者从存储器读出数据。读出的值为valM。
- 写回:最多可以写两个结果到寄存器文件。
- 更新PC:将PC设置成下一条指令的地址。 7.SEQ的时序
- SEQ的实现包括组合逻辑和两种存储器设备:时钟存储器(程序计数器和条件码寄存器),随机访问存储器(寄存器文件、指令存储器和数据存储器)。
- Y86指令集的计算原则:处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。 8.流水线 流水线化的一个重要特性就是增加了系统的吞吐量,也就是单位时间内服务的顾客总数,不过它也会轻微地增加延迟,也就是服务一个用户所需要的时间。流水线化是允许多条指令在CPU中,每条指令在CPU中的时间是一样的,哪怕一个周期就能执行完了,也得等剩下的阶段结束,使后面的指令被延迟了。 虽然流水线化,所有指令在CPU中待的时间都一样(且都按最耗时指令算的),但它们的时间是重叠的。假设一条指令在CPU中待6ms,那么12ms能处理7条指令,而非流水线,虽然一条指令最多执行6ms,但它们的时间是相加的,12ms可能只执行3条。12=6+2+4)
教材学习中的问题和解决过程
- 问题1:
代码调试中的问题和解决过程
问题1:虚拟机中安装Y86模拟器
安装成功,具体步骤参考- 安装bison和flex词法分析工具
sudo apt-get install tcl8.5-dev tk8.5-dev tcl8.5 tk8.5
改动makefile文件
上周考试错题总结
结对及互评
点评模板:
- 博客中值得学习的或问题:
- 学习态度认真
- 代码中值得学习的或问题:
- 编写代码严谨
- 其他
本周结对学习情况
- [20155311](博客链接)- 结对照片- 结对学习内容 -fork函数,wait函数,exec函数,实现mybash -第三章 程序的机器级的表示
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 10/ 10 | 1/1 | 10/10 | |
第三周 | 158/ 168 | 1/2 | 17/27 | |
第五周 | 145/ 313 | 3/ 5 | 21/48 | |
第六周 | 209/ 522 | 1/ 6 | 20/68 | |
第七周 | 200/ 722 | 2/ 8 | 20/88 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式 :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。参考:,
计划学习时间:20小时
实际学习时间:20小时
改进情况:开始进入学习状态,每天会学习一点新知识温习旧知。
(有空多看看)