1. 程式人生 > >頁面置換演算法-最近最久未用(LRU)

頁面置換演算法-最近最久未用(LRU)

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