操作系统原理:页置换算法,FIFO,LRU,Clock,LFU,二次机会法
? ? ?在虛存管理中。當發生缺頁中斷時,進行頁面的換入操作。對于一些不能夠被換出的內存,通常采用頁面鎖定的方式,在頁表中添加鎖定標志位(lock? bit)以區分該頁是否是常駐內存。當內存滿需要換出時,為了減少缺頁頻率通常由幾種頁面置換算法。例如、最優頁面置換算法、先進先出算法、最近最久未使用算法、時鐘頁面置換算法、二次機會法等。
目錄
一、最優頁面置換算法(OPT)
二、先進先出算法(FIFO)
三、最近最久未使用方法(LRU)
四、時鐘頁面置換算法。(Clock)
五、二次機會法
六、最不常用法(LFU)
七、Belady現象
一、最優頁面置換算法(OPT)
? ? ?離下次訪問最久的頁進行置換。這是一個理想的置換算法。在現實系統中幾乎是無法實現的。它通過頁幀存放變量,用某個東西來計算出下次訪問的時長。替換“將來”最久未使用的頁。
?
二、先進先出算法(FIFO)
? ? ? 判斷哪一個頁在內存中存留的時間最長,并淘汰掉。通常用隊列或者鏈表來實現。例如在隊列中記錄頁號,隊列頭的頁存放的時間最長,最先淘汰,把置換進來的頁面對應的頁號加入近隊列尾。此方法性能較差并且有belady現象,被換出的頁面可能是被經常訪問的頁面。性能差,很少用于實際應用中。替換“活”得最久的頁。
三、最近最久未使用方法(LRU)
? ? ? 當需要頁面置換時,判斷哪一個頁號最近一次使用的時間離當前最久,則該頁被換出。即哪一個頁“荒廢”的最久,則被換出。此方法,需要記錄每一個頁幀記入未被引用的次數,當被引用時次數歸零。或者可以用鏈表實現,把最近訪問的頁號插入/移動到鏈頭,置換時換出鏈尾。LRU算法也是一個性能比較差的算法。
?
四、時鐘頁面置換算法。(Clock)
? ? ? 是LRU的一個近似,FIFO的一種改進。利用頁表項中的訪問位 used bit,當一個頁面被裝入內存時,訪問位會被初始化為0,當CPU對該頁進行訪問時,CPU會把訪問位置1。修改訪問位可以由CPU硬件自動操作,當然訪問位可以由操作系統主動操作。具體實現邏輯為: 把所有頁號組成一個環形鏈表(像時鐘一樣),最初把指針指向“最老”的頁面,當缺頁中斷時,如果指針所指的頁表項的訪問位為0,則置換該頁,如果訪問位為1,則將此頁的訪問位置0后 。移動指針到下一個頁表,判斷訪問位是否為0,重復操作,直到有頁被換出。 可以說,Clock算法由環形鏈表、FIFO、和訪問位完成的。
五、二次機會法
? ? 在頁表項中有一個dirty bit,用來記錄是否進行過寫操作,CPU進行寫內存操作時,會自動將次位改1。而訪問位,讀和寫都會被CPU置1.當然,這個位也可被操作系統修改。而二次機會法在Clock法上多了一個bit位,即dirtybit。如果兩個bit都是零就會被替換出去,先置訪問位,后置臟位。
?
六、最不常用法(LFU)
? ? ? 最不常用并不是說這個算法不常用,而是這個策略是置換最不常用的算法。把最少訪問的頁給置換出去,需要一個計數器來記錄訪問頁的次數。LRU是最久未訪問,LFU為最少被訪問。這個算法的缺陷是,當執行某一段新程序段時,老頁可能之前被頻繁訪問,但是在未來中不去訪問,LFU也很長一段時間也不會被置換出去。
?
七、Belady現象
? ? ? ?即分配的物理頁越多,產生缺頁中斷的次數反而越多。例如FIFO。主要原因是,算法并不是為了保留將來即將訪問的物理頁,算法與程序執行邏輯無關。
看看LRU算法:
?
總結
以上是生活随笔為你收集整理的操作系统原理:页置换算法,FIFO,LRU,Clock,LFU,二次机会法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux C :C的汇编码生成
- 下一篇: 操作系统原理:全局页面置换算法、工作集页