作業系統 頁面置換演算法

2021-09-22 12:31:54 字數 3115 閱讀 2363

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

首先介紹最優演算法,它需要知道以後要被用到的頁,然後將不會被用到的頁換出記憶體;如果所有頁都會被用到,就把需要使用時間離現在最長的頁換出,以盡量使不好的情況晚發生。這種方法能使系統獲得最佳效能,但是,它是不可能實現的…因為當前無法獲知以後哪些頁要被用到。不過最優演算法還是能夠作為其他演算法優秀程度的衡量。

例:假定系統為某程序分配了三個物理塊,並考慮有以下的頁面號引用串:

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 三個頁面中,將是以後最晚才被訪問的。圖 4-26 示出了採用最佳置換演算法時的置換圖。由圖可看出,採用最佳置換演算法發生了 6 次頁面置換。

fifo演算法的思想很簡單,就是置換出當前已經待在記憶體裡時間最長的那個頁。fifo演算法的執行速度很快,不需要考慮其他的因素,需要的開銷很少。但是正是由於沒有考慮頁面的重要性的問題,fifo演算法很容易將重要的頁換出記憶體。

例:同上。當程序第一次訪問頁面 2 時,將把第 7 頁換出,因為它是最先被調入記憶體的;在第一次訪問頁面 3 時,又將把第 0 頁換出, 因為它在現有的 2, 0, 1 三個頁面中是最老的頁。 由圖 4-27 可以看出,利用 fifo 演算法時進行了 12 次頁面置換,比最佳置換演算法正好多一倍。

為了避免fifo演算法將重要的頁換出記憶體,second chance演算法提供了一些改進。second chance演算法在將頁面換出記憶體前檢查其使用位(使用位前文有介紹),如果其使用位為1,證明此頁最近有被使用,猜測它還可能被使用,於是不把它置換出記憶體,但是把其使用位置為0,隨後檢查下乙個頁面,直到發現某頁的使用位為0,將此頁置換出記憶體。

為了節約second chance演算法乙個接著乙個檢查使用位的開銷,時鐘輪轉法又提出了改進。時鐘輪轉法將所有的頁組成乙個圓,圓心的指標指向下乙個要被置換的頁面,置換前同樣檢查使用位,如果使用位為1,同樣將其使用位置為0,隨後將順指標旋轉,檢查下乙個頁面,直到發現某頁的使用位為0,將此頁置換出記憶體。很容易理解此演算法為什麼叫「時鐘」輪轉法。

圖示:

此時2號頁是下乙個要被置換出記憶體的頁,置換時如果發現其使用位為1,則將使用位置0後順時針旋轉指標檢查1號頁。

為獲得對最優演算法的模擬,提出了lru演算法。由於當前時間之後需要用到哪些頁無法提前獲知,於是記錄當前時間之前頁面的使用情況,認為之前使用過的頁面以後還會被用到。在置換時,將最近使用最少的頁面換出記憶體。此種方法的開銷比較大。

例:同上。當程序第一次對頁面 2 進行訪問時,由於頁面 7 是最近最久未被訪問的,故將它置換出去。當程序第一次對頁面 3進行訪問時,第 1 頁成為最近最久未使用的頁,將它換出。由圖可以看出,前 5 個時間的影象與最佳置換演算法時的相同,但這並非是必然的結果。因為,最佳置換演算法是從「向後看」的觀點出發的,即它是依據以後各頁的使用情況;而 lru 演算法則「向前看」的,即根據各頁以前的使用情況來判斷,而頁面過去和未來的走向之間並無必然的聯絡。

linux區分四種不同的頁面:不可**的、可交換的、可同步的、可丟棄的。

不可**的:保留的和鎖定在記憶體中的頁面,以及核心態棧等。

可交換的:必須在**之前寫回到交換區或者分頁磁碟分割槽。

可同步的:若為髒頁面,必須要先寫回。

可丟棄的:可以被立即**的頁面。

linux並沒有像我們之前單純討論演算法時那樣,在缺頁中斷產生的時候才進行頁面**。linux有乙個守護程序kswapd,比較每個記憶體區域的高低水位來檢測是否有足夠的空閒頁面來使用。每次執行時,僅有乙個確定數量的頁面被**。這個閾值是受限的,以控制i/o壓力。

每次執行**,先**容易的,再處理難的。**的頁面會加入到空閒鍊錶中。

演算法是一種改進地lru演算法,維護兩組標記:活動/非活動和是否被引用。第一輪掃瞄清除引用位,如果第二輪執行確定被引用,就提公升到乙個不太可能**的狀態,否則將該頁面移動到乙個更可能被**的狀態。

處於非活動列表的頁面,自從上次檢查未被引用過,因而是移除的最佳選擇。被引用但不活躍的頁面同樣會被考慮**,是因為一些頁面是守護程序訪問的,可能很長時間不再使用。

另外,記憶體管理還有乙個守護程序pdflush,會定期醒來,寫回髒頁面;或者可用記憶體下降到一定水平後被核心喚醒。

前面提到修改位和使用位,nru演算法利用這兩個標誌位將所有頁幀分為4組:

第0組:修改位和使用位都為0;

第1組:修改位為0,使用位為1;

第2組:修改位為1,使用位為0;

第3組:修改位和使用位都為1。

nru演算法從組數最小的一組中隨機選擇乙個頁面將其移出記憶體。可能有人會發現第2組這種情況根本不會出現,如果乙個頁幀被修改,其修改位會被置1,同時它也被使用了,其使用位也會被置1;即不會出現被修改但是沒有被使用的情況。真實情況是,頁幀的使用位會被定時清零,這樣第3組經過一次清零就會變成第2組。這也符合「最近」未使用,即很久以前被使用的頁幀被清零了,不在統計範圍內,只要「最近」沒有被使用,就很有可能被移出。

nru演算法不是最好的,但是它使用起來開銷很小,用較小的代價就得到了不錯的效果,不失為一種不錯的演算法。

//todo

作業系統 頁面置換演算法

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

作業系統 頁面置換演算法

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

作業系統 頁面置換演算法

把記憶體已無空閒空間時選擇換出頁面的演算法稱為頁面置換演算法 page replacement algorithms 不適當的演算法可能會導致程序發現 抖動 即剛被換出的頁很快又要被訪問,需要將它重新調入,可能會出現頻繁地更換頁面,以致乙個程序在執行中把大部分時間都花費在頁面置換工作上。乙個好的頁面...