頁面置換算法

頁面置換算法

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算法不是最好的,但是它使用起來開銷很小,用較小的代價就得到了不錯的效果,不失爲一種不錯的算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章