基于LRU快表实现

#include<iostream>
#include<vector>
using namespace std;
const int N=2<<10;
vector<int>TLB;
const int pagelen=N;
struct Pagetable
{
    int Pagenum;
    int Framenum;
}Page[N];
//int top=0,rear=100;
bool same(int num){
    for(int i=0;i<=TLB.size();i++)
    {
      if(num==TLB[i]){
            TLB.erase(TLB.begin()+i);
            TLB.push_back(num);
       return true;
      }

    }
  return false;
}
void push(int num){
    TLB.push_back(num);
}
void print()
{
     vector<int>::iterator it;
     for(it=TLB.begin();it!=TLB.end();++it)
       cout<<*it<<" ";
    cout<<endl;
}
int pop(){
    int x=TLB.front();
    TLB.erase(TLB.begin());
  return x;
}
int main(){
    int num;
    for(int i=0;i<100;i++){
        Page[i].Pagenum=i;
        Page[i].Framenum=i+1;
    }
    int t=0,A,L,D,n;
   cin>>n;
   while(cin>>A>>L){
        num=A/L,D=A%L;
       if(t==0)
       {
             push(num);
             t++;
       }
       else
       {
           if(TLB.size()==n)
           {
            if(!same(num))
            {
             push(num);
             int M=Page[num].Framenum*L+D;
             cout<<"页面"<<pop()<<"被"<<"页面"<<num<<"置换"<<endl;
            cout<<M<<endl;
            }
           }
           else
           {
            if(!same(num)) push(num);
           }
       }
      // print();
   }


//    while(!TLB.empty()){
//       cout<<pop()<<endl;
//  }


return 0;
}
 

猜你喜欢

转载自blog.csdn.net/lianghudream/article/details/82381679