改進型Clock演算法

2021-07-03 07:56:44 字數 1719 閱讀 3701

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

1類(a =0, m = 0):表示該頁面最近既未被訪問,又未被修改,是最佳淘汰頁。

2類(a =0, m = 1):表示該頁面最近未被訪問,但已被修改,並不是很好的淘汰頁。

3類(a =1, m = 0):表示該頁面最近已被訪問,但未被修改,該頁有可能再被訪問。

4類(a =1, m = 1):表示該頁最近已被訪問且被修改,該頁可能再被訪問。

執行步驟如下:

從指標所指示的當前位置開始,掃瞄迴圈佇列,尋找第一類頁面,將所遇到的第乙個頁面作為所選中的淘汰頁。在第一次掃瞄期間不改變訪問位a.

如果第一步失敗,即查詢一周後未遇到第一類頁面,則開始第二輪掃瞄,尋找第二類頁面,將所遇到的第乙個這類頁面作為淘汰頁。在第二輪掃瞄期間,將所有掃瞄過的頁面的訪問位都置0.

如果第二步也失敗,亦即未找到第二類頁面,則將指標返回到開始位置,並將所有訪問位復0.返回第一步。流程如下:

**示例:

#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::clockbetter()

} if (p == mem.size()) // 如果沒有找到相等的記憶體塊

}if (firstclass) //找到了第一類頁面

bool secondclass = false; // 如果沒找到第一類頁面

// 開始找第二類頁面,即訪問位為0, 修改位為1

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

if (secondclass) // 找到第二頁面

loop = true; // 兩類都沒找到,重新找第一類

}while (loop);

} }// 顯示缺頁率

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

}void pagereplacement::addinfo(const std::vector& modified) const

else

}std::cout << std::endl;

}

改進型最小損耗能量密度演算法

improved least loss energy density illed 改進型最小損耗能量密度演算法 先計算各個任務i在各個核心m以所有頻點v執行的能量密度edm,i,v。計算任務在各個核心上最小的能量密度ed,用核心z來表示任務w在核心上的最小ed對應核心 當核心數目m多於1個核時,計算...

DGIM針對課設題目的改進型

include stdio.h include stdlib.h typedef struct bucketnode,bucket int count bucket 0 void merge bucket buc,int n void estimate bucket buc,int count wi...

對Loop 改進型蝴蝶 Sqrt3細分的學習

開學前的暑假要求學習 計算機圖形學 三維模型處理演算法初步理論與實現 c 版 這本教材,被分配了其中的點邊面查詢和三維模型細分這兩個章節。由於教材裡的 和內容講得太模糊,就自己網上查 看 後來發現openmesh裡實現了這三種演算法,於是趕緊找來看,也算是弄懂了拓撲方面的操作,但對那些幾何規則還是一...