頁面置換演算法-最近最久未用(LRU)
阿新 • • 發佈:2019-02-06
LRU與先進先出演算法非常類似, 該演算法在記憶體不夠時, 將記憶體中最久沒有使用的資料置換出去, 然後置入新的資料, 演算法效果比先進先出更好
演算法實現:
#include <iostream>
#include <vector>
using namespace std;
int find(vector<int> mem, int reqseq)
{
int i = 0;
for ( ; i < mem.size(); i++)
if (mem[i] == reqseq)
return i;
return i;
}
int main(int argc, char const *argv[])
{
int n, blk, reqseq, exc = 0;
vector<int> mem;
cin >> n >> blk;
for (int i = 0; i < n; i++)
{
cin >> reqseq;
int pos = find(mem, reqseq);
if (pos == mem.size() || mem.size() == 0 )//not find
{
exc++;
if (mem.size() == blk)//full
mem.erase(mem.begin());
mem.push_back(reqseq);
}
else
{//頁面在記憶體中時, 更新為最新訪問的資料, 放到鏈尾部
mem.erase(mem.begin() + pos);
mem.push_back(reqseq);
}
}
cout << "remain: ";
for (auto x : mem)
cout << x << " ";
cout << "\nrate: " << exc << "/" << n << endl;
return 0;
}
測試資料
輸入請求序列和實體記憶體量
20 3
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
輸出
remain: 7 0 1
rate: 12/20