1操作系统实验三报告一.实验名称:分页存储管理二.实验目的:了解分页存储管理在内存空间分配的作用三.实验内容:分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,相应的,也把内存空间分成与页面相同大小的若干个存储块,称为物理块或页框,同样加以编号,在为进程分配内存时,以块为单位将进程的若干个也分别装入到多个可以不相邻的物理块中。系统为每个进程建立了一张页面映像表,简称页表。位示图是利用二进制的一位来表示磁盘中的一个盘块的使用情况,这里用位示图来表示内存分配情况。四.实验代码#includestdafx.h#includestdlib.h#includestdio.htypedefintdatatype;typedefstructnode{datatypepageNum,blockNum;structnode*next;}linknode;typedeflinknode*linklist;linklistcreatlinklist(intn){linklisthead,r,s;intx,y,i=0;head=r=(linklist)malloc(sizeof(linknode));printf(开始创建页表\n);printf(请分别输入页表的页号及块号(-1表示空):\n);printf(\n页号块号\n);while(in){scanf(%d%d,&x,&y);s=(linklist)malloc(sizeof(linknode));s-pageNum=x;s-blockNum=y;r-next=s;r=s;i++;}r-next=NULL;returnhead;}voidprint(linklisthead){linklistp;p=head-next;printf(\n该页表为:);printf(\n页号块号\n);while(p){printf(%d%7d\n,p-pageNum,p-blockNum);p=p-next;}printf(\n);}/*初始化位示图,将值全置为零,0表示空闲状态*/voidinit(intg[100][100],intN){inti,j;for(i=0;i100;i++){for(j=0;j100;j++){g[i][j]=0;}}2g[N+1][0]=N*N;}/*对作业的每一个页进行分配对应位示图里的块*/linklistDis(linklisthead,intg[100][100],intn,intN){linklistp;inti,j;p=head-next;if(n=g[N+1][0]){while(p){for(i=0;iN;i++){for(j=0;jN;j++){if(g[i][j]==0){p-blockNum=N*i+j;g[i][j]=1;g[N+1][0]--;break;}}break;}p=p-next;}returnhead;}}/*回收已经完成的页*/linklistRecy(linklisthead,intg[100][100],intn,intN){inti,j;linklistp;p=head-next;while(p&&p-pageNum!=n){p=p-next;}if(p){i=p-blockNum/N;j=p-blockNum%N;g[i][j]=0;g[N+1][0]++;p-blockNum=-1;}returnhead;}/*打印位示图*/voidprintStr(intg[100][100],intN){inti,j;printf(此时位示图为:\n);for(i=0;iN;i++){printf();printf(%d,i);}printf(\n);for(i=0;iN;i++){printf(%d,i);for(j=0;jN;j++){printf();printf(%d,g[i][j]);}printf(\n);}}voidmain(){intn,N,x,y;intgraph[100][100];linklisthead;printf(输入位示图的字长:);scanf(%d,&N);printf(输入作业的页数:);scanf(%d,&n);head=creatlinklist(n);print(head);init(graph,N);3printStr(graph,N);printf(\n现在进行作业分配:);head=Dis(head,graph,n,N);print(head);printStr(graph,N);printf(是否回收已完成的页,“是”1,“否”0:);scanf(%d,&x);if(x)//判断是否要回收{printf(\n请输入您要回收的页号:);scanf(%d,&y);head=Recy(head,graph,y,N);print(head);printStr(graph,N);}}五.实验截图:4六.实验心得:通过这次实验,了解到分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,相应的,也把内存空间分成与页面相同大小的若干个存储块,称为物理块或页框,同样加以编号,在为进程分配内存时,以块为单位将进程的若干个也分别装入到多个可以不相邻的物理块中。