Fork me on GitHub
侧边栏

缺页中断算法

页面置换算法

进程运行过程中,如果发生缺页中断,而此时内存中有没有空闲的物理块时,为了能够把所缺的页面装入内存,系统必须从内存中选择一页调出到磁盘的对换区。但此时应该把哪个页面换出,则需要根据一定的页面置换算法(Page Replacement Algorithm)来确定。

2.OPT( 最佳⻚⾯置换算法)

最佳置换算法:其所选择的被淘汰的页面将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面

image

在这个请求的⻚⾯序列中,缺⻚共发⽣了 7 次(空闲⻚换⼊ 3 次 + 最优⻚⾯置换 4 次),⻚⾯置换共发 ⽣了 4 次

注意:

最佳页面置换算法这很理想,但是实际系统中⽆法实现,因为程序访问⻚⾯时是动态的,我们是⽆法预知每个⻚⾯在下⼀ 次访问前的等待时间。 所以,最佳⻚⾯置换算法作⽤是为了衡量你的算法的效率,你的算法效率越接近该算法的效率,那么说明你的算法是⾼效的

3. FIFO(先进先出置换算法)

先进先出(First In first Out, FIFO) 页面置换算法的基本思想:每次置换最先调入内存的页面,即将内存中等待时间最长的页面进行置换。 此算法的适用范围是顺序结构程序

image

优点:先进先出页面置换算法的优点是其实现起来比较简单,可以不需要硬件的支持, 因而不需要增加系统的成本

缺点:先进先出页面置换算法没有考虑到缓存页面被使用的情况。如果一个页面被频繁访问, 我们应该将它保留在缓存中, 这样就能够提高程序的性能。但是使用FIFO算法, 很可能将一个被频繁访问的页面清除出缓存, 所以FIFO算法在实际的应用中是很少被使用到的, 但是这种思想是计算机系统中常常被采用的。

在大数情况下,先进先出页面置换算法缺页率比较低或会产生Belady异常现象

4. LRU(最近最久未使⽤的置换算法)

最近最久未使⽤(LRU)的置换算法的基本思路是:发⽣缺⻚时,选择最⻓时间没有被访问的⻚⾯进⾏置换,也就是说,该算法假设已经很久没有使⽤的⻚⾯很有可能在未来较⻓的⼀段时间内仍然不会被使⽤

image

优点:算法性能好,效率高

缺点:在每次访问内存时都必须要更新整个链表。在链表中找到⼀个⻚⾯,删除它,然后把它移动到表头是⼀个⾮常费时的操作

5. Lock(时钟⻚⾯置换算法)

Lock(时钟⻚⾯置换算法):把所有的⻚⾯都保存在⼀个类似钟⾯的环形链表中,⼀个表针指向最⽼的⻚⾯。当发⽣缺⻚中断时,算法⾸先检查表针指向的⻚⾯:

(1)如果它的访问位位是 0 就淘汰该⻚⾯,并把新的⻚⾯插⼊这个位置,然后把表针前移⼀个位置

(2)如果访问位是 1 就清除访问位,并把表针前移⼀个位置,重复这个过程直到找到了⼀个访问位为 0 的⻚⾯为⽌

image

image

6.最不常⽤算法(LFU)

最不常⽤(LFU)算法:当发⽣缺⻚中断时,选择访问次数最少的那个⻚⾯,并将其淘汰

实现方式:对每个⻚⾯设置⼀个访问计数器,每当⼀个⻚⾯被访问时,该⻚⾯的访问计数器就 累加 1。在发⽣缺⻚中断时,淘汰计数器值最⼩的那个⻚⾯

LRU和LFU区别

(1)LRU关键是看页面最后一次被使用到发生替换的时间长短,时间越长,页面就会被置换;

LFU关键是看一定时间段内页面被使用的频率(次数),使用频率越低,页面就会被置换。

(2)LRU算法适合:较大的文件比如游戏客户端(最近加载的地图文件)

LFU算法适合:较小的文件和零碎的文件比如系统文件、应用程序文件

(3)LRU消耗CPU资源较少,LFU消耗CPU资源较多

posted @ 2023-04-05 20:28  yooooooo  阅读(275)  评论(0)    收藏  举报