20145230 《信息安全系统设计基础》第十四周学习总结
20145230 《信息安全系统设计基础》第十四周学习总结
教材学习内容总结
-
虚拟存储器的三个重要能力:
-
它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,高效的使用了主存。
-
它为每个进程提供了一致的地址空间,从而简化了存储器管理。
-
它保护了每个进程的地址空间不被其他进程破坏。
-
地址空间
-
地址空间是一个非负整数地址的有序集合。
-
线性地址空间
地址空间中的整数是连续的。 -
虚拟地址空间
-
CPU从一个有 N=2^n 个地址的地址空间中生成虚拟地址,这个地址空间成为称为虚拟地址空间。
地址空间的大小
-
由表示最大地址所需要的位数来描述。
-
N=2^n:n位地址空间
-
特别注意:主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。
-
支持虚拟存储器的处理器通过使用一种叫做虚拟寻址的间接形式来引用主存,处理器产生一个虚拟地址,在被发送到主存之前,这个地址被翻译成一个物理地址。
-
DRAM缓存的组织结构
-
不命中处罚很大
-
是全相联的——任何虚拟页都可以放在任何的物理页中
-
替换算法精密
-
总是使用写回而不是直写
-
虚拟存储器作为存储器保护的工具
-
通过在PTE上添加一些额外的许可来控制对一个虚拟页面的内容访问。
-
PTE的三个许可位:
-
SUP:表示进程是否必须运行在内核模式下才能访问该页
-
READ:读权限
-
WRITE:写权限
- 如果设置了有效位:
- 地址字段表示DRAM中相应的物理页的起始位置,这个物理页中缓存了该虚拟页
- 如果没有设置有效位:
-
空地址:表示该虚拟页未被分配。
-
不是空地址:这个地址指向该虚拟页在磁盘上的起始位置。
-
动态存储器分配器
-
当运行时需要额外虚拟存储器时,使用动态存储器分配器维护一个进程的虚拟存储器区域。分配器有两种风格。
-
显示分配器:要求应用显式地释放任何已经分配的块。
-
隐式分配器:要求分配器检测一个已分配块何时不再被程序所使用,就释放这个块。也叫做垃圾收集器。
缺页
- 缺页:就是指DRAM缓存不命中。
- 缺页异常:会调用内核中的缺页异常处理程序,选择一个牺牲页。
- 页:虚拟存储器的习惯说法,就是块
- 交换=页面调度:磁盘和存储器之间传送页的活动
- 按需页面调度:直到发生不命中时才换入页面的策略,所有现代系统都使用这个
多级页表
-
多级页表——采用层次结构,用来压缩页表。
-
如果一级页表中的一个PTE是空的,那么相应的二级页表就根本不会存在;
-
只有一级页表才需要总是在主存中,虚拟存储器系统可以在需要时创建、页面调入或调出二级页表,只有最经常使用的二级页表才缓存在主存中。
-
共享对象
-
共享对象对于所有把它映射到自己的虚拟存储器进程来说都是可见的。
-
即使映射到多个共享区域,物理存储器中也只需要存放共享对象的一个拷贝。
-
私有对象
-
私有对象运用的技术:写时拷贝
-
在物理存储器中只保存有私有对象的一份拷贝
-
隐式空闲链表
-
堆块的格式:由一个字的头部,有效荷载,和可能的额外填充组成。
-
将堆组织成一个连续的已分配块和空闲块的序列:
-
空闲块通过头部中的大小字段隐含地连接着,分配器可以通过遍历堆中所有的块,从而间接地遍历整个空闲块的集合。
-
垃圾收集
-
垃圾收集器是一种动态存储分配器。,自动释放程序已经不再需要的已分配块(垃圾)。
-
垃圾收集器将存储器视为一张有向可达图,图的节点被分配为一组根节点和一组堆节点。
代码实践部分
- http://www.cnblogs.com/kobe20145230/p/6160178.html#3581075 http://www.cnblogs.com/kobe20145230/p/6160178.html#3581075
- 上周已经在Linux上编译运行了这些代码。
本周代码截图
心得体会
这一周应该算差不多是最后一周新的书中知识的学习了吧,感觉第九章的知识和我们这学期一门叫操作系统课的一些知识差不多,所以理解起来相对还是较容易。但这个和那门课的区别就在于还需要我们更加理解其中的一些结构,所以更加复杂。还有就是知道错误后我现在有更加强烈的欲望去解决它并且改变它,而不是像以前一样得过且过,感觉这也算是自己学了这么久的《深入理解计算机系统》这门课的收获吧!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 2000行 | 20篇 | 400小时 | |
第一周 | 2/2 | 20/20 | 初步了解Linux的一些基本命令 | |
第二周 | 1/3 | 15/35 | 了解vim编辑器 | |
第三周 | 86/86 | 1/4 | 25/60 | 了解了信息的表示和处理 |
第五周 | 79/79 | 1/5 | 30/90 | 了解了程序的机器级表示 |
第七周 | 84/305 | 1/7 | 20/140 | 了解存储器的层次结构 |
第八周 | 0/305 | 2/9 | 30/170 | 期中总结 |
第九周 | 133/438 | 2/11 | 30/200 | 了解了Linux操作系统提供的基本I/O服务 |
第十周 | 420/858 | 2/13 | 30/230 | 对常用指令的代码进行了分析调试 |
第十一周 | 507/1365 | 2/15 | 30/260 | 了解异常控制流 |
第十二周 | 0/1365 | 2/17 | 20/280 | 了解了指针的内容 |
第十三周 | 437/1802 | 1/18 | 30/310 | 了解了多线程的内容 |
第十四周 | 0/1802 | 2/20 | 20/330 | 了解了虚拟存储的内容 |