//此为OPT算法,页号随机生成
//在页数小于物理块值N时,用#表示剩余的物理块位置值(没有赋值)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int N;//物理块
int length,l;//逻辑页号序列长度
int list[1005];//用户输入的页号序列
int sort[30];//用于获取当前物理块中在未来出现的页号的排序,不存在的排最后
int UseOrder[30];//物理块当中的元素
int i,j,k,p=0,q=0,m=-1,c=0;
double rate;
for(i=0;i<30;i++)
UseOrder[i]=-10;
printf("OPT请设置物理块N的值:\n");
scanf("%d",&N);
printf("请设置逻辑页号序列长度:\n");
scanf("%d",&length);
l=length;
printf("请输入%d个页号:\n",length);
srand((int)time(NULL));
for(i=0;i<length;i++)
{
list[i]=rand()%10;
printf(" %d ",list[i]);
if((i+1)%10==0)
printf("\n");
}
printf("\n接下来显示页面置换过程(缺页):\n");
while(l>0)
{
for(i=0;i<N;i++)
{
if(UseOrder[i]==list[p])
break;
else
{
if(i>=N-1)
{
for(j=0;j<N;j++)//得出当前物理块的页号在未来存在性强弱排序
{
for(k=p;k<length;k++)
{
if(list[k]==UseOrder[j])//如果在为扫描的区域内找到以其位置到当前位置的距离为据赋值
{
sort[j]=k-p;
break;
}
else
if(k>=length-1)//如果在未扫描区域找不到该序列号将其排在最后
sort[j]=length-1-p+j;
}
}
for(j=0;j<N;j++)
if(UseOrder[j]==-10)
sort[j]=100+j;
//for(j=0;j<N;j++)
//printf("sort[%d]=%d\n",j,sort[j]);
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
if(sort[j]<sort[k])
c++;
else
{
if(c==0&&k>=N-1)
m=j;
}
}
c=0;
if(m!=-1)
break;
}
// printf("m=%d\n",m);
UseOrder[m]=list[p];//替换
m=-1;
c=0;
for(j=0;j<N;j++)//打印缺失物理块的页号
{
if(UseOrder[j]==-10)
printf(" # ");
else
printf(" %d ",UseOrder[j]);
}
printf("\n");
q++;//记录替换页的物理块位置以及缺页次数
}
}
}
p++;//记录页号序列的进度
l--;//记录总进度
}
rate=(q)*1.0/(length*1.0);
printf("缺页次数为:%d\n",q);
printf("缺页率为:%.3lf\n",rate);
printf("命中率为:%.3lf\n",1-rate);
return 0;
}
操作系统页面置换FIFO,LRU,OPT,CLOCK
需积分: 27 17 浏览量
2015-01-06
23:36:03
上传
评论
收藏 4KB RAR 举报
憨憨的沉思
- 粉丝: 3
- 资源: 4
最新资源
- 基于STM32单片机心率脉搏监测健康运动计步系统源码带视频演示.7z
- mmexport1713192608513.mp4
- 斯特林V4发动机 斯特林V4发动机
- 基于C实现的N阶数字正方形 ;N阶数字三角形;N阶数字递减三角形;乘法表
- 基于分水岭算法的图像分割的python源码(课程设计).zip
- 基于Java 实现的二进制十进制之间的相互转换
- Pytorch实现基于卷积神经网络的面部表情识别项目源码+数据集+全部资料(毕业设计).zip
- Pytorch实现基于深度学习卷积神经网络的面部表情识别项目源码+面部表情数据集(人脸面部表情识别项目).zip
- 淘金小游戏助手.apk
- 基于卷积神经网络的人脸面部表情识别项目源码+面部表情数据集+训练好的模型(人脸面部表情识别项目).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