zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155326 《信息安全系统设计基础》第7周学习总结

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

    教材学习内容总结

    ISA

    一个处理器支持的指令和指令的字节级编码称为ISA,即指令集体系结构。

    Y86-64指令集体系结构

    • 程序员可见的状态

    Y86程序中的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态。其中包括:

    • Y86-64指令

    1)movq:irmovq、rrmovq、mrmovq、rmmovq。第一个字母表明源的类型,i(立即数)、r(寄存器)或m(内存),第二个字母代表目的,可以是r(寄存器)或者m(内存)。

    2)不允许从一个存储器地址直接传送到另一个存储器地址,也不允许将立即数传送到存储器。

    3)四个整数操作指令(OPq):addq、subq、andq和xorq。只对寄存器数据进行操作,还允许对内存数据进行这些操作。

    七个跳转指令(jXX):jmp、jle、jl、je、jne、jge和jg,根据分支指令的类型和条件代码的设置来选择分支。

    六个条件传送指令(cmovXX):cmovle、cmovl、cmove、cmovne、cmovge和comvg,指令格式与寄存器-寄存器传送指令rrmovl一样,但只有当条件码满足所需要的约束时才会更新目的寄存器的值。

    call和ret指令:call指令将返回地址入栈,然后跳转到目的地址,ret指令从这样的过程调用中返回。

    pushq和popq:实现了入栈和出栈。

    halt:停止指令的执行。

    • 指令编码

    1)高4位为代码部分,低四位为功能部分,代码值为0~0xB,功能值只有在一组相关指令共用一个代码时才有用。

    2)程序寄存器存在CPU中的一个寄存器文件中,这个文件就是一个小的、以寄存器ID作为地址的随机访问存储器。

    3)分支指令和调用指令的目的是一个绝对地址。

    4)所有整数采用小端法编码。

    5)字节编码必须有唯一的解释。

    练习题4-1

    练习题4-2

    • 异常

    1)状态码Stat:描述程序执行的总体状态。

    2)

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

    1)

    2)为了产生时序电路,必须引入按位存储信息的设备,存储设备都由同一个时钟信号控制。

    3)考虑两类存储器设备:

    时钟寄存器:存储单个位或字,时钟信号控制寄存器加载输入值。
    随机访问存储器:存储多个字,用地址来选择应该读写哪个字。
    

    练习题4-11、4-12

    • Y86顺序实现

    取指:从存储器读取指令字节,地址为程序计数器(PC)的值。指令指示符字节两个四位部分,称为icode(指令代码)和ifun(指令功能)。vaIP(下一条指令的地址)=PC+已取出指令的长度。

    译码:从寄存器文件读入最多两个操作数,得到valA和/或valB。

    执行:算数逻辑单元(ALU)根据ifun的值执行指令指明的操作,计算存储器引用的有效地址,或者增加或减少栈指针。得到的值称为valE。也可根据条件码执行跳转。

    访存:将数据写入存储器,或者从存储器读出数据。读出的值为valM。

    写回:写会阶段最多可以写两个结果到寄存器文件。

    更新PC:将PC设置成下一条指令的地址。

    • SEQ硬件实现

    硬件单元与各个处理阶段相关联:

    取指:将程序计数器寄存器作为地址,指令存储器读取指令的字节。PC增加器计算valP,即增加了的程序计数器。

    译码:寄存器文件有两个读端口A和B,从这两个端口同时读寄存器的值valA和valB。

    执行:根据指令类型将算数/逻辑单元(ALU)用于不同的目的。条件码寄存器有三个条件码位,ALU负责计算条件码的新值,当执行跳转指令时会根据条件码和跳转类型来计算分支信号Cnd。

    访存:数据存储器读出或写入一个存储器字。指令和数据存储器访问的是相同的存储器位置,但用于不同的目的。

    写回:寄存器文件有两个写端口,E用来写ALU计算出来的值,M用来写从数据存储器中读出来的值。

    • SEQ阶段的实现

    1)取指阶段:包括指令内存硬件单元。

    2)译码和写回阶段:寄存器文件有四个接口,支持同时进行两个读和两个写,每个端口有一个地址连接和一个数据连接,既可以作为寄存器文件的输出字,又可以作为它的输入字。

    3)执行阶段:包括算数/逻辑单元(ALU),输出就是valE信号。

    4)访存阶段:读或者写程序数据。两个控制块产生存储器地址和存储器输入数据的值。另外两个块产生表明应该执行读还是写操作的控制信号。当执行读操作时,数据存储器产生valM。

    5)更新PC阶段:产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM或valP。

    Y86模拟器安装

    以下为在自己虚拟机中的安装过程:

    1)安装bison和flex词法分析工具,在终端中输入sudo apt-get install bison flex

    下载sim解压。地址http://csapp.cs.cmu.edu/public/students.html,这里我用的是自己手机开的热点,使用内网太慢了,一直打不开。

    出现问题无权限

    解决办法:无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

    1.终端输入 ps -aux ,列出进程,找到含有apt-get的进程,直接sudo kill PID解决。

    2.强制解锁--命令:

    sudo rm /var/cache/apt/archives/lock
    sudo rm /var/lib/dpkg/lock
    

    2)找到 Chapter 4: Processor Architecture,点击Source distribution (README)如下图所示,下载后在虚拟机中解压。

    3)图形界面须要安装Tcl/Tk

    4)在终端中输入sudo apt-get install tcl8.5-dev tk8.5-dev tcl8.5 tk8.5

    5)在解压后的sim文件夹中找到makefile文件,作如下图改动并保存。

    6)编译 在sim文件夹下右键选择在终端中打开,输入make clean;make

    试了无数次后,在自己的机子上不能安装完成,于是在实验楼上进行安装。

    1)首先在Code目录下创建shiyanlou_cs413文件夹,打开后在文件夹里输入sudo wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar

    tar -xvf sim.tar

    2)在sim文件夹中输入 sudo apt-get install bison flex tk

    3)输入sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so

    4)sudo ln -s /usr/lib/x86_64-linux-gnu/libtcl8.6.so /usr/lib/libtcl.so

    5)make

    6)修改makefile

    7)打开测试代码asuml.ys,可以通过make asuml.yo进行汇编,asuml.yo就是汇编后的结果。

    make all可以汇编运行所有代码结果。

    8)在文件夹y86-code中新建文档输入P251页代码,命名文4-6.ys,

    9)make 4-6.yo

    10)make all

    查阅资料后得知应该make clean一下,然后这时只剩.ys文件了,然后可以make 4-6.yo,

    然后可以cat 4-6.yo查看,如下图所示,make all可以汇编运行所有代码

    查看j-cc.yo

    教材学习中的问题和解决过程

    1.终端输入 ps -aux ,列出进程,找到含有apt-get的进程,直接sudo kill PID解决。

    2.强制解锁--命令:

    sudo rm /var/cache/apt/archives/lock
    sudo rm /var/lib/dpkg/lock
    

    代码调试中的问题和解决过程

    • 问题1:看书上的汇编代码时,感觉代码晦涩难懂,其实主要是因为对汇编指令不熟悉。

    • 问题1解决方案:将汇编指令都标注好其意义,写了一两个后感觉轻松了不少

    • 问题2:输入make all指令时出现 make:没有什么可以做的为'all'

    • 问题2解决方案:搜索后得知需要先make clean 一下,然后再make all

    代码托管

    截图代码

    PS:这周的课程学习代码大多在实验楼中,但是我在下载实验楼代码时出错了,显示代码被破坏,所以无法展示。

    本周结对学习情况

    - [20155320](博客链接)
    - 结对照片
    

    - 结对学习内容
        - 教材第四章内容
        - Y86模拟器的安装
    

    其他(感悟、思考等,可选)

    这两周的内容都与汇编有关,对于上学期没有学好会变有点后悔,但是其实这些代码细细的看还是能看懂的。将基本指令掌握就没问题。在安装Y86模拟器时出了很多问题,后来发现在自己的虚拟机上安不好,转而在实验楼中安装,但是有一个缺点是每次想使用时必须再打开实验楼安装一次。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 1/1 10/20
    第二周 57/100 1/1 20/30
    第三周 100/100 1/1 30/30
    第四周 233/200 1/1 20/20
    第五周 267/200 1/1 20/20
    第六周 220/2000 3/1 40/20
    第七周 362/300 1/1 30/30

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:30小时

    • 实际学习时间:30小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    面向对象程序设计(JAVA) 第14周学习指导及要求
    面向对象程序设计(JAVA) 第13周学习指导及要求
    面向对象程序设计(JAVA) 第12周学习指导及要求
    让小球做圆周运动,你有几种办法?
    💥2020面试准备系列(一):JS
    秒懂js的垃圾回收
    jqgrid计算表单
    CSS揭秘实用技巧总结
    利用css 实现 视觉差效果
    前端经典面试题解密:JS的new关键字都干了什么?
  • 原文地址:https://www.cnblogs.com/lmc1998/p/7782962.html
Copyright © 2011-2022 走看看