本文主要介紹頁面置換演算法中的clock置換演算法。頁面置換演算法中的lru演算法最接近理想情況下的opt演算法,但是實現起來比較困難且開銷較大,所以很多設計者試圖用開銷比較小的演算法接近lru演算法,clock演算法就是其中一種。
1.簡單的clock演算法是通過給每乙個訪問的頁面關聯乙個附加位(reference bit),有些地方也叫做使用位(use bit)。他的主要思想是:當某一頁裝入主存時,將use bit置成1;如果該頁之後又被訪問到,使用位也還是標記成1。對於頁面置換演算法,候選的幀集合可以看成是乙個迴圈緩衝區,並且有乙個指標和緩衝區相關聯。遇到頁面替換時,指標指向緩衝區的下一幀。如果這頁進入主存後發現沒有空餘的幀(frame),即所有頁面的使用位均為1,那麼這時候從指標開始迴圈乙個緩衝區,將之前的使用位都清0,並且留在最初的位置上,換出該楨對應的頁。
以下面這個頁面置換過程為例,訪問的頁面依次是:1,2,3,4,1,2,5,1,2,3,4,5。主存有4個空閒的幀,每個頁面對應的結構為(頁面號,使用位)。
最開始頁面號1進入主存,主存裡面有空閒的幀,將其使用位記成1,由於主存中之前沒有頁面1,所以會發生缺頁中斷。
同理隨後的頁面2,3,4進入主存,將其使用位記成1,發生缺頁中斷。
當之後的頁面1,2進入主存時,由於頁面1,2已經在主存中,不做處理。
當之後的頁面5進入主存時,主存內沒有空餘的幀,這時候隨著指標迴圈移動整個緩衝區,將之前頁面的使用位全部清0,即這時候頁面1,2,3,4對應的使用位全部為0,指標回到最初的位置,將頁面1替換出去,頁面5換入主存,同時使用位標記成1。以此類推,可知clock共發生10次缺頁中斷。
2.改進型的clock演算法
在之前的clock演算法上面除了使用位(used bit),還增加了乙個修改位(modified bit),有些地方也叫做dirty bit。現在每一頁有兩個狀態,分別是(使用位,修改位),可分為以下四種情況考慮:
(0,0):最近沒有使用使用也沒有修改,最佳狀態!以下面這個頁面置換過程為例:訪問的頁面依次是:0,1,3,6,2,4,5,2,5,0,3,1,2,5,4,1,0,其中紅色數字表示將要修改的頁面,即他們的modified bit將被設定成1,在下圖中這些頁面用斜體表示,使用位和修改位如下圖所示。下面的"fault ?"表示缺頁時查詢空閒frame的次數。(0,1):修改過但最近沒有使用,將會被寫
頁面替換的順序:以下面替換的流程為例:從指標當前的位置開始尋找主存中滿足(使用位,修改位)為(0,0)的頁面;
如果第1步沒有找到滿足條件的,接著尋找狀態為(0,1)頁面;
如果依然沒有找到,指標回到最初的位置,將集合中所有頁面的使用位設定成0。重複第1步,並且如果有必要,重複第2步,這樣一定可以找到將要替換的頁面。
1.當頁面0來時,frame0空閒,所以換入頁面0,修改狀態為(1,0),同時發生缺頁中斷。
2.當訪問頁面1時,由於頁面1,將要被修改,其狀態設定為(1,1),同時發生缺頁中斷。
3.同理對於接下來的頁面3,6,將其狀態設定為(1,0),,同時發生缺頁中斷。
4.對於接下來的頁面2,按照之前的頁面置換演算法的順序,他現在主存中找狀態為(0,0)的頁面,發現沒有....然後執行演算法的第二步,找狀態為(0,1)的頁面,發現還是沒有.....這時候把主存裡面所有頁面的used bit清零,再重複執行演算法的第一步,此時由於頁面0的狀態已經變成(0,0),頁面2把頁面0替換出主存。同時由於在之前的設計中頁面2屬於將要被修改(modify)的頁面,故將其狀態設定為(1,1)。由於經歷了兩輪查詢,所以"fault ?"對應的查詢次數為2*4+1=9。同理可類推訪問其他頁面的情況。最後可知缺頁次數為13次。
歡迎指正~
頁面置換演算法之Clock演算法
緩衝池是資料庫最終的概念,資料庫可以將一部分資料頁放在記憶體中形成緩衝池,當需要乙個資料頁時,首先檢查記憶體中的緩衝池是否有這個頁面,如果有則直接命中返回,沒有則從磁碟中讀取這一頁,然後快取到記憶體並返回。但是記憶體的價值較高,一般來說伺服器的記憶體總是小於磁碟大小的,而且記憶體不能完全分配給資料庫...
頁面置換演算法
常用的頁面置換演算法有三種 先進先出演算法fifo first in first out 該演算法的基本思想是首先淘汰那些駐留在主存時間最長的頁面。最近最久未用演算法 lru 該演算法的基本思想是 如果某一頁被訪問了,那麼它很可能馬上又被訪問 反之,如果某一頁很久沒被訪問,那麼最近也不會再訪問。lr...
頁面置換演算法
include using namespace std int process 100 頁面佇列 int memory 3 塊數 int optqueue 100 opt演算法的佇列 int fifoqueue 100 fifo演算法佇列 int lruqueue 100 lru演算法佇列 int ...