2017-2018-1 20155338 《信息安全系统设计基础》第十三周学习总结
学习任务
- 找出全书你认为最重要的一章,深入重新学习一下,要求(期末占10分):
- 完成这一章所有习题
- 详细总结本章要点
- 给你的结对学习搭档讲解你的总结并获取反馈
- 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《信息安全系统设计基础》第十三周学习总结”,博客(随笔)要通过作业提交,截至时间本周日 23:59。
选择章节和要点
-
我认为本书最重要的是第九章——虚拟内存
-
本章的要点我认为是动态内存分配,和垃圾收集。
完成所有习题:
9、1
虚拟地址位数(n) | 虚拟地址数 (N) | 最大可能的虚拟地址 |
---|---|---|
8 | 28 = 256 | 28-1 = 255 |
16 | 216 = 64K | 216-1 = 64K-1 |
32 | 232 = 4G | 232-1 = 4G-1 |
48 | 248 = 256T | 248-1 = 256T-1 |
64 | 264 = 16384P | 264-1 = 16384P-1 |
9、2
n | P =2p | PTE的数量 |
---|---|---|
16 | 4K | 16 |
16 | 8K | 8 |
32 | 4K | 1M |
32 | 8K | 512K |
9、3
P | VPN位数 | VPO位数 | PPN位数 | PPO位数 |
---|---|---|---|---|
1KB | 22 | 10 | 14 | 10 |
2KB | 21 | 11 | 13 | 11 |
4KB | 20 | 12 | 12 | 12 |
1KB | 19 | 13 | 11 | 13 |
9、4
A:虚拟地址格式:00 0011 1101 0111
B
参数 | 值 |
---|---|
VPN | 0xf |
TLB索引 | 0x3 |
TLB标记 | 0x3 |
TLB命中?(是/否) | 是 |
缺页?(是/否) | 否 |
PPN | 0xd |
C、物理格式地址:0011 0101 0111
D、
参数 | 值 |
---|---|
CO | 0x3 |
CI | 0x5 |
CT | 0xd |
高度缓存命中?(是/否) | 是 |
告诉缓存字节返回 | 0x1d |
9、6
请求 | 块大小(十进制字节) | 块头部(十六进制) |
---|---|---|
malloc(1) | 8 | 0x9 |
malloc(5) | 16 | 0x11 |
malloc(12) | 16 | 0x11 |
malloc(13) | 24 | 0x19 |
9、7
对其要求 | 已分配块 | 空闲块 | 最小块大小(字节) |
---|---|---|---|
单字 | 头部和脚部 | 头部和脚部 | 12 |
单字 | 头部,没有脚部 | 头部和脚部 | 8 |
双字 | 头部和脚部 | 头部和脚部 | 16 |
双字 | 头部,没有脚部 | 头部和脚部 | 8 |
本章要点详述
动态内存分配
malloc和free函数
系统调用malloc函数,从堆中分配块:
void *malloc(size_t size);
成功返回指针,指向大小至少为size字节的存储器块,失败返回NULL
系统调用free函数来释放已分配的堆块:
void free(void *ptr);
无返回值
分配器的要求和目标
要求:
处理任意请求序列
·立即响应请求
·只使用堆
·对齐块
·不修改已分配的块
目标:
最大化吞吐率(吞吐率:每个单位时间里完成的请求数)
·最大化存储器利用率——峰值利用率最大化
碎片
-
内部碎片:发生在一个已分配块比有效载荷大的时候,易于量化
-
外部碎片:发生在当空闲存储器合计起来足够满足一个分配请求,但是没有一个单独的空间块足以处理这个请求时发生。难以量化,不可预测
隐式空闲链表
格式:由一个字的头部,有效荷载,和可能的额外填充组成:
将堆组织成一个连续的已分配块和空闲块的序列:
垃圾收集
-
垃圾收集器是一种动态存储分配器,自动释放程序已经不再需要的已分配块(垃圾)。
-
垃圾收集器将存储器视为一张有向可达图,图的节点被分配为一组根节点和一组堆节点。
C程序中常见的与存储器有关的错误
误解指针运算:忘记了指针的算术操作是以它们指向的对象的大小为单位来进行,而这种大小单位不一定是字节
引起存储器泄露:当不小心忘记释放已分配块,而在堆里创建了垃圾时,就会引起存储器泄露
读未初始化的存储器:bass存储器位置总是被加载器初始化为0
间接引用坏指针:在进程的虚拟地址空间中有较大的洞,没有映射到任何有意义的数据,如果试图引用一个指向这些洞的指针,操作系统就会以段异常来终止程序
给你的结对学习搭档讲解你的总结并获取反馈
实验测试反馈:
1、实验5:使用openssl进行混合密码系统加密时,会话秘钥的分发最可能用到()
A .
AES_encrypt
B .
RSA_public_encrypt
C .
AES_decrypt
D .
RSA_private_decrypt
E .
AES_cbc_encrypt
F .
RSA_private_encrypt
G .
RSA_public_decrypt
正确答案: B D 我的答案: A E F
解析:非对称算法的应用:
秘钥分发:用对方公钥加密,对方用自己的私钥解密
签名验签:签名主要是用自己私钥加密,对方用自己公钥验签
原因:当时AES和RSA对于混合密码系统加密的对应关系没有理解特别清楚。
2、实验3中,在Ubuntu虚拟机中编译多线程程序时,gcc使用()选项
A .-g
B .-lthread
C .-pthread
D .-lpthread
正确答案: C 你的答案: D
解析:实际环境中只有-pthread可用
原因:当时记得在实验中编译的语句里有过-L,所以选择了D。
3、实验2中,SM1_Crypto(miqian, 16, 0, 0, 0,mihou);语句的功能是()
A .初始化
B .加密
C .解密
D .传递秘钥
正确答案: B 你的答案: D
解析:SM1_Crypto(miqian, 16, 0, 0, 0,mihou);加密
SM1_Crypto(miqian, 16, 1, 0, 0,mihou);解密
原因:这个。。。是因为纯粹不会。。
4、实验1中使用mount命令时,会涉及到()的修改。
A ./etc/fstab
B ./etc/hosts
C ./etc/passwd
D ./etc/exports
正确答案: D 你的答案: A
解析:nfs服务器的配置,配置文件/etc/exports:
ro 该主机对该共享目录有只读权限
rw 该主机对该共享目录有读写权限
root_squash 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
no_root_squash 客户机用root访问该共享文件夹时,不映射root用户
all_squash 客户机上的任何用户访问该共享目录时都映射成匿名用户
anonuid 将客户机上的用户映射成指定的本地用户ID的用户
anongid 将客户机上的用户映射成属于指定的本地用户组ID
sync 资料同步写入到内存与硬盘中
async 资料会先暂存于内存中,而非直接写入硬盘
insecure 允许从这台机器过来的非授权访问
原因:mount命令用于加载文件系统到指定的加载点。而fstab文件的作用文件/etc/fstab存放的是系统中的文件系统信息。当时考试时记混了。
5、有关socket 接口中的connect(),下面说法正确的是()
A .这个函数用于客户端编程
B .这个函数用于服务器端编程
C .调用connect会发生阻塞,连接成功程序会继执行
D .调用connect()成功返回的文件描述符可以用来数据传输
正确答案: A C D 你的答案: A C
解析:p654
原因:我当时记得调用connect()不仅能建立连接,而且还会向服务器传送数据,但后来上网查了后,想起来connect()只能建立连接。
其余还有两道题纯粹是自己手滑。。,知道正确选项但却选错了。。。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 2000行 | 15篇 | 200小时 | |
第一周 | 150/150 | 1/1 | 17/17 | |
第二周 | 70/220 | 1/2 | 12/29 | |
第三周 | 100/320 | 1/3 | 10/39 | |
第四周 | 100/420 | 1/4 | 10/59 | |
第五周 | 80/500 | 2/6 | 22/81 | |
第六周 | 300/800 | 2/8 | 30/111 | |
第七周 | 200/1000 | 1/9 | 25/136 | |
第八周 | 500/1500 | 2/11 | 30/166 | |
第九周 | 500/2000 | 2/13 | 36/202 | |
第十周 | 100/2100 | 0/13 | 20/222 | |
第十一周 | 200/2300 | 2/15 | 35/257 | |
第十三周 | 300/2600 | 2/17 | 25/282 |