模拟虚拟存储系统的工作原理,使用 LRU 页面替换算法进行替换
Posted Cassie_hkx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟虚拟存储系统的工作原理,使用 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; }
以上是关于模拟虚拟存储系统的工作原理,使用 LRU 页面替换算法进行替换的主要内容,如果未能解决你的问题,请参考以下文章
(计算机组成原理)第三章存储系统-第六节3:页面置换算法(FIFO,近期最少使用算法-LRU,LFU)
最近最少使用 (LRU) 分页算法总是比 FIFO 更有效?