頁面置換算法是什么?我們看一下百度百科對頁面置換算法給出的定義:在地址映射過程中,若在頁面中發現所要訪問的頁面不在內存中,則產生缺頁中斷。當發生缺頁中斷時,如果操作系統內存中沒有空閑頁面,則操作系統必須在內存中選擇一個頁面將其移出內存,以便為即將調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫做頁面置換算法。好了,說到底,頁面置換算法就是因為操作系統的內部不夠,在調入新的頁面時如何取代哪個頁面的問題。常見的頁面置換算法有如下圖所示幾種:
上述的隨機替換我們很容易理解,就是操作系統隨機挑選的一個被替換的頁面。除此之外,頁面置換算法還包括最佳頁面置換算法、先進先出頁面置換算法、最近未使用頁面置換算法以及最少使用頁面置換算法。
1. OPT頁面置換算法(最佳頁面置換算法)
這是一種理想情況下的頁面置換算法,但實際上是不可能實現的。該算法的基本思想是:發生缺頁時,有些頁面在內存中,其中有一頁將很快被訪問(也包含緊接着的下一條指令的那頁),而其他頁面則可能要到10、100或者1000條指令后才會被訪問,每個頁面都可以用在該頁面首次被訪問前所要執行的指令數進行標記。最佳頁面置換算法只是簡單地規定:標記最大的頁應該被置換。這個算法唯一的一個問題就是它無法實現。當缺頁發生時,操作系統無法知道各個頁面下一次是在什么時候被訪問。雖然這個算法不可能實現,但是最佳頁面置換算法可以用於對可實現算法的性能進行衡量比較。
2. FIFO頁面置換算法(先進先出頁面置換算法)
FIFO淘汰算法總是淘汰最先進入內存的頁面,即選擇在內存中駐留時間最久的頁面進行淘汰。該算法實現只需把一個進程已調入內存的頁面,按訪問的時間先后順序鏈接成一個隊列,並設置一個指針,該指針始終指向“最老“的頁面。
問題:隨機一訪問串和駐留集的大小,通過模擬程序顯示淘汰的頁號並統計命中率。示例:
輸入訪問串:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1
駐留集大小:3
紅色表示:指針指向調入內存的頁面中“最老“的頁面
通過模擬程序輸出淘汰的頁號分別為:7 0 1 2 3 0 4 2 3
命中率為:5/13
注意:內存的頁面中“最老“的頁面,會被新的網頁直接覆蓋,而不是“最老“的頁面先出隊,然后新的網頁從隊尾入隊。
3. LRU頁面置換算法(最近未使用頁面置換算法)
LRU(Least Currently Used):FIFO總是優先淘汰那些進入內存早的頁面,它根據最早進入時間來選擇刪除某個頁面;而恰恰相反,LRU優先淘汰那些經常不使用的頁面,它根據最近進入時間來保留某個頁面。
LRU算法的提出,是基於這樣一個事實:在前面幾條指令中使用的頁面很可能在后面的幾條指令中也會使用。反過來說,已經很久沒有使用的頁面很可能在未來較長的一段時間內不會被用到。這個就是著名的局部性原理——比內存速度還要快的cache,也是基於同樣的原理運行的。因此,我們只需要在每次調換時,找到最近未使用的那個頁面調出內存。這就是LRU算法的全部內容。
問題:隨機一訪問串和駐留集的大小,通過模擬程序顯示淘汰的頁號並統計命中率。示例:
輸入訪問串:7 0 1 2 0 3 0 4 2 3 0 3 2
駐留集大小:3
算法的實現:由於LRU算法淘汰的是上次使用距離t時刻最遠的頁,故需記錄這個距離。
計數器:可使用計數器,給每一個頁幀增設一個計數器。每訪問一頁,就把對應頁幀的計數器清零,其余頁幀的計數器加1.因此,計數器值為最大的頁即上次訪問距當前最遠的頁。
紅色表示:每個頁幀對應的計數器值
通過模擬程序輸出淘汰的頁號分別為:7 1 2 3 0 4
命中率為:4/13
LRU的另一種通俗理解:
例如一個三道程序,等待進入的是1,2,3,4,4,2,5,6,3,4,2,1。先分別把1,2,3導入,然后導入4,置換的是1,因為他離導入時間最遠。然后又是4,不需要置換,然后是2,也不需要,因為內存中有,到5的時候,因為3最遠,所以置換3,依次類推。
注意:雖然兩個算法都是用隊列這種數據結構實現的,但具體操作不完全遵從隊列的原則。這一點不必糾結。
命中率是指在隊滿的情況下,新的元素的加入,不影響隊列其它元素。即該元素已存在在隊列中。
OPT、LRU以及FIFO算法的對比圖如下所示:
4. LFU頁面置換算法(最少使用頁面排序算法)
LFU(Least Frequently Used):內存內使用越頻繁的頁面,被保留的時間也相對越長。
問題:哈爾濱工業大學2000年考研操作系統真題操作系統考研輔導教程87頁一請求分頁存儲系統,進程P共有5頁,訪問串為3,2,1,0,3,2,4,3,2,1,0,4,試采用LRU算法和LFU算法分析,當分配頁面數為3時,發生的缺頁中斷次數。
解:least frequently used (LFU),要求在頁置換時置換引用計數最小的頁。
5. 頁面替換算法的應用——高速緩沖存儲器
高速緩沖存儲器(Cache)其原始意義是指存取速度比一般隨機存取記憶體(RAM)來得快的一種RAM,一般而言它不像系統主記憶體那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術,也有快取記憶體的名稱。
高速緩沖存儲器是存在於主存與CPU之間的一級存儲器, 由靜態存儲芯片(SRAM)組成,容量比較小但速度比主存高得多,接近於CPU的速度。在計算機存儲系統的層次結構中,是介於中央處理器和主存儲器之間的高速小容量存儲器。它和主存儲器一起構成一級的存儲器。高速緩沖存儲器和主存儲器之間信息的調度和傳送是由硬件自動進行的。
高速緩沖存儲器最重要的技術指標是它的命中率。
作用:在計算機技術發展過程中,主存儲器存取速度一直比中央處理器操作速度慢得多,使中央處理器的高速處理能力不能充分發揮,整個計算機系統的工作效率受到影響。Cache就是用來解決中央處理器和主存儲區速度不匹配的問題的。
高速緩沖存儲器的容量一般只有主存儲器的幾百分之一,但它的存取速度能與中央處理器相匹配。根據程序局部性原理,正在使用的主存儲器某一單元鄰近的那些單元將被用到的可能性很大。因而,當中央處理器存取主存儲器某一單元時,計算機硬件就自動地將包括該單元在內的那一組單元內容調入高速緩沖存儲器,中央處理器即將存取的主存儲器單元很可能就在剛剛調入到高速緩沖存儲器的那一組單元內。於是,中央處理器就可以直接對高速緩沖存儲器進行存取。在整個處理過程中,如果中央處理器絕大多數存取主存儲器的操作能為存取高速緩沖存儲器所代替,計算機系統處理速度就能顯著提高。
為了保證CPU訪問時有較高的命中率,Cache中的內容應該按一定的算法替換。Cache的替換算法對命中率的影響。 當新的主存塊需要調入Cache並且它的可用空間位置又被占滿時,需要替換掉Cache的數據,這就產生了替換策略(算法)問題。根據程序局部性規律可知:程序在運行中,總是頻繁地使用那些最近被使用過的指令和數據。這就提供了替換策略的理論依據。 替換算法目標就是使Cache獲得最高的命中率。Cache替換算法是影響代理緩存系統性能的一個重要因素,一個好的Cache替換算法可以產生較高的命中率。