標籤: 演算法
作業系統 舉報
作業系統知識庫
c++(21)
作者同類文章x
作業系統學習(11)
作者同類文章x
最近最久未使用演算法需要引入記憶體塊時鐘,即為每個記憶體塊設定乙個計時器,用於記錄相應記憶體塊中的頁面已經存在的時間。每次置換選出所有記憶體塊時鐘中最大者作為被置換頁面,當頁面發生置換時,將其對應的計時器清零,並且其他計時器加1.可用等長的整型陣列來表示每個記憶體塊的計時器。
在記憶體塊初始化後,取出頁面訪問序列佇列的隊頭。首先判斷記憶體塊中是否已經存在該隊頭頁面,如果存在則直接顯示記憶體塊當前情況;否則,判斷此時記憶體是否已滿。如果記憶體未滿,迴圈遍歷找出空閒記憶體塊,進行頁面置換;若記憶體已滿,選出所有記憶體塊時鐘中最大者,並置換之,缺頁數加1. 每發生一次置換,被置換頁面記憶體所對應的計時器清零,其他計時器加1. 如此迴圈迭代,直到頁面訪問序列隊列為空時,整個演算法執行完畢。最後計算並顯示缺頁率。其流程圖如圖所示:
**示例:
[cpp]view plain
copy
print?
#ifndef pagereplacement_h
#define pagereplacement_h
#include
class pagereplacement
; #endif // pagereplacement_h
#ifndef pagereplacement_h
#define pagereplacement_h
#include class pagereplacement
;#endif // pagereplacement_h
[cpp]view plain
copy
print?
#include "pagereplacement.h"
#include
#include
#include
pagereplacement::pagereplacement()
: mem(3, -1)
pagereplacement::~pagereplacement()
void pagereplacement::run()
std::cout <
for (int i = 0; i
std::cout <
} void pagereplacement::lru()
break;
} else if (mem.at(i) == -1 && vacant == -1) // 如果找到空閒位
} if (equal) // 如果找到相等的頁面,則進行下乙個查詢
++nlack;
if (vacant != -1)
continue;
} else
} mem[subindex] = head; // 把隊頭的放入到最近最久未被使用的記憶體塊中
this->addinfo();
timer[subindex] = -1;
for (int j = 0; j
} } std::cout <
} void pagereplacement::addinfo() const
#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::lru()
break;
}else if (mem.at(i) == -1 && vacant == -1) // 如果找到空閒位
}if (equal) // 如果找到相等的頁面,則進行下乙個查詢
++nlack;
if (vacant != -1)
continue;
} else
}mem[subindex] = head; // 把隊頭的放入到最近最久未被使用的記憶體塊中
this->addinfo();
timer[subindex] = -1;
for (int j = 0; j < timer.size(); ++j)
}} std::cout << "缺頁率: " << (double)nlack/ntotal * 100 << "%" << std::endl;
}void pagereplacement::addinfo() const
[cpp]view plain
copy
print?
#include
#include "pagereplacement.h"
int main()
#include #include "pagereplacement.h"
int main()
頂踩
我的同類文章
c++(21) 作業系統學習(11)
最近最久未使用
最近最久未使用 lru 的頁面置換演算法是根據頁面調入記憶體後的使用情況做出決策的。由於無法 各頁面將來的使用情況,只能利用 最近的過去 作為 最近的將來 的近似,因此,lru置換演算法是選擇最近最久未使用的頁面予以淘汰。該演算法賦予每個頁面乙個訪問字段,用來記錄乙個頁面自上次被訪問以來所經歷的時間...
LRU最久未使用淘汰演算法實現
lru 缺頁置換演算法中的一種,當容量滿的時候,新增新的一頁,就會置換淘汰掉最久未使用的一頁。實現 可以採用鍊錶實現 主要是因為該演算法體現在頭部和尾部的操作居多。因此採用雙向鍊錶為佳。介於c stl容器的list實現為乙個方式。由於牽扯到判斷是否存在的問題,因此需要遍歷查詢。該演算法實現時間複雜度...
快取淘汰策略 最近最久未使用策略(LRU)
快取位於記憶體中,而記憶體的空間很有限,所以快取也有乙個能使用的最大空間,當快取中的資料超過這個最大空間時,就要使用快取淘汰策略淘汰一些資料,空出空間給其他資料使用。最近最久未使用策略,優先淘汰最久未使用的資料,也就是上次被訪問時間距離現在最久的資料。該策略可以保證記憶體中的資料都是熱點資料,也就是...