阅读背景:

页面置换算法LRU_zzj806683450的专栏

来源:互联网 
#include <iostream>
#include <string>
using namespace std;

typedef struct page{
    int num;//page number
    int time;//the time which page stay
}Page;
int queue[100];/*record the absolete page*/
int K;
/*init the ram*/
void init(Page *b,int n) {
    for(int i = 0;i < n;i++) {
        b[i].num = -1;
        b[i].time = -1;
    }
}

/*get the page which is the longest in ram,By default the page is the first time called in*/
int getMax(Page *b,int m) {
    int i;
    int max = -1;
    int tag = 0;
    for(i = 0;i < m;i++) {
        if(b[i].time > max) {
            max = b[i].time;
            tag = i;
        }
    }
    return tag;
}

/*judge whether the page was in ram*/
int equation(int fold,Page *b,int m) {
    int i;
    for(i = 0;i < m;i++) {
        if(fold == b[i].num)
            return i;
    }
    cout<<"×××";//中断标记
    return -1;
}

void lru(int fold,Page *b,int m) {
    int i;
    int val;
    val = equation(fold,b,m);
    if(val >= 0) {                  //要访问的页在内存中
        b[val].time = -1;            //访问时间置零
        for(i=0;i<m;i++) {
            if(i!=val) b[i].time++; //未换出的页,时间加1
        }
    }else{                          //不在内存中,需要可能需要换出
        val = getMax(b,m);          //找到在内存时间停驻最久的,
        queue[++K] = b[val].num;    //放入淘汰页面
        b[val].num = fold;          //换出新页面
        b[val].time = -1;            //时间
        for(i = 0;i < m;i++) {
            if(i!=val) b[i].time++; //其余页面时间加1
        }
    }
}

/*
    70120304230321201701
*/
int main() {

    int M,n;
    M=4;
    cout<<"内存的页表大小 M = "<<M<<";";
    Page b[M];//内存
    n = 20;
    int a[20]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};//待进入内存的页面
    for(int i = 0;i < n;i++) {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    K = -1;
    init(b,M);
    for(int i = 0;i < n;i++) {
        lru(a[i],b,M);
        for(int j = 0;j < M;j++) {
            if(-1 != b[j].num)
                cout<<b[j].num<<" ";
        }
        cout<<endl;
    }
    cout<<"被淘汰的页面 :";
    for(int i = 0;i < K + 1;i++) {
        if(queue[i] >= 0) {
            cout<<queue[i]<<" ";
        }
    }
    cout<<endl;
    cout<<"命中率:"<<(n - (K + 1)) * 100.0 / n<<"%"<<endl;
    cout<<"缺页率:"<<(K+1) * 100.0 /  n<<"%"<<endl;
    return 0;
}
#include <iostream>
#include <string>
using nam



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: