操作系统——虚拟存储器
1月 09, 2019
1135
虚拟存储器的思想
把内存中暂时不能运行或者暂时不用的程序、数据调动外存上。或者说把程序的一部分放入内存、一部分放在外存。程序运行时,如果所需要访问的页(段)已调入内存,便可继续执行下去;但如果程序所要访问的页(段)尚未调入内存(即缺页或缺段),则程序利用 OS 所提供的请求调页(段)功能,将它们调入内存,以使进程继续执行;如果此时,内存已满,则需利用页(段)置换功能。
- 置换分类:
页面对换--请求分页存储管理(基本分页+页面对换)
分段对换--请求分段存储管理(基本分段+分段对换)
请求分页系统
基本思想
- 在基本分页基础上,增加调页功能和页面置换功能;每次调入和换出的基本单位都是长度固定的页面
硬件支持
要想在基本分页的基础上实现虚拟存储管理,需要
- 页表机制
- 缺页中断机构
请求分页系统中、每当发现要访问的页面不在内存、便产生中断通知 os 调入缺页。
要经过 保护 CPU 现场、分析中断原因、执行缺页中断程序、执行完毕恢复现场 等步骤。 - 与一般中断相比,缺页中断有着明显的不同,主要表现在以下两个方面:
(1)通常,CPU 是在一条指令执行完后,才检查是否有中断请求到达。若有,便去响应;否则,继续执行下一条指令。然而,缺页中断则是在指令执行期间,发现所要访问的指令或数据不在内存时所产生和处理的。
(2)一条指令在执行期间,可能产生多次缺页中断。
页面置换算法
最佳置换算法
- 思想:被置换的页面是以后永远不使用或以后长时间不使用的
- 举例:
系统为某个进程(有 8 个页面)只分配了 3 个物理块、进程有如下的页面号引用 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 求该进程在最佳置换算法下执行完毕缺页多少次? 中断多少次?缺页率为多少?页面置换多少次?
先进先出置换算法(FIFO first in first out)
- 思想:淘汰最先进入内存的页面、即选择在内存中驻留时间最久的页面给予淘汰。
最近最久未使用的置换算法(LRU lease recently used)
- 思想:选择和现在相比最长时间没有使用的页面进行置换。
- 硬件:
寄存器:记录某进程在内存中各页的使用情况
栈:用来保存当前使用的各个页面的页面号
CLOCK 置换算法
- LRU 算法是较好的一种算法,但由于它要求有较多的硬件支持,故在实际应用中,大多采用 LRU 的近似算法。Clock 算法就是用得较多的一种 LRU 近似算法。
- 思想:为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位被置为 1.置换算法选择一位淘汰时,只需检查页的访问位。如果是 0,就选择该页换出;若为 1,则重新将它置 0,暂不换出,而给该页第二次驻留内存的机会,在按照 FIFO 算法检查下一个页面。