问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

页面调度算法的实现和分析源码

发布网友 发布时间:2022-05-03 00:41

我来回答

1个回答

热心网友 时间:2023-10-10 04:37

dev c++

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct mem
{
int num;
int v;
}meme;
static int process[1024],L,M;
void LRU();
void FIFO();
void get();
int menu();

int main()
{
menu();
system("pause");
}

int menu()
{
int x;
while(1)
{
printf("************************************************\n\n");
printf("*************1.输入页面地址流长度***************\n");
printf("*************2.输入存储块数目 ***************\n");
printf("*************3.获得页面地址流 ***************\n");
printf("*************4.FIFO算法 ***************\n");
printf("*************5.LRU算法 ***************\n");
printf("*************6.退出 ***************\n\n");
printf("************************************************\n\n");
printf("请选择:");
scanf("%d",&x);
switch(x)
{
case 1:printf("\n请输入页面地址流长度L(10<L<100):");scanf("%d",&L);break;
case 2:printf("\n请输入输入存储块数目M(3<=M<=5):");scanf("%d",&M);break;
case 3:printf("\n获得页面地址流为:");get();break;
case 4:printf("\n算法:FIFO L=%d M=%d",L,M);FIFO();break;
case 5:printf("\n算法:LRU L=%d M=%d",L,M);LRU();break;
case 6:exit(0);break;
default:printf("\n输入错误!");break;
}
printf("\n\n");
}
}

void get()
{
srand((unsigned)time(NULL));
for(int i=0;i<L;i++)
{
process[i]=rand()%10;
printf("%d ",process[i]);
}
}

void FIFO()
{
int i = 0, j = 0,k=0,x,y;
int replace,count=0;
meme memery[M];
printf("\n页号");
for(k=0;k<M;k++){printf("\t块%d",k+1);memery[k].num=-1;}
printf("\t淘汰\t缺页统计");

for(i = 0; i<L; i++) //对输入序列进行循环
{
x=0;y=0; //置x,y初值为0
for(j = 0; j <M; j++) //对三个内存块进行循环,先查找有没有与即将访问页号相同的
if(memery[j].num == process[i])
{ x=1;//有相同的则置x为1
replace=-2;
break;//跳出此次内存块循环
}

if(x==0)//没有与即将访问页号相同的内存块
{
for(j = 0; j <M; j++)//对内存块循环,查找有没有空内存块
if(memery[j].num==-1)
{
y=1;//有则置y为1
replace=-1;count++;
memery[j].num=process[i];// 置此内存块为访问页号
if(j!=0) memery[j-1].v=0;//置上一个访问块v为0
memery[j].v=1;//置此块v为1
break;//跳出此次内存块循环
}
}

if(x==0&&y==0)//既没有与即将访问页号相同的内存块也没有空内存块
{
for(j=0;j<M;j++)//对内存块循环,查找出v=1的内存块
{
if(memery[j].v==1)
{
memery[j].v=0;//置此块v为0
count++;
if(j!=M-1)
{
replace=memery[j+1].num;
memery[j+1].num=process[i]; //置下个内存块为访问页号块
memery[j+1].v=1;//置下个内存块v为1
}
else
{
replace=memery[0].num;
memery[0].num=process[i]; //置下个内存块为访问页号块
memery[0].v=1;//置下个内存块v为1
}
break;
}
}
}

printf("\n%d",process[i]);
for(j = 0 ;j <M; j++) //打印每次访问后的情况
printf("\t%d",memery[j].num);
if(replace!=-2)
printf("\t%d",replace);
else printf("\t");
printf("\t%d",count);
}
}

