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

怎么样实现分页管理的缺页调度clock算法C语言代码

发布网友 发布时间:2022-04-26 09:34

我来回答

1个回答

热心网友 时间:2022-05-03 02:05

这个程序我做过,现在给你!!写了很久的!!

#include<stdafx.h>
#include<stdlib.h>
#include<stdio.h>
#define n 64//实验中假定主存的长度
#define m 4//实验中假定每个作业分得主存块块数
int p[m];//定义页
int head=0;
struct
{
short int lnumber;//页号
short int flag;//表示该页是否在主存,"1"表示在主存,"0"表示不在主存
short int pnumber;//该页所在主存块的块号
short int write;//该页是否被修改过,"1"表示修改过,"0"表示没有修改过
short int dnumber;//该页存放在磁盘上的位置,即磁盘块号
short int times;//被访问的次数,用于LRU算法
}page[n];//定义页表
//各个函数的实现如下:
void computer()
{
int i;
for(i=0;i<n;i++)
{
page[i].lnumber = i;
page[i].flag = 0;
page[i].pnumber = 10000;//用10000表示为空
page[i].write = 0;
page[i].dnumber = i;
page[i].times = 0;
}//初始化页表

for(i=0;i<m;i++)
{
page[i].pnumber = i;
}

for(i=0;i<m;i++)
{
p[i] = i;
page[i].flag = 1;
}//初始化页
}
void showpagelist()
{
int i;
printf("\n页号\t是否在主存中\t块 号\t是否被修改过\t磁盘块号\t访问次数\n");
for(i=0;i<n;i++)
{
printf("%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",page[i].lnumber,page[i].flag,page[i].pnumber,page[i].write,page[i].dnumber,page[i].times);
}
}
void showpage()
{
int i;
for(i=0;i<m;i++)
{
printf("\t%d\n",p[i]);
}
}
void transformation() //缺页中断处理
{
unsigned logicAddress,logicNumber,innerAddress,physicsAddress,physicsNumber;
int i, fail = 0;
int method,temppage=0;
short int times = 10000;
printf("请输入一个逻辑地址(四位十六进制数):");
scanf("%x",&logicAddress);//读入逻辑地址
logicNumber = logicAddress >> 10;//得到页号
printf("页号为:%ld\n",logicNumber);
innerAddress = logicAddress & 0x03ff;//得到页内地址
printf("页内地址为:%ld\n",innerAddress);
for(i=0;i<n;i++)
{
if(logicNumber==(unsigned)page[i].lnumber)
{
if(page[i].flag == 1)
{
printf("请求的页面在主存中!\n");
page[i].times++;
physicsNumber = page[i].pnumber;//由页号得到块号
printf("请求的主存块号为:%ld\n",physicsNumber);
physicsAddress = physicsNumber << 10 |innerAddress;//得到物理地址
printf("请求的物理地址为:%ld",physicsAddress);//输出物理地址
break;
}
else
{
printf("请求的页面不在主存中! 将进行缺页中断处理!\n请选择算法!\n");
printf("1.先进先出\n2.最近最少用\n请选择置换算法:");
scanf("%d",&method);
if(method == 1) //采用先进先出算法
{
printf("采用先进先出算法!\n");
fail = p[head];
printf("第%d页将被替换!\n",fail);
p[head] = logicNumber;
head = (head+1) % m;
if(page[fail].write == 1)
printf("第%d页曾被修改过!\n",fail);
page[fail].flag = 0;
page[logicNumber].flag = 1;
page[logicNumber].write = 0;
page[logicNumber].pnumber = page[fail].pnumber;
page[fail].pnumber = 10000;
page[logicNumber].times++;
break;
}
else if(method == 2) //采用最近最少用算法
{
printf("采用最近最少用算法!\n");
for(i=0;i<n;i++)
{
if(page[i].flag == 1)
{
if(page[i].times<times)
{
times = page[i].times;
temppage = page[i].lnumber;
}
}
}
printf("第%d页将被替换!\n",temppage);
for(i=0;i<m;i++)
{
if(p[i] == temppage)
{
p[i] = logicNumber;
}
}
if(page[temppage].write == 1)
printf("第%d页曾被修改过!\n",temppage);
page[temppage].flag = 0;
page[logicNumber].flag = 1;
page[logicNumber].write = 0;
page[logicNumber].pnumber = page[temppage].pnumber;
page[temppage].pnumber = 10000;
page[logicNumber].times++;
break;
}
else
{
printf("你输入有误,即将退出!");
exit(1);
}
}
}
}
}
void main()
{
char c,d,flag='y';
printf("页表正在初始化中...,3秒钟后为你显示页和页表!\n");
computer();
showpage();
showpagelist();
while(flag == 'y' || flag == 'Y')
{
transformation();
printf("是否显示页和页表?(Y/N)");
c = getchar();
c = getchar();
if(c=='Y'||c=='y')
{
showpage();
showpagelist();
}
else
{
while(c=='N'||c=='n')
{
printf("\n是否继续进行请求分页?(Y/N)");
d = getchar();
d = getchar();
if(d=='Y'||d=='y')
{
transformation();
printf("\n是否显示页和页表?(Y/N)");
c = getchar();
c = getchar();
if(c=='Y'||c=='y')
{
showpage();
showpagelist();
}
}
else if (d=='N'||d=='n')
exit(1);
else
printf("输入错误!\n");
}
}
printf("\n是否继续进行请求分页?(Y/N)");
flag = getchar();
flag = getchar();

}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我看曹刿是一个什么样的人 作文 急急急 三赞曹刿300字作文 作文 我心中的英雄曹刿300 关于翻译机离线使用的效果怎么样? 古汉语中有“不可以”这一用法吗? 文言文中"可以"的古今异意 独特嗓音的特征,一般别人模仿起来比较难 我现在还有一个月机会到13岁,想改变一下声音,还有我是个男生 根据《建筑安装工程费用项目组成》(建标[-2013144号),应列入规费的是... 我女儿的电瓶车发票,用我的身份证好上牌照吗,因她本人在异地,请帮... 菜蹲列咋办 时钟(Clock)置换算法中,帧是什么意思? 关于下蹲砍式发左侧上,左侧下旋拍面的问题 试说明改进形clock页面置换算法的基本原理 为什么丁宁很少使用她的绝技,下蹲砍式发球了? nru算法---改进型&quot;clock&quot;算法 “富二代杀妻案”纪实:砍妻60多刀未判死刑,入狱后连伤五人,后来怎样? C++编程,clock置换算法 操作系统,什么是clock算法? 怎样接好蹲砍式强烈侧外旋(乒乓)发球? 奥运会乒乓球为什么不让丁宁蹲砍 高蹲是什么有什么用! 苹果手机传送文件到电脑 苹果手机文件传输到电脑上 十八拦刀为什么被称作刀术中的极品? 跪求邹姓家谱! 邹桐彤取名字好不好 女儿刚诞生,求分析下生辰五行,取名字 帮忙起名个名字 征集名字,姓邹的小男孩。08年10月20日出生 江苏一女子遭醉汉调戏,丈夫理论遭追砍,这种人该如何管制? clock算法扫描顺序是怎样的?,也就是说“时钟”的刻度是怎样个顺序 上古卷轴5怎么练潜行,灰胡子砍几下会还手 改进型 Clock 算法和Clock 算法有何异同点 低蹲瞄高蹲闪好吗? 操作系统CLOCK置换算法的题目,急求解!! 归有光是否真的为了小妾砍了枇杷树? OPT算法,FIFO算法,CLOCK算法和LRU算法 请问直拍,怎么发下蹲砍式发球? 以及马琳的几种发球方法。 请不要抄袭... 谁能给个详细的clock置换算法如题,看了网上有好多版本,指针有的移动有的不移动.谁能给个确定的 把人一只手砍下来判几年? C#语言写的CLOCK算法模拟 请问光纤冷接和热熔有什么区别,区别大吗? 为什么丁宁现在很少使用她的绝技下蹲砍式发球了? 时间函数clock的返回值单位是什么 千年里心法满了涨三功和活力吗?喊话境界是不是蹲心法蹲出来的? cpu时间的计算方法 在杆路上熔接光纤有什么好办法 求改进型clock页面置换算法的完整代码!急!注意是改进型哦!有注释就更好了!全部积分感谢! 操作系统中页面置换算法除最佳置换,FIFO,LRU,CLOCK,LFU,PBA之外,还有哪些算法呢?最好有C程序,有加