程序頁面的時鐘(CLOCK)置換演算法

2021-10-06 01:15:57 字數 1301 閱讀 7779

假設頁表項如下,其實可能更複雜,還有更多標記。

頁號,物理塊號,存在位,修改位,使用位,,,,

假設作業系統給這個程序2個物理塊,0塊和1塊,那麼可以組成乙個時鐘形狀的迴圈佇列。0-1-0(環狀)

時鐘置換演算法運作過程如下:

假設

此時使用位情況:0-1,1-1;

指標位置:0(初始化假設)

開始,0塊使用位為1,不可置換,但是這次把它的使用位變為0,以免一直是1發生死迴圈。又假設指標順時針轉動,那麼指標後移之後到了1塊,此時還是使用位為1,不可置換,同樣修改其使用位為0,後移又到了0塊,這次使用位為0,可以置換,然後將新頁面放進來,占用0塊,並且修改其使用位為1.

此時使用位情況:0-1,1-0;

指標位置:0

又假設:

1.下次又缺頁

指標在0,使用位是1,使用位改0,後移到1,使用位是0,置換,使用位改1。

最終使用位情況:0-0,1-1

指標位置:1

2.下次不缺頁,訪問1塊

訪問了1塊,要修改1塊的使用位。

最終使用位情況:0-1,1-1

指標位置:0(不變)

總結。可以發現,clock演算法的特點。

對於1發生後,下次如果又缺頁要置換,置換的是0塊,有lru的特性(前一次置換了1塊,使用了,所以這次不置換1塊)。

對於2發生後,下次如果又缺頁要置換,置換的是0塊,有lru的特性(前一次使用了1塊,使用了,所以這次不置換1塊)。

也即最近使用了的或者置換了進來的頁面使用位會被修改為1,那麼下次發生置換的時候,不容易發生在它的身上。

但又和lru不同,

假設在在2後,訪問0塊。

最終使用位情況:0-1,1-1(不變)

指標位置:0(不變)

如果下次訪問頁面的時候缺頁要求置換,那麼按lru,應該是1被置換,因為剛剛訪問了0,但是根據clock,由於指標位置為0,一圈下來,應該是0被置換。所以這兩者演算法執行結果是不一樣的。

lru是缺點是要維護乙個棧,系統需要的工作是把那個棧排來排去的,但是這個演算法很好用,一般缺頁率比較低。但是clock更加容易實現,開銷沒有那麼大,而且演算法也還蠻好用。

時鐘頁面置換演算法

clock頁面置換演算法,lru的近似,對fifo的一種改進 基本思路 需要用到頁表項當中的訪問位,當乙個頁面被裝入記憶體時,把該位初始化為0,然後如果這個頁面被訪問 讀 寫 則把該位置為1 把各個頁面組織成環形鍊錶 類似於鍾表面 把指標指向最老的頁面 最先進來 當發生乙個缺頁中斷時,考察指標所指向...

頁面置換演算法之Clock演算法

緩衝池是資料庫最終的概念,資料庫可以將一部分資料頁放在記憶體中形成緩衝池,當需要乙個資料頁時,首先檢查記憶體中的緩衝池是否有這個頁面,如果有則直接命中返回,沒有則從磁碟中讀取這一頁,然後快取到記憶體並返回。但是記憶體的價值較高,一般來說伺服器的記憶體總是小於磁碟大小的,而且記憶體不能完全分配給資料庫...

頁面置換演算法 CLOCK置換演算法及其改進版演算法

本文主要介紹頁面置換演算法中的clock置換演算法。頁面置換演算法中的lru演算法最接近理想情況下的opt演算法,但是實現起來比較困難且開銷較大,所以很多設計者試圖用開銷比較小的演算法接近lru演算法,clock演算法就是其中一種。1.簡單的clock演算法是通過給每乙個訪問的頁面關聯乙個附加位 r...