当前位置:文档之家› 操作系统-页式虚拟存储管理程序模拟

操作系统-页式虚拟存储管理程序模拟

实验3:页式虚拟存储管理程序模拟
实验目的:编写程序来模拟计算机的两种调度方式:
(1)先进先出算法
(2)最近最少使用算法
程序设计
FIFO页面置换算法
1在分配内存页面数(AP)小于进程页面数(PP)时,当然是最先运行的AP个页面放入内存。

2这时有需要处理新的页面,则将原来内存中的AP个页面最先进入的调出(是以称为FIFO),然后将新页面放入。

3以后如果再有新页面需要调入,则都按2的规则进行。

算法特点:所使用的内存页面构成一个队列。

LRU页面置换算法
1当分配内存页面数(AP)小于进程页面数(PP)时,当然是把最先执行的AP个页面放入内存。

2当需要调页面进入内存,而当前分配的内存页面全部不空闲时,选择将其中最长时间没有用到的那个页面调出,以空出内存来放置新调入的页面(称为LRU)。

算法特点:每个页面都有属性来表示有多长时间未被CPU使用的信息。

结果分析
#include<iostream>
#include<time.h>
using namespace std;
const int MaxNum=320;//指令数
const int M=5;//内存容量
int PageOrder[MaxNum];//页面请求
int Simulate[MaxNum][M];//页面访问过程
int PageCount[M],LackNum;//PageCount用来记录LRU算法中最久未使用时间,LackNum记录缺页数
float PageRate;//命中率
int PageCount1[32];
bool IsExit(int i)//FIFO算法中判断新的页面请求是否在内存中
{ bool f=false;
for(int j=0;j<M;j++)
{if(Simulate[i-1][j]==PageOrder[i])//在前一次页面请求过程中寻找是否存在新的页面请求{ f=true; }
}
return f;
}
int IsExitLRU(int i)//LRU算法中判断新的页面请求是否在内存中
{ int f=-1;
for(int j=0;j<M;j++)
{if(Simulate[i-1][j]==PageOrder[i])
{ f=j; }
}
return f;
}
int Compare()//LRU算法找出内存中需要置换出来的页面
{ int p,q;
p=PageCount[0];
q=0;
for(int i=1;i<M;i++)
Simulate[j][k]=PageOrder[j];
else
Simulate[j][k]=Simulate[j-1][k];
}
//LackNum++;
}
for(x=M;x<MaxNum;x++)
{ for(int t=0;t<M;t++)//先将前一次页面访问过程赋值给新的页面访问过程{ Simulate[x][t]=Simulate[x-1][t]; }
if(!IsExit(x))//根据新访问页面是否存在内存中来更新页面访问过程
{ LackNum++;
Simulate[x][y%M]=PageOrder[x];
y++;
}
}
PageRate=1-((float)LackNum/(float)MaxNum);//算出命中率
OutPut();
}
//最近最不常用调度算法(LRU)
void YourChoice(int choice)
{ switch(choice)
{ case 1:
cout<<"----------------------------------------------------------"<<endl;
cout<<"FIFO算法结果如下:"<<endl;
FIFO();
break;
case 2:
cout<<"----------------------------------------------------------"<<endl;
cout<<"LRU算法结果如下:"<<endl;
LRU();
break;
case 3:
break;
default:
cout<<"重新选择算法:1--FIFO 2--LRU 3--退出"<<endl;
cin>>choice;
YourChoice(choice);
}
}
void main()
{ int choice,i=1;
while(i)
{ cout<<"请选择算法:1--FIFO 2--LRU 3--退出"<<endl;
cin>>choice;
if(choice==3)
{i=0;
}
else
{ YourChoice(choice); } }
}。

相关主题