#include<stdio.h>
#include<math.h>
#define n 64 //实验中假定的页表长度,页表的长度实际上是由系统按照作业的长度决定的
#define length 10
struct
{
int lnumber; //页号
int flag; //表示该页是否在主存,“1”表示在主存;“0”表示不在主存
int pnumber; //表示该页所在主存块的块号
int write; //表示该页是否被修改过,“1”表示修改过;“0”表示没有修改过
int dnumber; //表示该页存放在磁盘上的位置,即磁盘块号
}page[n]; //页表定义
int m;
int page_length;
int p[length];
int head;
void page_interrupt(int lnumber)
{
int j;
printf("发生缺页中断%d块\n",lnumber);
j=p[head];
p[head]=lnumber;
head=(head+1)%m;
if(page[j].write==1)
printf("将页%d写回磁盘第%d块\n",j,page[j].dnumber);
page[j].flag=0;
page[lnumber].pnumber=page[j].pnumber;
page[lnumber].flag=1;
page[lnumber].write=0;
printf("淘汰主存块%2d中的页%2d,从磁盘第%d块中调入页%2d\n",page[j].pnumber,j,page[lnumber].dnumber,lnumber);
}
void command(unsigned laddress,int write)
{
unsigned paddress,ad,pnumber,lnumber;
kk:
lnumber=laddress>>10;
ad=laddress&0x3ff;
if(lnumber>=page_length)
{
printf("输出:不存在该页\n");
page_interrupt(lnumber);
}
if(page[lnumber].flag==1)
{
pnumber=page[lnumber].pnumber;
paddress=pnumber<<10|ad;
//物理地址
printf("输出逻辑地址是:%x对应物理地址是:%x\n",laddress,paddress);
if(write==1)
page[lnumber].write=1;
}
else
{
page_interrupt(lnumber);
goto kk;
}
}
main()
{
int lnumber,flag,pnumber,write,dnumber;
unsigned laddress;
int i;
printf("输入页表的信息,创建页表(若页号为-1,则结束输入)\n");
printf("输入页号和辅存地址:");
scanf("%d%d",&lnumber,&dnumber);
i=0;
while(lnumber!=-1)
{
page[i].lnumber=lnumber;
page[i].flag=0;
page[i].write=0;
page[i].dnumber=dnumber;
i++;
printf("输入页号和辅存地址:");
scanf("%d%d",&lnumber,&dnumber);
}
page_length=i;
printf("输入主存块号,主存块数要不大于%d,(以-1结束):",i);
scanf("%d",&pnumber);
m=0;
head=0;
while(pnumber!=-1)
{
if(m<=i)
{
page[m].pnumber=pnumber;
page[m].flag=1;
p[m]=m;
m++;
}
scanf("%d",&pnumber);
}
printf("输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:");
scanf("%d%x",&write,&laddress);
while(write==0||write==1)
{
command(laddress,write);
printf("输入指令性质(1-修改,0-不需要,其他-结束程序运行)和逻辑地址:");
scanf("%d%x",&write,&laddress);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Page-type-store-manager1.rar_page
共1个文件
c:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 66 浏览量
2022-09-20
18:07:47
上传
评论
收藏 1KB RAR 举报
温馨提示
很好的一个实验教程实例——页式存储管理器
资源推荐
资源详情
资源评论
收起资源包目录
Page-type-store-manager1.rar (1个子文件)
第三章页式存储管理器1.c 3KB
共 1 条
- 1
资源评论
朱moyimi
- 粉丝: 64
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功