《实验一:分页存储管理模拟实验.docx》由会员分享,可在线阅读,更多相关《实验一:分页存储管理模拟实验.docx(5页珍藏版)》请在第一文库网上搜索。
1、实验一:分页存储管理模拟实验1 .实验要求:掌握分页存储管理的基本概念和实现方法。要求编写一个模拟的分页管理程序,能对一个已有的程序实现分页显示。2 .数据结构:(1)数据文件:在磁盘上创建一个包含1000个数据的文件datatxt从。开始,每100个数为一页。(2)页面映像表包括:页号、中断位、块号。(3)内存缓冲区:申请存放3()()个字的缓冲区,设每1()()个字为一个内存块。初始状态:将数据文件的第一个页面装入到该缓冲区的第0块。(4)页面置换表:页面置换表的表项为3项,一个替换指针。采用先进先出页面置换算法。3 .程序算法:(1 )主程序:建立一个用户数据文件,初始化操作系统的数据结
2、构;并装入用户数据文件的第一页。(2)调页程序:当读入数据的逻辑地址对应的块不在内存时,调用调页程序。该程序负责从数据文件中调入所需的页。(3)置换算法:当内存缓冲区中没有空闲块时,依置换策略选择一个可置换的页。4 .源程序#include#includestruct data(int page;int block;int flag;number10;struct rename(int block;int page;name4;int main()(FILE *fp;int count 1 ,count2,replace=0;int buffer l10100 ,buffer210100;ch
3、ar num;for(countl =0;countl 10;countl +)for(count2=0;count2 100;count2+)buffer 1 count lcount2= 100*count 1 +count2;if(fp=fopen(ndata.txt,wb)=NULL)(fprintf(stderr,error opening filesystem, pause)exit(l);if(fwrite(bufferl,sizeof(int), 1000,fp)!=1000)fprintf(stderr,nerror writing fileexit(l);if(fclose
4、(fp)=EOF) printf(nclose file error*);exit(l);)printf(The page & The blocknu);for(countl =0;countl 4;countl +)(if(fp=fopen(,data.txt,7,rb,)=NULL)(fprintf(stderr,error opening fileexit(l);)fseek(fp, 100*sizeof(int)*countl ,0);if( fread(buffer2countl,sizeof(int),l OO,fp)!=100) fprintf(stderr,error writ
5、ing fileexit(l);)if(fclose(fp)=EOF)(printf(,nclose file error);exit(l);)printf(, %d%dnu,count 1,count 1);for(countl =0;countl 10;countl +)(if(countl4)(numbercountl .page=countl;number count 1 hblock=countl;numbercount 1 .flag=0;)elsenumbercountl.page=countl;number count 1 hblock=countl;numbercount 1
6、 .flag= 1;)for(countl =0;countl 4;countl +)namecount 1 .page=count 1;namecount 1 .block=count 1;)while(l)(printf(Input the address: number page(0-9) nn);scanf(H%dH,&countl);printf(Input the address: department(0-99)n);scanf(n%dn,&count2);if(count 1 9) continue;if(count299) continue;if(numbercountl f
7、ag=0)printf(l,The address: %dn,buffer2namecountl .blockcount2);elsenumber replace .block=count 1;numberreplace.flag=l;numbercount 1 .flag=O;namereplace.block=replace;if(fp=fopen(,data.txt,V,rb)=NULL)(fprintf(stderr5error opening file J);exit(l);fseek(fp, 100*sizeof(int)*count 1,0);if(fread(buffer2 r
8、eplace ,sizeof(int),l OO,fp)!=100)(fprintf(stderr,error writing fileexit(l);)if(fclose(fp)=EOF)(printf(,nclose file error”);exit(l);)printf(,The address: %dn,buffer2replacecount2);replace=(replace 1)%4;)namecount 1 .page=count 1;namecount 1 .block=count 1;)while(l)(printf(Input the address: number p
9、age(0-9) nn);scanf(H%dH,&countl);printf(Input the address: department(0-99)n);scanf(n%dn,&count2);if(count 1 9) continue;if(count299) continue;if(numbercountl fag=0)printf(l,The address: %dn,buffer2namecountl .blockcount2);elsenumber replace .block=count 1;numberreplace.flag=l;numbercount 1 .flag=O;
10、namereplace.block=replace;if(fp=fopen(,data.txt,V,rb)=NULL)(fprintf(stderr5error opening file J);exit(l);fseek(fp, 100*sizeof(int)*count 1,0);if(fread(buffer2 replace ,sizeof(int),l OO,fp)!=100)(fprintf(stderr,error writing fileexit(l);)if(fclose(fp)=EOF)(printf(,nclose file error”);exit(l);)printf(,The address: %dn,buffer2replacecount2);replace=(replace 1)%4;)printf(,The page & The blocknH);for(count 1 =0;countl 4;countl +)printf(, %d%d n,countl,numbercountl.block);)return 0;