zoukankan      html  css  js  c++  java
  • 20135213——信息安全系统设计基础第六周学习总结

    第六周(10.12-10.18):

    学习计时:共xxx小时

    读书:

    代码:

    作业:

    博客:参考:闫佳歆http://www.cnblogs.com/20135202yjx/p/4888820.html

    一、学习目标

    1. 了解ISA抽象的作用
    2. 掌握ISA,并能举一反三学习其他体系结构
    3. 了解流水线和实现方式

    二、学习资源

    1. 教材:第四章《处理器体系结构》,详细学习指导见:重点是4.1-4.3

    2. 课程资料:https://www.shiyanlou.com/courses/413   实验五,课程邀请码:W7FQKW4Y

    3. 教材中代码运行、思考一下,读代码的学习方法见

     

    三、学习方法

    1.  进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。

    2. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/
    3. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习
    4. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“信息安全系统设计基础第六周学习总结”

     

    四、学习任务

    1. 阅读教材,完成课后练习(书中有参考答案)

       4.1-4.3中练习,重点:4.1 4.2 4.5 4.6 4.8 4.10 4.11 4.12  4.16 4.17 4.19 4.21 4.24

    2. 考核:练习题把数据变换一下

    3. 实验:需要动手的到实验楼中练习一下

    处理器体系结构

    一、教材指导

    本章内容是处理器体系结构,重点掌握ISA,并能举一反三;

    本章带着大家设计并实现了一个结合CISC和RISC思想的处理器Y86,一个类IA32体系的处理器;

    ISA在编译器编写者和处理器设计者之间提供了一个抽象。

    本章重点是4.1-4.3

    流水线部分4.4-4.5供学有余力的同学自学

    练习题

    4.1 4.2 4.5 4.6 4.8 4.10 4.11 4.12 4.16 4.17 4.19 4.21 4.24

    以习题驱动,再看书,有问题及时在答疑论坛问

    二、实验

    1 课程QQ群中,或官网下载Y86模拟器,验证教材上不少于三人HCL代码

    2.构建YIS环境:

    cd ~/Code/shiyanlou_cs413
    wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar
    tar -xvf sim.tar
    cd sim
    sudo apt-get install tk
    sudo ln -s  /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so
    sudo ln -s  /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so
    make
    

    3.YIS手册下载

    4.YIS测试:

    cd y86-code
    

    进入测试代码,教材p239页代码为asuml.ys,可以通过

    make asuml.yo
    

    进行汇编,asuml.yo就是汇编后的结果,见教材p238。

    make all
    

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

    、后续学习预告(可选):

    第六章《存储器层次结构》

    、学习过程

    第四章

    1.处理器体系结构

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

     

     2.Y86指令集体系结构

    流水线化的处理器:

    将每条指令的执行分解成五步,每个步骤由一个独立的硬件部分或者阶段来处理。指令步经流水线的各个阶段,且每个时钟周期有一条新指令进入流水线。所以处理器可以同时执行五条指令的不同阶段。有3个一位的调价吗:ZFSFOF,它们保存最近的算术或逻辑指令所造成影响的有关信息。

    程序员可见的状态:

    Y86程序中的每条指令都会读取或者修改处理器状态中的某些部分。这称为程序员可见状态。Y86程序中的每条指令都会读取或者修改处理器状态的某些部分这称为程序员可见状态。这里的"程序员"既可以是用汇编代码写程序的人,也可以是产生机器级代码的编译器。在处理器实现中,只要我们保证机器级程序能够访问程序员可见状态,就不需要完全按照ISA隐含的方式来表示和组织从这个处理器状态。Y868个程序寄存器:%eax%ecx%edx%ebx%esi%edi%esp%ebp

    Stat

    程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态;它会指示是正常运行还是出现了某种异常。

    Y86

    一个简单的、可以称之为IA32指令集的子集的指令集;只包括四字节整数操作,寻址方式比较少。指令编码长度从1——6字节不等。

    关于指令结构,每条指令的第一个字节表明指令的类型;这个字节分为两个部分,每部分四位:高四位是代码部分(0——0xB),第四位是功能部分。

    这里补充一些缩写:立即数(i),寄存器(r)、存储器(m)。指令附加的寄存器指示符字节依次是数据源(如果是立即数,把这一位设置成0xf)、目的寄存器/基址寄存器。有些指令需要附加四字节的常数字,采用小端法(倒序)编码

     

    3.stat代码

    stat代码可能取值反应了机器的不同状态——

    - AOK:正常操作(除此之外的任何状态都会使得处理器停止执行指令)

    - HLT:处理器执行halt指令

    - ADR:遇到非法地址2015/10/14 17:16:25

    - INS:遇到非法指令

     

    4.命令

    命令指明应该将代码或者是数据放在什么位置等。

    其中,以 .开头的是汇编器命令,它们告诉汇编器调整地址,以便在那儿产生代码或者是插入一些数据。

    指令模拟器YIS是模拟Y86机器代码程序的执行而不用试图去模拟任何具体处理器实现的行为。

     

    5.poplpushl

    pushl会把栈指针减4,并将一个寄存器值写入存储器中。因此,执行pushl %esp 和 popl %esp的结果是不固定的。

    特指,在压入/弹出栈指针%esp的时候,有两种不同的约定:

    1)压入/弹出%esp的原始值

    2)压入/弹出%esp-/+4后的值

    经过试验,发现默认压入弹出的都是原始值。

    pushl在不同的x86模型之间有歧义,但是popl没有。

     

    6.逻辑门

    逻辑门是数字电路的基本计算元素。

    逻辑门产生的输出,等于它们输入位值的某个布尔函数。

    逻辑门总是活动的,一旦一个门的输入变化了,在很短的时间内,输出就会相应地变化。

    AND &&

    OR ||

    NOT !

    将很多的逻辑门组合成一个网,就能构建计算块,称为组合电路。限制:

    两个或者多个逻辑门的输出不能连接在一起;

    这个网必须无环

    逻辑门只对单个位的数进行操作,而不是整个字。

    多路复用电路(MUX):根据输入控制信号的值,从一组不同的数据信号中选出一个。

     

    7.关于HCL的几点说明

    HCL中所有字级的信号都声明为int

    在画字级电路的时候,用中等粗度的线表示携带字的每个位的线路,用虚线来表示布尔信号的结果

    HCL中,表示默认情况(即所有条件都没有被选中的情况)一般用1

     

    8.算术/逻辑单元(ALU):

    根据控制输入的设置(0123),电路会对数据输入执行不同的算数或者逻辑操作(+-&^)。

    组合逻辑电路和c语言中逻辑表达式的区别:

    组合电路的输出会持续响应输入变化,c语言表达式只有在执行过程中被遇到才求值

    逻辑门只对01操作,c语言表达式中参数可以是任意整数,0FALSE,不是0的都是TRUE

    c的逻辑表达式可能被部分求值

     

    9.时序电路:

    有状态并且在这个状态上进行计算的系统。

    其两类存储器设备:

    1)时钟寄存器(简称寄存器):储存单个位或字。

    2)随机访问储存器(简称储存器):储存多个字,用地址选择该读/写哪个字。

     

    10.时钟寄存器&随机访问存储器

    时钟寄存器存储单个位或者字。时钟信号控制寄存器加载输入值

    随机访问存储器存储多个字,用地址来选择该读入或者该写哪个字

     

    11.SEQ处理器

    Y86的顺序实现离不开SEQ处理器(顺序处理器)

    将处理一条指令的操作组织成一个特殊的阶段序列;可以设计一个充分利用硬件的处理器。

    处理操作的阶段——

    取指:从寄存器读取指令字节,地址为程序计数器的值。计算下一条指令地址等于PC中的值加上已取出指令的长度

    译码:从寄存器文件中最多读出两个操作数

    执行:ALU执行指明的操作、引用的有效地址或者是修改栈指针

    访存:将数据写入存储器或者从存储器读出数据

    写回:写两个结果到寄存器文件

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

    关于一些指令的处理步骤:(1irmovl指令的处理与rrmovl类似,但是因为是长指令格式,所以程序计数器要加6

    2)指令callret与之前的poplpushl类似。对于指令call,我们要将valP也就是call之后的那条指令的地址压入栈中在更新PC阶段,将PC设置为valC,也就是调用目的地

     

    12.SEQ

    SEQ抽象视图的画法:

    程序计数器放在寄存器中,位于左下角PC

    信息随着线流动,方向是先向上再向右

    反馈先祖在右边向下

    所有硬件单元的处理都在一个时钟周期内完成。

    浅灰色方块表示硬件单元

    控制逻辑块是用灰色圆角矩形表示的

    线路的名字在白色椭圆中说明

    宽度为字长或更窄的数据连接用细线

    单个位的连接用虚线

    SEQ的时序(逐步深化)

    要控制处理器中活动的时序,只需要寄存器和存储器的时钟控制

    除了指令存储器只用来读指令故而可以看作组合逻辑之外,剩余的程序计数器、条件码寄存器、数据存储器和寄存器文件需要通过一个时钟信号来控制(控制时序)

    在每个时钟周期内,程序计数器都会装载新的指令地址;只有执行整数运算指令的时候,才会装载条件码寄存器。只有执行rmmovl,pushl,call时,才会写数据存储器。

    Y86指令集的本质遵循这样一项组织原则:处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态 【如何理解?也就是说,处理器所经手的指令中,如果有某些是可以改变机构状态的;那么一定先改变状态之后再执行指令。这样保证了操作的时序性(防止指令执行起来互相颠倒)】

     

     实验:

     


     
     


    七、遇到的问题及解决

    1.练习4.6的答案中提到作用为避免歧义的设定。这个避免歧义是在什么情况下需要特别注意。

     解决:联系c语言的内容,c中有部分代码有异议貌似也是会再次定义声明分辨。//不知道理解的对不对。

     

    八、其他

    按要求是按练习去熟悉这部分内容,练习多次强调手工译码的部分还是不太熟练,需要多试试。

  • 相关阅读:
    BZOJ-3495 前缀优化建图2-SAT
    洛谷P3979 遥远的国度 树链剖分+分类讨论
    hdu
    hdu
    poj
    poj-1330(暴力写的lca)
    树链剖分
    Dijkstra
    Floyed
    最短路径
  • 原文地址:https://www.cnblogs.com/20135213lhj/p/4888823.html
Copyright © 2011-2022 走看看