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

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

教材学习内容总结

学习目标

  • 理解虚拟存储器的概念和作用
  • 理解地址翻译的概念
  • 理解存储器映射
  • 掌握动态存储器分配的方法
  • 理解垃圾收集的概念
  • 了解C语言中与存储器有关的错误

教材内容提炼

第2章 信息的表示和处理

  • 三种最重要的数字表示
    • 无符号编码:表示大于或等于零的数字
    • 补码编码:表示有符号整数的最常见方式
    • 浮点数编码:表示实数的科学记数法的以2为基数的版本
  • 信息存储
    • 虚拟内存:机器级程序将内存视为一个非常大的字节数组,称为虚拟内存
    • 十六进制表示法
    • 字数据大小
      • 一个字长为w位的机器,虚拟地址的范围为0~2w-1,程序最多访问2w个字节
      • 向后兼容:大多数64位机器也可以运行为32位机器编译的程序
      • ISO C99引入一类数据类型,其数据大小是固定的,不随编译器和机器设置而变化
        • int32_t:4字节
        • int64_t:8字节
      • 对关键字的顺序以及包括还是省略可选关键字来说,C语言允许存在多种形式:如 unsigned longunsigned long intlong unsignedlong unsigned int均等价
    • 寻址和字节顺序
      • 小端法:最低有效字节在最前面
      • 大端法:最高有效字节在最前面
    • 表示字符串
    • 表示代码
    • 布尔代数简介
      • 布尔环中加法运算是,每个元素的加法逆元都是它自己本身,即对于任何值a,**aa=0**
    • C语言中的位级运算(按位布尔运算)
      • |
      • &
      • ~
      • ^
    • C语言中的逻辑运算(逻辑运算认为所有非零的参数都表示TRUE(返回1),而参数0表示FALSE(返回0))
      • ||
      • &&
      • !
    • C语言中的移位运算
      • 左移
      • 右移
        • 逻辑右移:在左端补k个0
        • 算术右移:在左端补k个最高有效位的值
  • 整数表示
    • 整型数据类型
    • 无符号数的编码
    • 补码编码
    • 有符号数和无符号数之间的转换
    • C语言中的有符号数与无符号数
    • 扩展一个数字的位表示
    • 截断数字
    • 关于有符号数与无符号数的建议
  • 整数运算
    • 无符号加法
    • 补码加法
    • 补码的非
    • 无符号乘法
    • 补码乘法
    • 乘以常数
    • 除以2的幂
    • 关于整数运算的最后思考
  • 浮点数
    • 二进制小数
    • IEEE浮点表示
    • 数字示例
    • 舍入
    • 浮点运算
    • C语言中的浮点数
      • int转成float:数字不会溢出,但可能被舍入
      • intfloat转成double:能保留精确的数值
      • double转成float:值可能溢出成+∞或-∞,还可能被舍入
      • floatdouble转成int:值将会向零舍入

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

无法打开Y86-64模拟器界面

gxffK.png

解决方法

这是Y86-64模拟器的Makefile中配置GUI相关路径错误导致的,解决方法是将两个GUI路径分别设置为TKLIBS=-L/usr/lib -ltk8.5 -ltcl8.5TKINC=-I/usr/include/tcl8.5即可,如下图:
gxWY6.png
成功打开Y86-64模拟器:
gxRFx.png

代码托管

N6kAx.png

上周考试错题总结

CH03

  1. 假设用ADD指令完成C表达式t=a+b的功能,有关条件码寄存器的说法正确的是()

    A. 若t==0 ,则ZF=1

    B. 若t<0, 则CF=1

    C. 若t<0, 则SF=1

    D. 若(a<0==b<0)&&(t<0 != a<0), 则OF=1

    E. 若(a<0==b<0)&&(t<0 != a<0), 则CF=1

    F. leaq指令不影响条件码寄存器

    G. cmp指令不影响条件码寄存器

    【错选】A B D G

    【答案】A D F

    【解析】参考课本p135

  2. 以下代码是将void decode1(long *xp, long *yp, long *zp)反汇编的结果,下面说法正确的是()

    gv0rd.png

    A. 从汇编代码看出,decode1的参数先入栈的是zp

    B. 从汇编代码看出,decode1的参数先入栈的是xp

    C. 函数功能等价于 t=x; x=y; y=z; z=t;

    D. 函数功能等价于 x=y; y=z; z=x;

    【错选】B C

    【答案】C

  3. 对于图中内存地址和寄存器的值,下面说法正确的是()

    gvwKH.png

    A. %rax的值是0x100

    B. (%rax)的值是0x100

    C. (%rax)的值是0x104

    D. (%rax)的值是0xFF

    E. 4(%rax)的值是0xAB

    F. (%rax,%rcx,4)的值是0xAB

    G. (%rax,%rcx,4)的值是0x104

    【错选】A D E

    【答案】A D E F

    【解析】参考课本p121

CH08

  1. 有关exec系列函数,下面说法正确的是()

    A. 可以用char[][] 来传递argv

    B. 进程调用了exec系列函数后,pid会变

    C. 进程调用了exec系列函数后,代码会改变

    D. system()和exec系列等价

    E. exec系列函数中带e的要传入环境变量参数

    F. exec系列函数中带v的要传入环境变量参数

    【错选】A C E

    【答案】C E

    【解析】不能用char[][] 来传递argv,结尾的0(null)无法处理;system=fork+exec+wait;

  2. 有关wait类系统调用,说法正确的是()

    A. wait(&status) 等价于waitpid(-1, &status, 0)

    B. 父进程中执行waitpid, 等待集合中的所有子进程结束了才返回

    C. 父进程中执行waitpid, 等待集合中的任一子进程结束了才返回

    D. 子进程中的退出状态在wait的status参数返回

    【错选】A B D

    【答案】A C D

    【解析】参考课本p516 517 518

  3. 有关fork(),下面说法正确的是()

    A. 一次调用,两次返回

    B. 子进程中,fork()返回子进程PID

    C. 子进程可以读写父进程中打开的文件

    D. 子进程和父进程的用户级虚拟地址空间相同但独立

    【错选】A D

    【答案】A C D

    【解析】参考课本p514

  4. 关于代码 int main(){} 说法正确的是()

    A. 返回值是0

    B. 返回值不确定

    C. 会调用exit(0)

    D. 返回值大于0

    E. 上面代码运行完,在命令行中运行echo $? 的值是0

    【错选】A E

    【答案】A C E

    【解析】main中不调用exit,会补上exit(0)

  5. 用户进程可以通过()访问内核代码和数据

    A. 特权指令

    B. 系统调用

    C. 模式位

    D. 程序计数器

    【错选】C

    【答案】B

    【解析】参考课本p510

  6. 进程上下文包括程序的( )

    A. 代码和数据

    B. 栈

    C. 通用寄存器中的内容

    D. 程序计数器

    E. 环境变量

    F. 打开的文件描述符的集合

    【错选】B C D F

    【答案】A B C D E F

    【解析】参考课本p508

  7. Linux中,信号(Signal)是一种()异常控制流。

    A. 硬件层

    B. 操作系统层

    C. 用户层

    D. 网络层

    【错选】B

    【答案】C

    【解析】参考课本p501

结对及互评

本周结对学习情况

  • 20155323
  • 结对学习内容
    • 教材第1章 计算机系统漫游

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20

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

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

  • 计划学习时间:5小时

  • 实际学习时间:2小时

参考资料

原文地址:https://www.cnblogs.com/crazymosquito/p/7967495.html