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

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

    教材学习内容总结

    浏览了正章,重点学习了处理器的流水线作业

    • 流水线的通用原理
      • 将处理组织成阶段
        • 将一条指令分解成很多步操作,在执行
    操作 描述
    取值(fetch) 从存储器取指令,再更新PC
    译码(decode) 从寄存器堆读出寄存器的值
    执行(execute) 运算指令:进行算术逻辑运算;访存指令:计算存储器的地址
    访存(memory) load指令:从内存读出数据;store指令:将数据写入内存
    写回(write-back) 将数据写回寄存器堆
        • 计算流水线
        • 这是一个非流水线的硬件系统,对应一条指令的执行,执行其中的组合逻辑部分假设需要300ps (1ps=10^(-12)s),寄存器延迟需要20ps,那么时钟周期设置为320ps(这条指令的执行时间为一个周期),吞吐量(指令数/指令执行时间)为
          1/320ps = 3.12GIPS(每秒千兆指令)。

    Y86模拟器的配置

    • 具体参考 20145218张晓涵学姐的博客,里面的步骤已经叙述的很详尽了,只是有一点需要注意,输入make指令前,先将Makefile里面的代码改成如下形式,以及出现如下截图的提示也不要管,对后续的步骤没有影响。
    # Comment this out if you don't have Tcl/Tk on your system
    
    GUIMODE=-DHAS_GUI
    
    # Modify the following line so that gcc can find the libtcl.so and
    # libtk.so libraries on your system. You may need to use the -L option
    # to tell gcc which directory to look in. Comment this out if you
    # don't have Tcl/Tk.
    
    TKLIBS=-L/usr/lib/ -ltk8.5 -ltcl8.5
    
    # Modify the following line so that gcc can find the tcl.h and tk.h
    # header files on your system. Comment this out if you don't have
    # Tcl/Tk.
    
    TKINC=-I /usr/include/tcl8.5
    
    ##################################################
    # You shouldn't need to modify anything below here
    ##################################################
    
    # Use this rule (make all) to build the Y86 tools. The variables you've
    # assigned to GUIMODE, TKLIBS, and TKINC will override the values that
    # are currently assigned in seq/Makefile and pipe/Makefile.
    all:
    	(cd misc; make all)
    	(cd pipe; make all GUIMODE=$(GUIMODE) TKLIBS="$(TKLIBS)" TKINC="$(TKINC)")
    	(cd seq; make all GUIMODE=$(GUIMODE) TKLIBS="$(TKLIBS)" TKINC="$(TKINC)")
    	(cd y86-code; make all)
    
    clean:
    	rm -f *~ core
    	(cd misc; make clean)
    	(cd pipe; make clean)
    	(cd seq; make clean)
    	(cd y86-code; make clean)
    	(cd ptest; make clean)
    
    
    • 最后输入./psim -t -g ../y86-code/asum.yo可以看到如下截图:

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

    • 问题1:P255的4.4题:根据下面的C代码,用Y86-64代码来实现一个递归求和函数rsum;
    int Sum(int *Start,int Count)
    {
        int sum = 0;
        while(Count)
        {
            sum+=*Start;
            Start++;
            Count--;
        }
        return sum;
    }
    
    • 问题1解决方案:先用linux下的gcc编译器将上面的代码编译成x86-64汇编代码如下:
    Sum:
    .LFB0:
    	pushq	%rbp
    	movq	%rsp, %rbp
    	movq	%rdi, -24(%rbp)
    	movl	%esi, -28(%rbp)
    	movl	$0, -4(%rbp)
    	jmp	.L2
    .L3:
    	movq	-24(%rbp), %rax
    	movl	(%rax), %eax
    	addl	%eax, -4(%rbp)
    	addq	$4, -24(%rbp)
    	subl	$1, -28(%rbp)
    .L2:
    	cmpl	$0, -28(%rbp)
    	jne	.L3
    	movl	-4(%rbp), %eax
    	popq	%rbp
    	ret
    
    • 按照Y86-64规则改写上面代码:
    Sum:
        xorq %rax,%rax
        andq %rsi,%rsi
        je      return
        pushq %rbx
        mrmovq (%rdi),%rbx
        irmovq $-1,%r10
        addq %r10,%rsi
        irmovq $8,%rdi
        call Sum
        addq %rbx,%rax
        popq %rbx
    return:
    	ret
    

    代码托管

    结对及互评

    结对队友20155303

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

    这周学习了新的处理器环境,挺受用的,也理解了ISA是处理器设计者和编译器编写者的抽象层。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 15篇 400小时
    第一周 177/177 1/1 10/10
    第三周 308/485 2/2 12/22
    第五周 277/762 2/4 10/32
    第六周 567/1329 1/5 15/47
    第七周 22/1351 1/6 10/57

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

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

    • 计划学习时间:XX小时

    • 实际学习时间:XX小时

    • 改进情况:

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

    参考资料

  • 相关阅读:
    python 正则表达式 (重点) re模块
    python 异常处理
    面向对象 反射 特殊方法
    3. 容器备份与迁移
    2. Docker部署tomcat, nginx, redis,及docker私有仓库
    1. Docker快速入门(仓库,镜像,容器)
    Linux部署项目 shell脚本启动 及 Centos7开放指定端口
    nginx快速入门
    linux安装mysql8(完整图文笔记)
    Redis主从架构核心原理
  • 原文地址:https://www.cnblogs.com/elevator/p/7788857.html
Copyright © 2011-2022 走看看