虚拟存储器2
最佳( Optimal)置换算法
最佳置换算法足由Belady于1966年提出的一种理论上的算法。其所选择的被淘汰页 面将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算 法通常可保证获得最低的缺页率。但由于人们目前还无法预知,一个进程在内存的若干个 页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以 利用该算法去评价其它算法。
现举例说明如下。 假定系统为某进程分配了三个物理块,并考虑有以下的页面号引用:
7,0, 1, 2,0,3, 0, 4, 2, 3, 0,3, 2, 1, 2,0, 1, 7, 0, 1
进程运行时,先将7, 0, 1三个页面装入内存以后,当进程要访问页面2时,将会产生缺页中断。此时OS根据最佳置换算法将选择页面7予以淘汰。这是因为页面0将作为第5个被 访问的页面,页面1是第14个被访问的页面,而页面7则要在第18次页面访问时才需调入。下次访问页面0时,因它已在内存而不必产生缺页中断。当进程访问页面3时,又将引起页 面1被淘汰;因为,它在现有的1,2, 0三个页面中,将是以后最晚才被访问的。图5-3示 出了采用最佳置换算法时的置换图。由图可看出,采用最佳置换算法发生了6次页面置换。
最少使用 (Least Frequently Used, LFU)置换算法
在采用LFU算法时,应为在内存中的每个页面设置一个移位寄存器,来记录该页面 被访问的频率。该置换算法选择在最近时期使用最少的页面作为淘汰页。由于存储器具有 较高的访问速度,例如100ns,在1ms时间内可能对某页面连续访问成千上万次,因此, 直接利用计数器来记录某页被访问的次数是不现实的,只能采用较大的时间间隔来记录对 存储器某页的访问。在敁少使用®换算法中采用了移位寄存器方式。毎次访问某页时,便将该移位寄存器的最高位置1,再每隔一定时间(例如100 ms)右移一次。这样,在最近一段 时间使用最少的页面将是二进制最小的页。 LFU置换算法的页面访问图,与LRU置换算法的 访问图完全相同;或者说,利用这样一套硬件既可实现LRU算法,又可实现LFU算法。 应该指出,这种算法并不能真正反映出页面的使用情况,因为在每一时间间隔内,只是用 寄存器的一位来记录页的使用情况,因此,在该时间间隔内,对某页访问一次和访问1000 次是完全等效的。
Clock置换算法
- 简单的Clock置换算法
当利用简单Clock算法时,只需为每页设質一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位被置 1。置换算法在选择一 页淘汰时,只需检査页的访问位。如果是0,就选择该页换出;若为1,则重新将它置0, 暂不换出,给予该页第二次驻留内存的机会,再按照FIFO算法检査下一个页面。当检查 到队列中的最后一个页面时,若其访问位仍为1,则再返回到队首去检査第一个页面。图 5-8示出了该算法的流程和示例。由于该算法是循环地检杳各页面的使用情况,故称为Clock 算法。但因该算法只有一位访问位,只能用它表示该页是否已经使用过,而置换时是将未 使用过的页面换出去,故又把该算法称为最近未用算法或NRU算法。
- 改进型Clock置换算法
在将一个页而换出时,如果该页已被修改过,便须将该页重新写回到磁盘上;但如果 该页未被修改过,则不必将它拷回磁盘。换而言之,对于修改过的页面,在换出时所付出 的开销比未修改过的页面大,或者说, S换代价大。在改进型 Clock算法中,除须考虑页面的使用愔况外,还须再增加一个因索——S换代价。这样,选择页面换出时,既要是未使用过的页面,又要是未被修改过的页面。把同时满足这两个条件的页面作为首选淘汰的页面。由访问位A和修改位M可以组合成下面四种类型的页面:
1类(A=0, M=0):表示该页最近既未被访问,又未被修改,是最佳淘汰页。
2类(A=0, M=丨):表示该页最近未被访问,但已被修改,并不是很好的淘汰页。
3类(A=l,M=0):表示最近己被访问,怛未被修改,该页有可能再被访问。
4类(A=l,M=丨):表示最近已被访问且被修改,该页可能再被访问。
优先级:00-->01-->10-->11
LRU置换算法的硬件支持
- 寄存器
为了记录某进程在内存中各个页的使用情况,须为每个在内存中的页面配置一个移位寄存器,可表示为R=,
当进程访问某物理块时,要将相应寄存器的位置成1。此时,定时信号将每隔一 定时间(例如100 ms)将寄存器右移一位。如果我们把n位寄存器的数看作是一个整数,那么,具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。图5-6示出了某 进程在内存中具有8个页面、为每个内存页面配—个8位寄存器时的LRU访问情况。这 里,把8个内存页面的序号分别定为1〜8.由图可以看出,第3个内存页面的R值最小, 当发生缺页时,应首先将它置换出去。
- 栈
利用了一个特殊的栈保存当前使用的各个页面的页面号,每当进程访问某页面时,便将该页面的页面号从栈中移除,将它压入栈顶,因此,栈顶始终是最新被访问的页面编号,栈底是最久未使用页面的编号。
5.4 “抖动”与工作集
1.抖动
频繁的发生缺页现象。
2.工作集
工作集是指在某段时间间隔 ∆ 里,进程实际要访问的页面的集合。
- 预防方法
(1)局部置换
(2)引入工作集
(3)“L=S”
(4)挂起几个进程
5.5 请求分段存储管理方式
1.段表项
2.地址变换
- 分段的共享和保护
- 基于段表
- 保护
(1)越界检查
(2)存取控制检查
(3)环保护机构