5.4 虚存技术
兼顾覆盖和交换的优点,只对进程的部分内容(指页,而不是指线程)进行交换。
一、基本概念
1.程序的局部性原理(时间和空间都要)
指程序在执行过程中的一个较短时期,所执行的指令地址,和指令的操作数地址,都局限于一定的区域。
局部性越好的程序,就越适合虚拟内存技术。
2.特征
大的用户空间(硬盘大,虚存就大)
部分交换(相比于交换技术,粒度小得多)
不连续性(物理内存分配不连续,虚拟地址空间使用也不连续)
--------------------------------------------------
二、具体实现
在页式内存管理的基础上,增加请求调页和页面置换功能。
1.请求调页:程序运行只需要装入部分页就可以,在需要某些外存数据时,请求调页。
2.页面置换:内存不够时,把不需要的页换出去。
--------------------------------------------------
三、页表表项
首先,浅蓝色的部分只是逻辑页号page number,应该是放在上一级页表里或者由CPU或MMU直接比对。
这个图应该分为两部分,也就是page number,和右边的页表项内容,Flag + frame number。(参考4.3节)
标志位:
驻留位:表示是否有效(有没有对应的物理地址空间)。
保护位:可以进行什么类型访问。
修改位(脏位):如果修改过,就是脏页。如果没修改过,换出时就可以直接释放,因为硬盘中的那份还在,而且完全一样。
访问位:表示是否被经常访问,如果否,那么页面置换就换它出去。
--------------------------------------------------
四、缺页异常的处理过程
1.检查内存中是否有空闲的物理页,有则直接分配一个物理页帧f并且跳到4,没有则跳到2,多出2和3步。
4.把需要访问的页p装入到物理页面f中。
5.修改p对应的页表项内容,驻留位置为1,页帧号page num置为f。
6.重新运行被中断的指令。
--------
以下是多出的2,3步骤:
2.用页面置换算法,把其中一页q替换出去,也就是copy到硬盘并清空(如果不是脏页也就不用copy了)
(所以置换也只是置换逻辑页,而实际上的实现却是仍在在持有原本的物理页,改变的只是映射关系)
3.修改被换出去的页q对应的页表项,把驻留位设为0。
--------------------------------------------------
五、后备存储(二级存储) Backing Store(一共四类)
有些数据、指令、动态链接库都会放在硬盘,用到它们的时候才从硬盘读入。
另外,硬盘还会专门有一个分区,换入换出分区(swap),用于存放程序运行时动态生成的一些数据(不属于前面的数据、指令、动态链接库)
--------------------------------------------------
六、有效存储器访问时间 effective memory access time(EAT)
主要取决于p,而p则取决于程序的局部性。