重庆市住房和城乡建设部网站,沧州万网信息技术有限公司,网页设计与网站建设标准教程,微信笔记转wordpress2017-2018-1 20155213 《信息安全系统设计基础》第十一周学习总结 【学习内容:第九章——虚拟存储器】 一、课本内容梳理 1.虚拟存储器 作用#xff1a; 将主存看作是一个存储在磁盘上的地址空间的高速缓存#xff0c;在主存中只保护活动的区域#xff0c;并根据需要在磁盘和…2017-2018-1 20155213 《信息安全系统设计基础》第十一周学习总结 【学习内容:第九章——虚拟存储器】 一、课本内容梳理 1.虚拟存储器 作用 将主存看作是一个存储在磁盘上的地址空间的高速缓存在主存中只保护活动的区域并根据需要在磁盘和主存之间来回传送数据为每个进程提供了一致的地址空间从而简化了存储器管理保护了每个进程的地址空间不被其它进程破坏 地位 虚拟存储器是中心的它是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的交互中心虚拟存储器是强大的它可以创建和销毁存储器片、可以映射存储器片映射到磁盘某个部分等等虚拟存储器若操作不当则十分危险2.虚拟存储器的基本思想 允许每个数据对象有多个独立的地址其中每个地址都选自不同的地址空间比如虚拟地址空间或者是物理地址空间。 3.虚存如何作为缓存工具 理念 首先VM上被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。每个字节都有一个唯一的虚拟地址这个虚拟地址是作为到数组的索引的。其次VM系统将虚拟存储器分割为大小固定的虚拟页每个虚拟页的大小为P2^p字节类似地物理存储器被分割为物理页也叫做页帧大小也为P字节 虚存页面集合 未分配的VM系统没有将它们与任何数据关联起来也不占用任何磁盘空间缓存的当前缓存在物理存储器中的已分配的页未缓存的没有还存在物理存储器中的已分配页4.页表 作用将虚拟页映射到物理页。每次地址翻译硬件将一个虚拟地址转换为物理地址时都会读取页表。操作系统负责维护页表中的内容。结构页表就是一个页表条目PTE数组虚拟地址空间中的每个页在页表中一个固定偏移量处都有一个PTE。为了我们的目的我们假设每个PTE是由一个有效位和一个n位的地址字段组成的。有效位表明了该物理页的起始位置这个物理页中缓存了该虚拟页。5.缺页 DRAM缓存不命中称为缺页。概念 在存储器的习惯说法中块被称为页在磁盘和存储器之间传送页的活动叫做交换或者页面调度页从磁盘换入DRAM和从DRAM换出磁盘一直等待到不命中发生的时候才换入页面这种策略被称为按需页面调度处理过程 缺页异常调用内核中的缺页异常处理程序该程序会选择一个牺牲页将其换出内存内核从磁盘中拷贝需要的条目到牺牲页之前所在的位置随后返回当异常处理程序返回之后它会再次启动导致缺页的指令该指令会把导致缺页的虚拟地址重发送到地址翻译硬件此时页面命中6.地址翻译 形式上说地址翻译是一个N元素的虚拟地址空间VAS中的一个元素和一个M元素的物理地址空间(PAS之间的映射过程 CPU中的一个控制寄存器页表基址寄存器指向当前页表n位的虚拟地址包括以下两个部分一个p位的虚拟页面偏移和一个n-p位的虚拟页号MMU用后者选择适当的PTE再将物理页号和虚拟地址中的VPO串联起来得到物理地址因为物理和虚拟页面都是P字节的所以物理页面偏移和VPO是相同的7.linux虚拟存储器系统 linux为每个进程维持了一个单独的虚拟地址空间其中内核虚拟存储器位于用户栈之上内核虚拟存储器包含内核中的代码和数据结构还有一些被映射到一组连续的物理页面主要是便捷地访问特定位置比如执行I/O操作的时候需要的位置linux将虚拟存储器组织成一些区域也叫做段的集合。一个区域就是已经存在的已分配的虚拟存储器的连续片 意义允许虚拟地址空间有间隙内核不用记录那些不存在的页这样的页也不用占用存储器区域结构 vm_start:指向这个区域的起始处vm_end:指向这个区域的结束处vm_prot:描述这个区域内所包含的所有页的读写许可权限vm_fags:描述这个区域内的页面是与其他进程共享的还是这个进程私有的等等vm_next:指向链表的下一个结构8.共享对象私有对象比较研究 引入一个对象可以被映射到虚拟存储器的一个区域要么作为共享对象要么作为私有对象。 如果一个进程将一个共享对象映射到它的虚拟地址空间的一个区域内那么进程对这个区域的任何写操作对其他也把这个共享对象映射到自己的虚拟地址空间的进程来说也是可见的【无论对象被映射到多少个共享区域中在物理存储器中也只需要该对象的一个拷贝】对于一个映射到私有对象的区域所做的改变对于其他进程来说是不可见的并且进程对这个区域所做的任何写操作都不会反映在磁盘上的对象中 深入 私有对象通过写时拷贝的巧妙技术被映射到虚拟存储器中对于每个映射私有对象的进程相应私有区域的页表条目都被标记为只读并且区域结构被标记为私有对象的写时拷贝只要没有进程试图写它自己的私有区域它们就可以继续共享只要有一个进程试图去写私有区域内的某个页面那么这个写操作就会触发一个保护故障当故障处理程序注意到保护异常是由于进程试图写私有的写时拷贝区域中的一个页面而引起的时候它就会在物理存储区域中创建这个页面的一个新的拷贝更新页表条目指向这个新的拷贝然后恢复其可写权限9.垃圾收集 概念垃圾收集器是一种动态存储分配器它自动释放程序不再需要的已分配块。这些块称为垃圾。自动回收的过程就叫做垃圾收集。垃圾收集器定期地识别垃圾块并相应地调用free将这些块放回到空闲链表中过程 垃圾收集器将整个存储器视为一张有向可达的图图的节点被分为一组根节点和一组堆节点每个节点对应于堆中的一个已分配的块。当存在任意一条从根节点除法并到达p的有向路径的时候我们说p是可达的在任何时刻不可达节点对应于垃圾是不可再被回收利用的。垃圾回收器的角色是维护可达图的某种表示并通过释放不可达节点将它们返回给空闲链表来定期回收它们。无论何时需哟堆空间应用会用通常的方式调用malloc函数如果malloc找不到一个合适的空闲块那么就会调用垃圾收集器希望能够回收一些垃圾到空闲链表二、课后练习题 1.练习题9.3 给定一个32位的虚拟地址空间和一个24位的物理地址对于下面的页面大小P确定VPN,VPO,PPN,PPO的位数 【补充:VPN——虚拟页号VPO——虚拟页面偏移量PPN——物理页号PPO——物理页面偏移量】 【理解我们有32个虚拟地址位和24个物理地址位页面大小是1KB这意味着对于VPO和PPO都需要10位去区分每个页面内这2^10个具体的单位那么剩下的位分别是VPNPPN】 P 1KB——VPN 22,VPO 10,PPN 14,PPO 10 P 4KB——VPN 20,VPO 12,PPN 12,PPO 12 2.练习题9.5 编写一个C语言程序mmapcopy.c使用mmap将任意一个大小的磁盘文件拷贝到stdout输入文件的名字必需作为一个命令行参数来传递 【答案】 #include csapp.h
void mmapcopy(int fd,int size)
{char *bufp;bufp Mmap(NULL,size,PROT_READ,MAP_PRIVATE,fd,0);Write(1,bufp,size);return;
}
int main(int argc,char **argv)
{struct stat stat;int fd;if(argc !2)//因为传进来的参数应该有两个一个是文件名题目要求用命令行传递第二个是{printf(usage:%s ,lt;filenamegt;\n,argv[0]);exit(0);}fd Open(argv[0],O_RDONLY,0);fstat(fd,amp;stat);mmapcopy(fd,stat.st_size);exit(0);
} 代码托管 结对及互评 结对队友20155303 其他感悟、思考等可选 这周学习了新的处理器环境挺受用的也理解了ISA是处理器设计者和编译器编写者的抽象层。 学习进度条 代码行数新增/累积博客量新增/累积学习时间新增/累积重要成长目标5000行15篇400小时第一周177/1771/110/10第三周308/4852/212/22第五周277/7622/410/32第六周567/13291/515/47第七周22/13511/610/57第九周1645/29963/920/77第十一周689/36852/1120/97尝试一下记录「计划学习时间」和「实际学习时间」到期末看看能不能改进自己的计划能力。这个工作学习中很重要也很有用。 耗时估计的公式 YXX/N YX-X/N训练次数多了X、Y就接近了。 参考软件工程软件的估计为什么这么难软件工程 估计方法 计划学习时间:XX小时实际学习时间:XX小时改进情况(有空多看看现代软件工程 课件 软件工程师能力自我评价表) 参考资料 《深入理解计算机系统V3》学习指导...转载于:https://www.cnblogs.com/elevator/p/7966761.html