2017-2018-1 20155205 《信息安全系统设计基础》第十一周学习总结
2017-2018-1 20155205 《信息安全系统设计基础》第十一周学习总结
学习目标
1.理解虚拟存储器的概念和作用
2.理解地址翻译的概念
3.理解存储器映射
4.掌握动态存储器分配的方法
5.理解垃圾收集的概念
6.了解C语言中与存储器有关的错误
教材学习内容总结
物理和虚拟寻址
- 使用虚拟寻址时,CPU通过生成一个虚拟地址(Virtual Address,VA)来访问主存,这个虚拟地址在被送到存储器之前先转换成适当的物理地址。将一个虚拟地址转换为物理地址的任务叫做地址翻译(address translation)。
虚拟存储器作为缓存的工具
在任意时刻,虚拟页面的集合都分为三个不相交的子集:
- 未分配的:VM系统还未分配(或者创建)的页。未分配的块没有任何数据和它们相关联,因此也就不占用任何磁盘空间。(没有调用malloc或者mmap的)
- 缓存的:当前缓存在物理存储中的已分配页。(已经调用malloc和mmap的,在程序中正在引用的)
- 未缓存的:没有缓存在物理存储器中的已分配页。(已经调用malloc和mmap的,在程序中还没有被引用的)
存储器映射(Windows下也有类似的机制,名叫内存映射)
Linux(以及其他一些形式的Unix)通过将一个虚拟存储器区域与一个磁盘上的对象(object)关联起来,以初始化这个虚拟存储器区域的内容,这个过程称为存储器映射(memory mapping)。虚拟存储器区域可以映射到两种类型的对象的一种
:
(1)Unix文件上的普通文件
(2)匿名文件
垃圾回收
1、垃圾收集器将存储器视为一张有向可达图(reachability graph)。
2、Mark%Sweep垃圾收集器由标记(mark)阶段和清除(sweep)阶段组成。标记阶段标记出根节点的所有可达的和已分配的后继,而后面的清除阶段释放每个被标记的已分配块。典型地,块头部中空闲的低位中的一位来表示这个块是否被标记了。
教材学习中的问题和解决过程
- 问题1:malloc()到底从哪里得到的内存空间?
- 问题1解决方案:查资料从C语言的malloc()和free()函数原理【整理】 - CSDN博客得知,答案是从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。
代码调试中的问题和解决过程
本周未遇到代码调试问题。
代码托管
上周考试错题总结
- 错题1:
Unix/Linux中,对于代码fd=open("foo",O_WRONLY,0766),umask=022,下面说法正确的是()
A . 进程对foo是只写的
B . 同组成员能写foo
C . 使用者可以执行foo
D . 任何人都可以写foo
- 分析:选A、C;因为九个权限可以用0777表示,07(使用者)7(同组成员)7(其他人)
7(111)(读:写:执行),文件实际权限是mode&~mask
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
- [20155218](博客链接)
- 结对照片
- 结对学习内容
- XXXX
- XXXX
- ...
其他(感悟、思考等,可选)
这一章重点是掌握书本上的知识。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 65/65 | 1/1 | 10/10 | |
第三周 | 120/185 | 2/3 | 15/15 | |
第五周 | 375/560 | 3/6 | 14/29 | |
第六周 | 287/847 | 1/7 | 14/43 | |
第七周 | 575/1422 | 2/8 | 13/56 | |
第八、九周 | 500/1922 | 3/11 | 30/86 | |
第十、十一周 | 401/2323 | 2/13 | 30/116 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:12小时
-
实际学习时间:12小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)