01
最佳置换算法(OPT)
从主存中移出永远不再需要的页面,如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。即被淘汰页面是以后永不使用或最长时间内不再访问的页面。 最佳置换算法可以用来评价其他算法。假定系统为某进程分配了三个物理块,并考虑有以下页面号引用串: 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1 进程运行时,先将7, 0, 1三个页面依次装入内存。进程要访问页面2时,产生缺页中断,根据最佳置换算法,选择第18次访问才需调入的页面7予以淘汰。然后,访问页面0时,因为已在内存中所以不必产生缺页中断。访问页面3时又会根据最佳置换算法将页面1淘汰……依此类推。 发生缺页中断的次数为9,页面置换的次数为6。02
页表先进先出置换算法(FIFO)
最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。即优先淘汰最早进入内存的页面。 釆用FIFO算法进行页面置换,进程访问页面2时,把最早进入内存的页面7换出。 然后访问页面3时,再把2, 0, 1中最先进入内存的页换出。利用FIFO算法时进行了 12次页面置换。 FIFO算法会产生当所分配的物理块数增大而页故障数不减反增的异常现象,这是 Belady 异常。只有FIFO算法可能出现 Belady 异常。03
最近最久未使用(LRU)算法
利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为 。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。即淘汰最近最长时间未访问过的页面。 LRU性能较好,但需要寄存器和栈的硬件支持。LRU是堆栈类的算法。理论上可以证明,堆栈类算法不可能出现 Belady 异常。FIFO算法基于队列实现,不是堆栈类算法。04
时钟置换算法NRU
通过给每一个访问的页面关联一个附加位(reference bit),有些地方也叫做使用位(use bit)。他的主要思想是:当某一页装入主存时,将use bit置成1;如果该页之后又被访问到,使用位也还是标记成1。对于页面置换算法,候选的帧集合可以看成是一个循环缓冲区,并且有一个指针和缓冲区相关联。遇到页面替换时,指针指向缓冲区的下一帧。如果这页进入主存后发现没有空余的帧(frame),即所有页面的使用位均为1,那么这时候从指针开始循环一个缓冲区,将之前的使用位都清0,并且留在最初的位置上,换出该桢对应的页。 以下面这个页面置换过程为例,访问的页面依次是:1,2,3,4,1,2,5,1,2,3,4,5。主存有4个空闲的帧,每个页面对应的结构为(页面号,使用位)。1
最开始页面号1进入主存,主存里面有空闲的帧,将其使用位记成1,由于主存中之前没有页面1,所以会发生缺页中断。
2
同理随后的页面2,3,4进入主存,将其使用位记成1,发生缺页中断。
3
当之后的页面1,2进入主存时,由于页面1,2已经在主存中,不做处理。
4
当之后的页面5进入主存时,主存内没有空余的帧,这时候随着指针循环移动整个缓冲区,将之前页面的使用位全部清0,即这时候页面1,2,3,4对应的使用位全部为0,指针回到最初的位置,将页面1替换出去,页面5换入主存,同时使用位标记成1。以此类推,可知CLOCK共发生10次缺页中断。
05
改进型CLOCK算法
在将一个页面换出时,如果该页已被修改过,便须将该页重新写回到磁盘上;但如果该页未被修改过,则不必将它拷回磁盘。在改进型Clock算法中,除须考虑页面的使用情况外,还须再增加一个因素,即置换代价,这样,选择页面换出时,既要是未使用过的页面,又要是未被修改过的页面。把同时满足这两个条件的页面作为首选淘汰的页面。由访问位A和修改位M可以组合成下面四种类型的页面: 1类(A=0,M=0): 表示该页最近既为被访问,又未被修改,是最佳淘汰页 。 2类(A=0,M=1): 表示该页最近未被访问,但也被修改,并不是很好的淘汰页 3类(A=1,M=0): 表示该页最近已被访问,但未被修改,该页有可能再被访问 4类(A=1,M=1): 表示该页最近已被访问且被修改,该页可能再被访问 在内存中的每个页必定是这四个类页面之一,在进行页面置换时,可采用与简单Clock算法相类似的算法,其差别在于该算法须同时检查访问位与修改位,以确定该页是四类页面中的哪一种。其执行过程可分成以下三步:1
从指针所指示的当前位置开始,扫描循环队列,寻找A=0且M=0的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位A
2
如果第一步失败,即查找一周后未遇到第一类页面,则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置0
3
如果第二步也失败,亦即未找到第二类页面,则将指针返回到开始的位置,并将所有的访问位复0。然后重复第一步,如果仍失败,必要时再重复第二步,此时就一定能找到被淘汰的页该算法与简单Clock算法比较,可减少磁盘的I/O操作次数。但为了找到一个可置换的页,可能须经过几轮扫描。换言之,实现该算法本身的开销将有所增加。
以下面这个页面置换过程为例:访问的页面依次 是:0,1,3,6,2,4,5,2,5,0,3,1,2,5,4,1,0,其中红色数字表示将要修改的页面,即他们的modified bit将被设置成1,在下图中这些页面用斜体表示,使用位和修改位如下图所示。下面的"Fault ?"表示缺页时查找空闲frame的次数。1
当页面0来时,Frame0空闲,所以换入页面0,修改状态为(1,0),同时发生缺页中断。
2
当访问页面1时,由于页面1,将要被修改,其状态设置为(1,1),同时发生缺页中断。
3
同理对于接下来的页面3,6,将其状态设置为(1,0),,同时发生缺页中断。
4
对于接下来的页面2,按照之前的页面置换算法的顺序,现在主存中找状态为(0,0)的页面,发现没有....然后执行算法的第二步,找状态为(0,1)的页面,还是没有。这时候把主存里面所有页面的used bit清零,再重复执行算法的第一步,此时由于页面0的状态已经变成(0,0),页面2把页面0替换出主存。同时由于在之前的设计中页面2属于将要被修改(modify)的页面,故将其状态设置为(1,1)。由于经历了两轮查找,所以"Fault ?"对应的查找次数为2*4+1=9。同理可类推访问其他页面的情况。最后可知缺页次数为13次。
例
一进程已分配到4个页帧,现在进程访问到第四页发生缺页,若使用NRU算法应该换出哪一页。
解析
按照最近访问时间,访问顺序应该是1,0,2,3。所以在没有发生缺页时,相对应的访问位和修改位是 此时访问第四页,发生了缺页,指针将按页表中的顺序进行查找。我们看到在题目给出的表中0和1号页的访问位已经变成了0,而2和3号页的访问位还是1,可以说明此时指针指向的是1号页,并且已经完成对1号页的处理,即将指向2号页。 但是这个过程还没完,现在我们需要的是访问位为0的页,扫描过了0号和1号,没有找到,所以要继续扫描。扫描完了2号和3号,都没有发现访问位为0的页,所以此时第一轮扫描完成,将进行第二轮扫描。 因为此时0号页的访问位在第一次扫描的时候已经被置为0,所以根据NRU算法,0号页将会被换出。如果是改进的CLOCK算法:
第一轮扫描要找(0,0)的页面,没找到;第二轮要找(0,1)的页面,也没找到。 此时页面访问位和修改位是这样的。 第三轮扫描和第一轮一样,要找(0,0)的页面,此时1号页符合,所以将1号页换出。总结
抓码计算机考研qq群
总群:625590924
广大:1143982604
暨大:1071137230
广工:938111325
华工:428389734
深大:729770764
浙大:978938582
厦大:1125268501
中大:921801084
南航:281118241
华农:515681663
重邮:736197896
北邮:1126650806
南邮:1109929146
广外:976231252
东北大学:1128523098
华南师大:428389734
南昌大学:923249141
给个“在看”支持一下我