void LRU()
{
int i = 0, j = 0,k=0,x,y;
int replace,count=0;
meme memery[M];
printf("\n页号");
for(k=0;k<M;k++){printf("\t块%d",k+1);memery[k].num=-1;}
printf("\t淘汰\t缺页统计");

for(i = 0; i<L; i++) //对输入序列进行循环
{
x=0;y=0; //置x,y初值为0
for(j = 0; j<M; j++) //对三个内存块进行循环,先查找有没有与即将访问页号相同的
if(memery[j].num == process[i])
{ x=1;//有相同的则置x为1
replace=-2;
memery[j].v=0;//置此块v为0
for(k=0;k<M;k++)
if(k!=j&&memery[k].num!=-1)memery[k].v++;//其他不为-1页v++
break;//跳出此次内存块循环
}

if(x==0)//没有与即将访问页号相同的内存块
{
for(j = 0; j <M; j++)//对内存块循环,查找有没有空内存块
if(memery[j].num==-1)
{
y=1;//有则置y为1
replace=-1; count++;
memery[j].num=process[i];// 置此内存块为访问页号
memery[j].v=0;//置此块v为0
for(k=0;k<M;k++)
if(k!=j&&memery[k].num!=-1)memery[k].v++;//其他不为-1页v++
break;//跳出此次内存块循环
}
}

if(x==0&&y==0)//既没有与即将访问页号相同的内存块也没有空内存块
{
int m=memery[0].v;
for(j = 0; j < M; j++)
{
if(memery[j].v>m)
m=memery[j].v;
}//查找出v最大的内存块m
for(j=0;j<M;j++)//对内存块循环,v=m的内存块
{
if(memery[j].v==m)
{
replace=memery[j].num;
count++;
memery[j].num=process[i]; //置此内存块为访问页号块
memery[j].v=0;//置此块v为0
}
else memery[j].v++;//其他块v++
}
}

printf("\n%d",process[i]);
for(j = 0 ;j <M; j++) //打印每次访问后的情况
printf("\t%d",memery[j].num);
if(replace!=-2)
printf("\t%d",replace);
else printf("\t");
printf("\t%d",count);
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孤胆枪手怎么设置局域网啊、 我家小狗刚领来,没有名字,拜托大家起个名字。 护肤品代加工 水浒Q传跨服PK是怎么回事啊 新水浒Q传什么叫PK保护状态,上号不到一分钟就被打,求解 水浒Q传 为什么要pk有什么好处? 为什么贷款每次都审核失败 有谁能说一下手机贷审核不通过的原因吗?我都审核好多次了都不能通过... 贷款审核失败是什么原因 为什么贷款未通过审核 常用的网站分析方法有哪些? 常见的网站分析工具中,对于转化率的计算,一般以什么为分子 WEB超链分析算法的超链分析基本原理 怎么能成为 QQ等级达人 qq等级达人标签如何点亮 充电宝输入是5V二2OOOmA是什么意思 微信代理是什么?怎么在微信上买东西? 在微信做代理,怎么让买家付钱 智力燕麦片怎么样 如何投诉桂林智强食品开发有限公司的“智力核桃高钙营养燕麦片”问题? 常见的燕麦片,我想知道包装袋里面的一小包大概多少克,我买的是智力燕麦片! 喝智力燕麦片,纯燕麦片,里面除了燕麦片在没有其他东西了,能减肥吗 智力牛奶加钙燕麦片会不会发胖?有什么好处? 智力奶香原味经典麦片每包卡路里 智力牛奶加钙营养燕麦片适合那些人喝 智力的纯燕麦片 7716500038博世燃气采暖炉使用说明书? 智仁燕麦片有多少年历史 在超市买了一袋智力燕麦片,结果煮不烂!燕麦片煮不烂吗?是不是假的 智力麦片好吃吗 网络爬虫采用哪种算法策略 如何使用站长工具分析自己网站 怎么估算一个新网站的访问量?最好能有什么样的算法来估算。 百度是如何判断网页的相关性? 网站优化有哪次步骤? 请教经验:怎样保证网站的排名靠前,如何对网站进行总体的分析? jdk7对应oracle哪个版本 银行卡密码忘了绑定手机咋办 银行卡密码忘记了能用绑定手机更改吗 京东回收冰箱评价在哪里看 有没有什么适合手机铃声的歌啊 要中文版的 JDBC的版本和Oracle Driver的版本怎样对应 有没有什么好听的手机铃声?中文的比较好。 谁推荐几首好听的中文手机铃声(高潮版)? 求好听的手机来电铃声 中文版的 要流行的 谢谢各位了 适合做女生手机铃声的中文歌曲(温柔版)有哪些!? 什么歌制作手机铃声好听,要中文版的歌,适合90后的,要现代歌不要老歌。 寻找耽美1现代的2老师受,学生攻3一受多攻4还带道具的! 一受多攻,喜欢用道具 李广元的介绍