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 long
、unsigned long int
、long unsigned
、long unsigned int
均等价
- 寻址和字节顺序
- 小端法:最低有效字节在最前面
- 大端法:最高有效字节在最前面
- 表示字符串
- 表示代码
- 布尔代数简介
- 布尔环中加法运算是,每个元素的加法逆元都是它自己本身,即对于任何值a,**aa=0**
- C语言中的位级运算(按位布尔运算)
- |
- &
- ~
- ^
- C语言中的逻辑运算(逻辑运算认为所有非零的参数都表示TRUE(返回1),而参数0表示FALSE(返回0))
- ||
- &&
- !
- C语言中的移位运算
- 左移
- 右移
- 逻辑右移:在左端补k个0
- 算术右移:在左端补k个最高有效位的值
- 整数表示
- 整型数据类型
- 无符号数的编码
- 补码编码
- 有符号数和无符号数之间的转换
- C语言中的有符号数与无符号数
- 扩展一个数字的位表示
- 截断数字
- 关于有符号数与无符号数的建议
- 整数运算
- 无符号加法
- 补码加法
- 补码的非
- 无符号乘法
- 补码乘法
- 乘以常数
- 除以2的幂
- 关于整数运算的最后思考
- 浮点数
- 二进制小数
- IEEE浮点表示
- 数字示例
- 舍入
- 浮点运算
- C语言中的浮点数
- 从
int
转成float
:数字不会溢出,但可能被舍入 - 从
int
或float
转成double
:能保留精确的数值 - 从
double
转成float
:值可能溢出成+∞或-∞,还可能被舍入 - 从
float
或double
转成int
:值将会向零舍入
- 从
代码调试中的问题和解决过程
无法打开Y86-64模拟器界面
解决方法
这是Y86-64模拟器的Makefile中配置GUI相关路径错误导致的,解决方法是将两个GUI路径分别设置为TKLIBS=-L/usr/lib -ltk8.5 -ltcl8.5
和TKINC=-I/usr/include/tcl8.5
即可,如下图:
成功打开Y86-64模拟器:
代码托管
上周考试错题总结
CH03
-
假设用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
-
以下代码是将void decode1(long *xp, long *yp, long *zp)反汇编的结果,下面说法正确的是()
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
-
对于图中内存地址和寄存器的值,下面说法正确的是()
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
-
有关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;
-
有关wait类系统调用,说法正确的是()
A. wait(&status) 等价于waitpid(-1, &status, 0)
B. 父进程中执行waitpid, 等待集合中的所有子进程结束了才返回
C. 父进程中执行waitpid, 等待集合中的任一子进程结束了才返回
D. 子进程中的退出状态在wait的status参数返回
【错选】A B D
【答案】A C D
【解析】参考课本p516 517 518
-
有关fork(),下面说法正确的是()
A. 一次调用,两次返回
B. 子进程中,fork()返回子进程PID
C. 子进程可以读写父进程中打开的文件
D. 子进程和父进程的用户级虚拟地址空间相同但独立
【错选】A D
【答案】A C D
【解析】参考课本p514
-
关于代码 int main(){} 说法正确的是()
A. 返回值是0
B. 返回值不确定
C. 会调用exit(0)
D. 返回值大于0
E. 上面代码运行完,在命令行中运行echo $? 的值是0
【错选】A E
【答案】A C E
【解析】main中不调用exit,会补上exit(0)
-
用户进程可以通过()访问内核代码和数据
A. 特权指令
B. 系统调用
C. 模式位
D. 程序计数器
【错选】C
【答案】B
【解析】参考课本p510
-
进程上下文包括程序的( )
A. 代码和数据
B. 栈
C. 通用寄存器中的内容
D. 程序计数器
E. 环境变量
F. 打开的文件描述符的集合
【错选】B C D F
【答案】A B C D E F
【解析】参考课本p508
-
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小时