请求分页管理模拟实现的C语言源代码

本大侠虽然对游戏方面知道的不少但是对操作系统和C语言的了解却不多由于课程设计需要求高手帮我编写下请求分页管理模拟实现C语言的源代码最好能是自己编写并在VISUALC++上... 本大侠虽然对游戏方面知道的不少 但是对操作系统和C语言的了解却不多 由于课程设计需要 求高手帮我编写下请求分页管理模拟实现C语言的源代码 最好能是自己编写并在VISUAL C++上运行没有问题的源代码 包括1/3左右重要地方的注释 不胜感激
当然是操作系统的课设 请仔细看问题
展开
 我来答
maocraft
推荐于2016-03-04 · TA获得超过1694个赞
知道小有建树答主
回答量:527
采纳率:0%
帮助的人:304万
展开全部
这个程序我做过,现在给你!!写了很久的!!

#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();

}
}
茧成丝织成牛皮k
2008-09-04 · TA获得超过394个赞
知道小有建树答主
回答量:778
采纳率:0%
帮助的人:460万
展开全部
余数为页内偏移量。
然后根据段号和段内页号获得物理块号。把物理块号乘以页的大小(2的12次)+页内偏移量。即物理地址。

资料:http://cs.sjzri.edu.cn/2005os/lesson4.2-3.htm
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ID就是这样诞生
2008-09-04
知道答主
回答量:96
采纳率:0%
帮助的人:0
展开全部
去这里面下:
http://download.csdn.net/source/378303

模拟代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小小口为碑8113
2008-09-03 · 超过10用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:32万
展开全部
去这里面下:
http://download.csdn.net/source/378303

模拟代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1d8b1f751
2008-09-06 · 超过22用户采纳过TA的回答
知道答主
回答量:173
采纳率:0%
帮助的人:0
展开全部
哪门课程的课程设计呢?操作系统?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式