2017-2018-1 20155333 《信息安全系统设计基础》第十一周学习总结
教材学习内容总结
1、虚拟存储器提供了三个重要的能力:
-
(1)它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效的使用了主存。
-
(2)它为每个进程提供了一致的地址空间,从而简化了存储器管理。
-
(3)它保护了每个进程的地址空间不被其他进程破坏。
2、 碎片现象:造成堆利用率低的主要原因是一种碎片现象。 -
内部碎片:已分配块比有效载荷大时发生的。
-
外部碎片:是当空闲存储器合计起来满足分配请求,但是没有一个单独的空闲块足够大来处理这个请求。所以,存储器采用试图维持少量的大空闲块,而不是维持大量的小空闲块。
3、垃圾收集:
垃圾收集器将存储器视为一张有向可达图,该图的节点被分成一组根节点和一组堆节点,每个堆节点对应于堆中的一个已分配块。在任何时刻,不可达节点对应于垃圾,是不能被应用再次使用的,垃圾收集器的角色是维护可达图的某种表示,并通过不可达节点并将它们返回给空闲链表,来定期回收他们。 -
JAVA:收集器能精确的维护可达图,因此也能够回收所有垃圾。
-
C和C++:收集器不能维持可达图的精确表示,这样的收集器叫做保守的垃圾收集器,即每个可达块都被正确的标记为可达,而一些不可达节点却可能被错误的标记为可达。
4、C程序中常见的与存储器有关的错误: -
间接引用坏指针:在进程的虚拟地址空间中有较大的洞,没有映射到任何有意义的数据。如果我们试图间接引用一个指向这些洞的指针,那么操作系统就会以段异常中止程序。
最经典的错误是:scanf(“%d”,val);我们将val的值错误传给scanf,而不是&val,在这种情况下scanf将val解释为一个地址,并试图将一个字写到这个位置。 -
假设指针和它们指向的对象是相同大小的
-
误解指针运算:指针的算术操作是以它们指向的对象的大小为单位来进行的,而这种大小单位不一定是字节。
-
引用不存在的变量
-
引起存储器泄露:没有释放已经分配的块,就返回。
教材学习中的问题和解决过程
- 问题1:既然虚拟内存是在磁盘上的,为什么运行时不感觉卡顿?
- 问题1解决方案:因为程序的局部性。
- 问题2:为什么要了解虚拟存储器?
- 问题2解决方案:
- 虚拟存储器是中心。虚拟存储编辑系统的所有层面。
- 虚拟存储器是强大的。虚拟存储器给予应用程序强大的能力,可以创建和销毁存储器片(chunk)、将存储器片映射到磁盘文件的某个部分,以及其他进程共享存储器。
- 虚拟存储器是危险的。每次应用程序引用一个变量、间接引用一个指针,或者调用一个类似与malloc的动态分配的函数,就会跟虚拟存储器打交道。
- ...
代码调试中的问题和解决过程
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX
- ...
代码托管
今天运行statistic.sh脚本出现了问题,等解决了问题会把截图补上的。
上周考试错题总结
- 错题1及原因,理解情况
- 错题2及原因,理解情况
- ...
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
- [2015532](http://www.cnblogs.com/zjy1997/)
- 结对照片
- 结对学习内容
- 教材第九章
- 实验四外设驱动程序设计
- ...
其他(感悟、思考等,可选)
xxx
xxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 10/10 | 1/1 | 10/10 | |
第二周 | 80/90 | 1/2 | 15/25 | |
第三周 | 100/190 | 1/3 | 15/40 | |
第四周 | 150/340 | 1/4 | 18/58 | |
第五周 | 2/6 | 20/78 | ||
第六周 | 2/8 | 20/98 | ||
第七周 | 2124/ | 2/10 | 20/118 | |
第八周 | 2/12 | 30/148 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:25小时
-
实际学习时间:20小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)