作業系統 頁面置換演算法

2021-10-22 16:09:44 字數 3460 閱讀 1038

把記憶體已無空閒空間時選擇換出頁面的演算法稱為頁面置換演算法(page-replacement algorithms)。

不適當的演算法可能會導致程序發現「抖動」,即剛被換出的頁很快又要被訪問,需要將它重新調入,可能會出現頻繁地更換頁面,以致乙個程序在執行中把大部分時間都花費在頁面置換工作上。乙個好的頁面置換演算法,應具有較低的頁面更換頻率。

最佳置換演算法和先進先出置換演算法

最佳置換演算法是一種理想化的演算法,通常使用最佳置換演算法作為標準,來評價其它演算法的優劣。先進先出置換演算法是最直觀的演算法,由於與通常頁面的使用規律不服,可能是效能最差的演算法,故實際應用極少。

最佳置換演算法。

其所選擇的被淘汰頁面,將是以後永不使用的,或許是在最長(未來)時間內不再被訪問(即下一次訪問時間最晚)的頁面。採用最佳置換演算法,通常可保證獲得最低的缺頁率。

先進先出頁面置換演算法。

總是淘汰最先進入記憶體的頁面,即選擇在記憶體中駐留時間最久的頁面予以淘汰。

fifo 置換演算法效能之所以較差,是因為它所依據的條件是各個頁面調入記憶體的時間,而頁面調入的先後並不能反映頁面的使用情況。

最近最久未使用(lru)演算法:

是根據頁面調入記憶體後的使用情況進行決策的。即選擇最近最久未使用的頁面予以淘汰。該演算法賦予每個頁面乙個訪問字段,用來記錄乙個頁面自上次被訪問以來所經歷的時間 t,當須淘汰乙個頁面時,選擇現有頁面中其 t 值最大的,即最近最久未使用的頁面予以淘汰。

最佳置換演算法是從「向後看」的觀點出發的,即它是依據以後各頁的使用情況;而 lru 演算法則是「向前看」的,即根據各頁以前的使用情況來判斷,而頁面過去和未來的走向之間並無必然的聯絡。

lru 置換演算法的硬體支援。

暫存器。

為每個在記憶體中的頁面配置乙個移位暫存器,可表示為

當程序訪問某物理塊時,要將相應暫存器的 rn-1 位置成 1。此時,定時訊號將每隔一定時間(例如 100 ms)將暫存器右移一位。如果我們把 n 位暫存器的數看做是乙個整數,那麼,具有最小數值的暫存器所對應的頁面,就是最近最久未使用的頁面。

棧。可利用乙個特殊的棧來儲存當前使用的各個頁面的頁面號。每當程序訪問某頁面時,便將該頁面的頁面號從棧中移出,將它壓入棧頂。因此,棧頂始終是最新被訪問頁面的編號,而棧底則是最近最久未使用頁面的頁面號。

最近最少使用 lfu 置換演算法。

該演算法用移位暫存器方式。每次訪問某頁時,便將該移位暫存器的最高位置 1,再每隔一定時間(例如 100 ms)右移一次。lfu 置換演算法的頁面訪問圖與 lru 置換演算法的訪問圖完全相同;或者說,利用這樣一套硬體既可實現 lru 演算法,又可實現 lfu 演算法。但 lru 演算法是根據將 n 位看作乙個整數找到最近最久未使用的頁面,而 lfu 演算法的在最近一段時間使用最少的頁面將是∑ri 最小的頁。

應該指出,lfu 演算法並不能真正反映出頁面的使用情況,因為在每一時間間隔內,只是用暫存器的一位來記錄頁的使用情況,因此,在該時間間隔內,對某頁訪問一次和訪問 1000 次是完全等效的。

clock 置換演算法

雖然 lru 演算法是較好的一種演算法,但由於它要求有較多的硬體支援,故在實際應用中,大多採用 lru 的近似演算法。clock 演算法就是用得較多的一種 lru 近似演算法。

簡單的 clock 置換演算法。

只需為每頁設定一位訪問位,再將記憶體中的所有頁面都通過鏈結指標鏈結成乙個迴圈佇列。當某頁被訪問時,其訪問位被置 1。置換演算法在選擇一頁淘汰時,只需檢查頁的訪問位。如果是 0,就選擇該頁換出;若為 1,則重新將它置 0,暫不換出,而給該頁第二次駐留記憶體的機會,再按照 fifo 演算法檢查下乙個頁面。該演算法是迴圈地檢查各頁面的使用情況的。又把該演算法稱為最近未用演算法 nru。

