操作系统-存储器管理实验C语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
printf("读入逻辑页号:");
scanf("%d",&logicPage);
while(logicPage>=10)
{
printf("逻辑号出界!重新输入");
printf("读入逻辑号:");
scanf("%d",&logicPage);
}
printf("读入对应的物理页架:");
scanf("%d",&pagelist[logicPage].block);
printf(" * 1-虚拟页式管理的地址重定位*\n");
printf(" * 0-exit *\n");
printf(" **********************************\n");
}
/*主函数*/
int main()
{
int choice;
printfunc();
do
{printf("please input the number:");
}pagelist[10];
int po;//队列标记
int t[M];
po=0;
//页表初始化
void initຫໍສະໝຸດ Baidu)
{ int i;
printf("页表初始化\n");
for(i=0;i<=9;i++)
{pagelist[i].flag=0; //所有的逻辑页都不在内存
printf("请输入第%d个逻辑页在外存的块号:",i);
scanf("%d",&pagelist[i].disk);
}
}
//地址重定位,请同学们自己完成
void work()
{
int i,logicPage,lPage,pageAddress,phsicAddress;
printf("读入四个逻辑页到内存中,并输入对应的物理页架:\n");
for(i=0;i<M;i++)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define SizeOfBlock 128
#define M 4
struct info//页表
{
int block;//物理页架号
int disk;//在磁盘上的物理块号
int flag; //内外标志
scanf("%d",&choice);
getchar();
switch (choice)
{case 1:
init(); //页表初始化
work();//地址重定位
printfunc();
break;
case 0:exit(0);
}
}while(1);
}
pagelist[po].disk=pagelist[po].block;
pagelist[po].flag=0;
pagelist[po].block=pagelist[lPage].block;
pagelist[lPage].flag=1;
phsicAddress=pagelist[po].block*SizeOfBlock+pageAddress;
{
for(i=0;i<M;i++)
{
if(lPage==i)
{
phsicAddress=pagelist[lPage].block*SizeOfBlock+pageAddress;
printf("物理地址是:%d\n",phsicAddress);
break;
}
}
}
else
{
printf("发生缺页中断!");
pagelist[logicPage].flag=1;
}
do{
printf("读入逻辑页号和页内地址:");
scanf("%d",&lPage);
scanf("%d",&pageAddress);
if(lPage>=10)
printf("地址越界!\n");
else if(pagelist[lPage].flag==1)
po++;
if(po>4)
{
po=0;
}
printf("物理地址是:%d\n",phsicAddress);
}
}while(lPage!=-1);
}
/*输出菜单*/
void printfunc(void)
{printf(" **********************************\n");
printf("读入逻辑页号:");
scanf("%d",&logicPage);
while(logicPage>=10)
{
printf("逻辑号出界!重新输入");
printf("读入逻辑号:");
scanf("%d",&logicPage);
}
printf("读入对应的物理页架:");
scanf("%d",&pagelist[logicPage].block);
printf(" * 1-虚拟页式管理的地址重定位*\n");
printf(" * 0-exit *\n");
printf(" **********************************\n");
}
/*主函数*/
int main()
{
int choice;
printfunc();
do
{printf("please input the number:");
}pagelist[10];
int po;//队列标记
int t[M];
po=0;
//页表初始化
void initຫໍສະໝຸດ Baidu)
{ int i;
printf("页表初始化\n");
for(i=0;i<=9;i++)
{pagelist[i].flag=0; //所有的逻辑页都不在内存
printf("请输入第%d个逻辑页在外存的块号:",i);
scanf("%d",&pagelist[i].disk);
}
}
//地址重定位,请同学们自己完成
void work()
{
int i,logicPage,lPage,pageAddress,phsicAddress;
printf("读入四个逻辑页到内存中,并输入对应的物理页架:\n");
for(i=0;i<M;i++)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define SizeOfBlock 128
#define M 4
struct info//页表
{
int block;//物理页架号
int disk;//在磁盘上的物理块号
int flag; //内外标志
scanf("%d",&choice);
getchar();
switch (choice)
{case 1:
init(); //页表初始化
work();//地址重定位
printfunc();
break;
case 0:exit(0);
}
}while(1);
}
pagelist[po].disk=pagelist[po].block;
pagelist[po].flag=0;
pagelist[po].block=pagelist[lPage].block;
pagelist[lPage].flag=1;
phsicAddress=pagelist[po].block*SizeOfBlock+pageAddress;
{
for(i=0;i<M;i++)
{
if(lPage==i)
{
phsicAddress=pagelist[lPage].block*SizeOfBlock+pageAddress;
printf("物理地址是:%d\n",phsicAddress);
break;
}
}
}
else
{
printf("发生缺页中断!");
pagelist[logicPage].flag=1;
}
do{
printf("读入逻辑页号和页内地址:");
scanf("%d",&lPage);
scanf("%d",&pageAddress);
if(lPage>=10)
printf("地址越界!\n");
else if(pagelist[lPage].flag==1)
po++;
if(po>4)
{
po=0;
}
printf("物理地址是:%d\n",phsicAddress);
}
}while(lPage!=-1);
}
/*输出菜单*/
void printfunc(void)
{printf(" **********************************\n");