操作系统实验页面Word文件下载.docx
《操作系统实验页面Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验页面Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
![操作系统实验页面Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-12/8/956804ec-b97f-448f-97d0-efb5a0c65a98/956804ec-b97f-448f-97d0-efb5a0c65a981.gif)
5、代码
#include"
stdafx.h"
#defineM3//物理页数
#defineN20//需要调入的页数
typedefstructpage{
intnum;
inttime;
inttemp;
}Page;
//物理页项,包括调入的页号和时间
Pagepp[M];
//M个物理页
intqueue1[20],queue2[20],queue3[20];
//记录置换的页
intK=0,S=0,T=0;
//置换页数组的标识
intpos=0;
//记录存在最长时间项
intchangenum=0;
intA[N];
//初始化内存页表项及存储内存情况的空间
voidINIT(){
inti;
for(i=0;
i<
M;
i++){
pp[i].num=-1;
pp[i].time=0;
pp[i].temp=0;
}}
//取得内存中存在时间最久的位置
intGetMax(){
intmax=-1;
if(pp[i].time>
max){
max=pp[i].time;
pos=i;
}
}
returnpos;
}
//检查最长时间不使用页面
intlongestTime(intmxatimep,inttemp){
for(i=temp;
N;
if(pp[0].temp==1&
&
pp[1].temp==1&
pp[2].temp==1){
break;
if(pp[0].num!
=A[i]){
pp[0].time++;
if(pp[0].temp>
=1){
pp[0].time--;
}
else{
pp[0].temp++;
if(pp[1].num!
pp[1].time++;
if(pp[1].temp>
pp[1].time--;
pp[1].temp++;
if(pp[2].num!
pp[2].time++;
if(pp[2].temp>
pp[2].time--;
pp[2].temp++;
if(pp[i].time>
max){
//检查某页是否在内存
intEquation(intfold){
if(pp[i].num==fold)
returni;
return-1;
//检查物理内存是否已满,-1表满,其他不满
intCheck(){
if(pp[i].num==-1)
voidFIFO(intfold,inttemp){
inta,b,c;
a=Equation(fold);
//页已存在
if(a!
=-1){
//页不存在
else{
b=Check();
//内存还有空闲
if(b!
pp[b].num=fold;
//内存已满,需要置换
else{
c=GetMax();
pp[c].num=fold;
pp[c].time=0;
changenum++;
queue1[K++]=fold;
if(pp[i].num!
pp[i].time++;
voidOPT(intfold,inttemp)
{
if(a==-1){//页不在内存
c=longestTime(fold,temp);
queue3[T++]=fold;
voidLRU(intfold,inttemp)
inta,b;
intp;
=-1)//页已在内存
{
//把此项移动到链表最后一项
if(a==2)//此项已经在最后,不需要做任何改动
{}
else
{
p=Equation(-1);
if(p==-1)//链表是满的
{
for(;
a<
2;
a++)
pp[a].num=pp[a+1].num;
pp[2].num=fold;
elseif(p<
=3)//链表不满
p-1;
pp[a].num=fold;
else
=-1)//不满
for(i=0;
i++)
pp[i].num=pp[i+1].num;
pp[2].num=fold;
queue2[S++]=fold;
int_tmain(intargc,_TCHAR*argv[])
intB[N];
INIT();
changenum=0;
printf("
请依次输入%d个页面号:
\n"
N);
scanf_s("
%d"
&
A[i]);
//OPT
);
1.最佳置换算法(Opt)\n"
INIT();
changenum=0;
for(i=0;
B[i]=A[i];
OPT(B[i],i);
printf("
OPT算法,调入页面顺序为:
"
T;
printf("
%3d"
queue3[i]);
\n页面置换次数为:
%6d\n缺页率:
%16.2f\n\n"
changenum,(float)changenum/N);
//FIFO
2.先进先出页面置换算法(FIFO)\n"
FIFO(B[i],i);
FIFO算法,调入页面顺序为:
K;
queue1[i]);
//LRU
3.最近最久未使用算法(LRU)\n"
LRU(B[i],i);
LRU算法,调入页面顺序为:
S;
queue2[i]);
四种算法已全部执行完毕!
return0;