模拟虚拟存储系统的工作原理,使用 LRU 页面替换算法进行替换

模拟虚拟存储系统的工作原理,用LRU页面替换算法进行虚页替换

#include<iostream> 
#include<cstring> 
#include<algorithm> 
#include<list> 
#include<vector> 
#define MAX 4 //初始最大页面数目 
#define N 1024 
#define hashx 56 
#define page_Size 256 
using namespace std;

struct Node{ 
  int addr; 
  bool had; //有效位
  boolused; //使用位 
}mainAddr[N];

list<int>vPage; //虚拟页表、装入位 
vector<int>ans[N];
int n,a[N];
int pushPage(int x){ //虚拟页表push 
   if(vPage.size()==MAXN){ //虚拟页表满时进行替换 
	vPage.pop_front();
	vPage.push_back(x); } 
   else{ //虚拟页面未满时直接push 
	vPage.push_back(x); } 
}

void record(int x){
  list<int>::iteratorit; 
  for(it=vPage.begin();it!=vPage.end();it++) ans[x].push_back(*it);
 } 

void output(){ 
   cout<<"时间:"; 
   for(inti=1;i<=n;++i) 
     cout<<i<<" "; 
   cout<<endl; 
   cout<<"\n 页面:"; 
   for(inti=1;i<=n;++i)
        cout<<a[i]<<" "; 
   cout<<"\n\nLRU: "; 
   for(inti=0;i<MAX;++i){ 
      if(i) cout<<" "; 
      for(intj=1;j<=n;++j){ 
          if(ans[j].size()>i) 
	    cout<<ans[j][i]<<" "; 
          else 
            cout<<" "; 
       } 
       cout<<endl; 
    } 
    cout<<endl; 
} 

int main() 
{ 
    cout<<"输入虚页地址流的数目和地址流 :"<<endl; 
    cin>>n;
    for(inti=1;i<=n;++i) cin>>a[i]; 
    for(inti=1;i<=n;++i){
        list<int>::iteratorit=find(vPage.begin(),vPage.end(),a[i]); 
        if(it!=vPage.end()){ //命中 
             vPage.erase(it); 
	     pushPage(a[i]); 
	}
	else{ //未命中 
	     pushPage(a[i]); 
	} record(i); 
     } 
     cout<< endl; 
     output(); 
     return 0;
}

  

posted @ 2017-02-13 23:13  Cassie_hkx  阅读(534)  评论(0编辑  收藏  举报