LRU算法之实现
来源:互联网 发布:程序员上班很闲干嘛 编辑:程序博客网 时间:2024/06/10 08:04
理念理念,写个LRU算法,据说这个是目前公认比较好的页面置换算法,操作系统不能白学,呵呵,下面就是我的实现代码,方法有点野,不过感觉要比用结构体数组做要节约点……
#include<iostream>
#include<vector>
using namespace std;
int Check(int* curPage,int page,int blockNum)//检验是否缺页
{
int i;
for(i=0;i<blockNum;i++)
if(page==curPage[i])
return 0;//说明没有缺页
return 1;//说明缺页了
}
int GetPosition(int* curPage,int page,int blockNum)//获取要替换的位置
{
int i;
for(i=0;i<blockNum;i++)
{
if(curPage[i]==page||curPage[i]==-1)
return i;
}
return -1;
}
int GetStep(int * curPage,int *page,int curPosition,int blockNum)
{
int i,j,step=0,k=0;
vector<int> record(blockNum);//记录检索的出现情况
for(i=0;i<blockNum;i++)
record[i]=0;
for(i=curPosition-1;i>=0;i--)
{
step++;
for(j=0;j<blockNum;j++)
{
if(record[j]==0&&page[i]==curPage[j])
{
record[j]=1;
k++;
}
if(k==blockNum)
return step;
}
}
return blockNum;
}
void main()
{
system("color 0E");
//变量声明
int pageNum,blockNum;//定义页面数和物理块数
int i,j;//循环变量
int lackpageNum=0;//缺页数
//数据提交
cout<<"请输入物理块的个数:";//用户输入物理块个数
cin >> blockNum;
vector<int> curPage(blockNum);//存放物理块中的页面
cout<<"请输入页面数:";//用户输入页面数
cin>>pageNum;
vector<int> page(pageNum);
cout<<"请输入要访问的页面顺序:";
for(i=0;i<pageNum;i++)//用户输入页面访问顺序
cin>>page[i];
int step=blockNum;
//实现算法
cout<<"详细信息:"<<endl;
for(i=0;i<blockNum;i++)
curPage[i]=-1;//填充注明内存为空
int *pcurPage=&curPage[0];//引用动态数组
int *ppage=&page[0];
for(i=0;i<pageNum;i++)
{
if(Check(pcurPage,page[i],blockNum)==1)
{
lackpageNum++;
curPage[GetPosition(pcurPage,page[i-GetStep(pcurPage,ppage,i,blockNum)],blockNum)]=page[i];//置换
cout<<"缺页号为:"<<page[i]<<" ";
}
else
cout<<" ";
cout<<"内存情况:";
for(j=0;j<blockNum;j++)
{
if(curPage[j]==-1)
cout<<" ";
else
cout<<curPage[j];
cout<<" ";
}
cout<<endl;
}cout<<"缺页率为:"<<((double)lackpageNum/(double)pageNum)*100<<"%"<<endl;
}
- LRU算法之实现
- 笔试题(LRU)算法之JAVA实现
- LRU算法的实现
- LRU算法的实现
- LRU算法的实现
- LRU算法 java实现
- LRU算法的实现
- LRU算法的实现
- LRU算法及实现
- LRU算法的实现
- LinkedHashMap实现LRU算法
- LRU算法实现
- LRU 算法实现
- LRU算法的实现
- LRU java算法实现
- LRU算法实现
- LRU缓存算法实现
- Java实现LRU算法
- 网络日志(2010.5.30)
- 关于T264代码中IDCT模块在DSP上的汇编优化
- 衰 的一天
- 终于完成了地址收录程序V1.0版
- 指针和引用的区别
- LRU算法之实现
- 使用 Trace32 对 FLASH 编程
- 网页游戏排行榜2010前十名
- Linux VFS文件系统之打开(Open)文件
- 解析 Linux 中的 VFS 文件系统机制
- 用DataGrid来更新数据库
- 将EXCEL导入数据库之方法
- 自动设置ComboxBox控件或ListBox控件 水平滚动条
- 关于session与cookie区别