簡單Clock演算法

2021-07-03 07:56:44 字數 1322 閱讀 4686

簡單clock演算法需要根據頁面記憶體是否被訪問來決定是否置換該頁面。實際程式設計中,與最近最久未置換演算法類似,用整型陣列來表示當前每個記憶體頁面是否被訪問,其中1代表被訪問過,0代表未訪問過。每次置換,指標迴圈遍歷,找出第乙個訪問位不為1的那個記憶體頁面。並且在找到被置換頁面之前,將所經過的所有頁面記憶體對應的訪問位置0.

在記憶體塊初始化後,取出頁面訪問序列佇列的隊頭。首先判斷記憶體塊中是否已經存在該隊頭頁面,如果存在則直接顯示記憶體塊當前情況,相應訪問位置1,指標迴圈下移;若不存在,迴圈遍歷記憶體塊,找出第乙個訪問位不為1的那個記憶體頁面。並且在找到被置換頁面之前,將所經過的所有頁面記憶體對應的訪問位置置0. 如果找到的記憶體頁面不為空閒位,則將缺頁數加1. 如此迴圈迭代,直到頁面訪問序列隊列為空時,整個演算法執行完畢。最後計算並顯示缺頁率。其流程圖如圖所示:

**示例:

#ifndef pagereplacement_h

#define pagereplacement_h

#include class pagereplacement

;#endif // pagereplacement_h

#include "pagereplacement.h"

#include #include #include pagereplacement::pagereplacement()

: mem(3, -1)

pagereplacement::~pagereplacement()

void pagereplacement::run()

std::cout << "序列號:";

for (int i = 0; i < seqvec.size(); ++i)

std::cout << std::endl;

}void pagereplacement::clock()

} if (p == mem.size()) // 如果沒有找到

++nlack;

mem[cursor] = head;

timer[cursor] = 1;

cursor = (cursor + 1) % timer.size();

this->addinfo();

} }std::cout << "缺頁率: " << (double)nlack/ntotal * 100 << "%" << std::endl;

}void pagereplacement::addinfo() const

改進型Clock演算法

改進型的clock演算法需要綜合考慮某一記憶體頁面的訪問位和修改位來判斷是否置換該頁面。在實際編寫演算法過程中,同樣可以用乙個等長的整型陣列來標識每個記憶體塊的修改狀態。訪問位a和修改位m可以組成一下四種型別的頁面。1類 a 0,m 0 表示該頁面最近既未被訪問,又未被修改,是最佳淘汰頁。2類 a ...

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

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

延時迴圈 clock

延遲迴圈 include include using namespace std int main 測試clock 的意義 include include using namespace std int main cout clocks per sec endl 輸出clocks per sec的值...