改進型 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 演算法差別在於該演算法須同時檢查訪問位與修改位,以確定該頁是四類頁面中的哪一種。其執行過程可分成以下三步:

從指標所指示的當前位置開始,掃瞄迴圈佇列,尋找 a=0 且 m=0 的第一類頁面,將所遇到的第乙個頁面作為所選中的淘汰頁。在第一次掃瞄期間不改變訪問位 a。

如果第一步失敗,即查詢一周後未遇到第一類頁面,則開始第二輪掃瞄,尋找 a=0 且 m=1 的第二類頁面,將所遇到的第乙個這類頁面作為淘汰頁。在第二輪掃瞄期間,將所有掃瞄過的頁面的訪問位都置 0。

如果第二步也失敗,亦即未找到第二類頁面,則將指標返回到開始的位置,並已將所有的訪問位復 0。然後重複第一步,如果仍失敗,必要時再重複第二步,此時就一定能找到被淘汰的頁。

該演算法與簡單 clock 演算法比較,可減少磁碟的 i/o 操作次數。但為了找到乙個可置換的頁,可能須經過幾輪掃瞄。換言之,實現該演算法本身的開銷將有所增加。

頁面緩衝演算法 pba

影響頁面換進換出效率的若干因素

頁面置換演算法。

寫回磁碟的頻率。對於已經被修改過的頁面,在將其換出時,應當寫回磁碟。

但如果在系統中已建立了乙個已修改換出頁面的鍊錶,則對每乙個要被換出的頁面(已修改),系統可暫不把它們寫回磁碟,而是將它們掛在已修改換出頁面的鍊錶上,僅當被換出頁面數目達到一定值時,例如64個頁面,再將它們一起寫回到磁碟上,這樣就顯著減少了磁碟 i/o的操作次數。或者說,減少已修改頁面換出的開銷。

讀入記憶體的頻率。在設定了已修改換出頁面鍊錶後,在該鍊錶上就暫時有一批裝有資料的頁面,如果有程序在這批資料還未寫回磁碟時需要再次訪問這些頁面時,就不需從外存上調入,而直接從已修改換出頁面鍊錶中獲取,這樣也可以減少將頁面從磁碟讀入記憶體的頻率,減少頁面換出的開銷。

頁面緩衝演算法 pba

pba 演算法特點:① 顯著地降低了頁面換進、換出的頻率。② 正是由於換入換出的開銷大幅度減小,才能使其可採用一種較簡單的置換策略,如先進先出(fifo)演算法。

在該系統中記憶體分配策略上採用了可變分配和區域性置換方式,同時在記憶體中設定了兩個鍊錶:

空閒頁面鍊錶

實際上是乙個空閒物理塊鍊錶。當程序需要讀入乙個頁面時,便可利用空閒物理塊鍊錶中的第乙個物理塊來裝入該頁。當有乙個未被修改的頁要換出時,而是把它們所在的物理塊掛在空閒煉表表尾。

修改頁面鍊錶

是由已修改的頁面所形成的鍊錶。當程序需要將乙個已修改的頁面換出時,系統並不立即把它換出到外存上,而是將它所在的物理塊掛在修改頁面鍊錶的末尾。當達到一定數量時,再將它們一起寫回磁碟。

c++語言實現lru以及lfu

作業系統 頁面置換演算法

1 最佳頁面置換演算法 opt 其所選擇的被淘汰頁面,將是以後永不再用的,或許是在最長 未來 時間內不再被訪問的頁面。最佳置換演算法是一種理想化的演算法,具有最好的效能,但難於實現。先進先出置換演算法最直觀,但可能性能最差,故應用極少。優點 保證獲得最低的缺頁率 缺點 無法預知乙個程序在記憶體的若干...

作業系統 頁面置換演算法

我在很多地方遇到了這個問題,所以想寫來看看,避免在以後換回再次的遇到這個問題,就在今天進行深入的了解下這個問題,我先它會對我以後的生活工作會有很大的幫助的。在位址對映過程中,若在頁面中發現所要訪問的頁面不再記憶體中,則產生缺頁中斷。當發生缺頁中斷時作業系統必須在記憶體中選擇乙個頁面將其移出記憶體,以...

作業系統 頁面置換演算法

作業系統將記憶體按照頁的進行管理,在需要的時候才把程序相應的部分調入記憶體。當產生缺頁中斷時,需要選擇乙個頁面寫入。如果要換出的頁面在記憶體中被修改過,變成了 髒 頁面,那就需要先寫會到磁碟。頁面置換演算法,就是要選出最合適的乙個頁面,使得置換的效率最高。頁面置換演算法有很多,簡單介紹幾個。首先介紹...