頁面置換演算法
1. 總述
為提高記憶體利用率,解決記憶體供不應求的問題,更加合理的使用記憶體,人們創造了分頁式記憶體抽象。同時有乙個虛擬記憶體的概念,是指將記憶體中暫時不需要的部分寫入硬碟,看上去硬碟擴充套件了記憶體的容量,所以叫做「虛擬」記憶體。使用虛擬記憶體,應用程式可以使用比實際物理記憶體更大的記憶體空間。可以認為這個更大的記憶體空間就在硬碟上,只有將某一部分需要被用到時,才被寫入真實記憶體;當它暫時不再被用到時,又被寫回硬碟。分頁式記憶體管理將物理記憶體分為等大的小塊,每塊大小通常為1k、2k、4k等,稱為頁幀;邏輯記憶體(使用虛擬記憶體技術擴大的記憶體,可認為其位於硬碟上)也被分為等大的小塊,稱為頁;且頁和頁幀的大小一定是一樣的,它是寫入真實記憶體和寫回硬碟最小單位。
介紹另外幾個概念:
使用位:每個頁幀都有乙個使用位,記錄此頁幀是否被使用。
修改位(髒位):每個頁幀都有乙個髒位,記錄此頁幀是否被更改。調出真實記憶體時,被更改過的頁幀要寫回硬碟,未被更改過的頁幀直接扔掉即可,因為硬碟上此頁幀的副本仍然有效。
當然,程序載入到真實記憶體才可以執行,而程序**使用的是邏輯位址,所以牽扯到乙個位址轉換的問題,將邏輯位址轉換為實體地址。邏輯位址可分為兩段,前半段代表頁號,後半段代表頁內偏移,實體地址也可分為兩段,前半段代表頁幀號,後半段代表頁內偏移。位址轉換的方法即,將邏輯位址的頁號對應為實體地址的頁幀號(對應關係記錄在一張表中,比如頁號為5,對應到真實記憶體中頁幀號為3),頁內偏移不同變化(頁和頁幀的大小是一樣的)。
2. 介紹頁面置換演算法
假設某一時刻記憶體頁幀已經被寫滿了,但這時又需要將乙個頁寫到物理記憶體中,就需要將原本在物理記憶體中的某一頁換出來。如果置換不當,就會導致剛剛被換出到硬碟的頁又要被寫回記憶體,減慢系統執行的速度。頁面置換演算法就是考慮將哪一頁換出來以獲得優良效能的方法。
2.1 optimal演算法(最優演算法)
首先介紹最優演算法,它需要知道以後要被用到的頁,然後將不會被用到的頁換出記憶體;如果所有頁都會被用到,就把需要使用時間離現在最長的頁換出,以盡量使不好的情況晚發生。這種方法能使系統獲得最佳效能,但是,它是不可能實現的......因為當前無法獲知以後哪些頁要被用到。不過最優演算法還是能夠作為其他演算法優秀程度的衡量。
2.2 fifo(first-in first-out,先進先出)演算法
fifo演算法的思想很簡單,就是置換出當前已經待在記憶體裡時間最長的那個頁。fifo演算法的執行速度很快,不需要考慮其他的因素,需要的開銷很少。但是正是由於沒有考慮頁面的重要性的問題,fifo演算法很容易將重要的頁換出記憶體。
2.3 second chance(第二次機會)演算法
為了避免fifo演算法將重要的頁換出記憶體,second chance演算法提供了一些改進。second chance演算法在將頁面換出記憶體前檢查其使用位(使用位前文有介紹),如果其使用位為1,證明此頁最近有被使用,猜測它還可能被使用,於是不把它置換出記憶體,但是把其使用位置為0,隨後檢查下乙個頁面,直到發現某頁的使用位為0,將此頁置換出記憶體。
2.4 clock演算法(時鐘輪轉法)
為了節約second chance演算法乙個接著乙個檢查使用位的開銷,時鐘輪轉法又提出了改進。時鐘輪轉法將所有的頁組成乙個圓,圓心的指標指向下乙個要被置換的頁面,置換前同樣檢查使用位,如果使用位為1,同樣將其使用位置為0,隨後將順指標旋轉,檢查下乙個頁面,直到發現某頁的使用位為0,將此頁置換出記憶體。很容易理解此演算法為什麼叫「時鐘」輪轉法。
圖示:
此時2號頁是下乙個要被置換出記憶體的頁,置換時如果發現其使用位為1,則將使用位置0後順時針旋轉指標檢查1號頁。
2.5 lru(least recent used, 最近最少使用)演算法
為獲得對最優演算法的模擬,提出了lru演算法。由於當前時間之後需要用到哪些頁無法提前獲知,於是記錄當前時間之前頁面的使用情況,認為之前使用過的頁面以後還會被用到。在置換時,將最近使用最少的頁面換出記憶體。此種方法的開銷比較大。
2.6 nru(not recent used, 最近未使用)演算法
前面提到修改位和使用位,nru演算法利用這兩個標誌位將所有頁幀分為4組:
第0組:修改位和使用位都為0;
第1組:修改位為0,使用位為1;
第2組:修改位為1,使用位為0;
第3組:修改位和使用位都為1。
nru演算法從組數最小的一組中隨機選擇乙個頁面將其移出記憶體。可能有人會發現第2組這種情況根本不會出現,如果乙個頁幀被修改,其修改位會被置1,同時它也被使用了,其使用位也會被置1;即不會出現被修改但是沒有被使用的情況。真實情況是,頁幀的使用位會被定時清零,這樣第3組經過一次清零就會變成第2組。這也符合「最近」未使用,即很久以前被使用的頁幀被清零了,不在統計範圍內,只要「最近」沒有被使用,就很有可能被移出。
nru演算法不是最好的,但是它使用起來開銷很小,用較小的代價就得到了不錯的效果,不失為一種不錯的演算法。
作業系統 記憶體管理(二)
覆蓋技術 缺點 1.時間換空間 2.塊分析成本 交換技術 交換時機 確實是記憶體空間不夠的時候。交換區大小 硬碟中預留的空間一定要能存放所有使用者程序的所有記憶體映像的拷貝 覆蓋交換對比 虛擬記憶體管理技術 目標 1.類似覆蓋但可以減輕程式設計師負擔。2.類似交換,可以減小交換粒度。實現原理 基於m...
作業系統記憶體管理
作業系統記憶體管理 一 程序的虛擬位址空間 每個程序都被賦予自己的虛擬位址空間,對於32位程序來說,這個位址空間為4g,因此程序中的位址可以為0x00000000至0xffffffff之間的任何乙個值。其中4g空間中的低區的2g空間留給程序使用,而高區的2g空間則留給系統使用。在windows200...
作業系統記憶體管理
作業系統記憶體管理一 程序的虛擬位址空間 每個程序都被賦予自己的虛擬位址空間,對於 32位程序來說,這個位址空間為 4g,因此程序中的位址可以為 0x00000000 至0xffffffff 之間的任何乙個值。其中 4g空間中的低區的 2g空間留給程序使用,而高區的 2g空間則留給系統使用。在win...