欢迎来到天天文库
浏览记录
ID:50915703
大小:92.77 KB
页数:8页
时间:2020-03-15
《基本分页存储管理.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《操作系统》课程实验报告实验名称:基本分页储存管理实验五基本分页存储管理实验目的:熟悉并掌握基本分页存储管理的思想。熟悉并掌握基本分页存储管理的分配和回收方式,并能够模拟实现。实验内容:用高级语言模拟实现基本分页存储管理,要求:1、内存空间的初始化——可以由用户输入初始内存空间各个物理块情况。(用二维矩阵的方式按物理块号,逐行给出每个物理块的状态,1——表示已分配,0——表示未分配,并能够将行标、列标转换为对应的物理块号,以查看或修改每一个块的状态,要求:初始时部分物理块已分配)2、基本分页的分配过程:由用户输入作业号和作业的大小(这里的大小是
2、逻辑页面数),实现分配过程:空间充足,分配,修改状态矩阵的相应位置的值(值由0转变为1),并用专门的数据记录下该作业占用的物理块的块号,以备删除作业时回收空间。3、作业空间的的回收:用户输入作业号,实现分区回收(通过相应的数据结构找到该作业占有的物理块号,将块号转变成对应的行标、列标,将对应位置的值由1转变成0就完成了回收)4、分区的显示:任何时刻,可以查看当前内存的情况(显示记录内存情况的矩阵的值)要求考虑:(1)内存空间不足的情况,要有相应的显示;(2)作业不能同名,但是删除后可以再用这个名字;(3)作业空间回收是输入作业名,回收相应的空间
3、,如果这个作业名不存在,也要有相应的提示。三、实验代码#include#include#defineN100//共有100个内存块intprocess[N][N+1];//存放每个进程的页表intblock[N];//内存块状态标志数组,0:空闲,1:使用intblockCount;//记录当前内存剩余空间intprocessCount;//记录当前进程数boolflag=true;voidinit();voidoutput();boolcreateProcess();boolendProcess();v
4、oidinit(){inti,j;//初始化内存状态标志数组for(i=0;i5、flag=false;}voidoutput(){printf("内存总量:%d块,已用空间:%d块,剩余空间:%d块,进程总数:%d个",N,N-blockCount,blockCount,processCount);if(flag&&blockCount6、=0;}}putchar('');}//输出各进程占用内存详细情况if(processCount>0){printf("内存详细使用情况如下:");for(inti=0;i0){printf("进程号:%d占用内存块(%2d):",i,process[i][0]);for(intj=1,count=0;j<=process[i][0];j++){printf("%2d",process[i][j],count++);if(count==15){putchar('');printf7、("");count=0;}}putchar('');}}}elseprintf("当前内存无进程!");/*//输出空闲内存块if(blockCount>0){printf("空闲内存块(%d):",blockCount);for(intk=0,count=0;k8、{intpid,pages,k=0;loop:printf("请输入进程号(小于%d)和所需页面数:",N);scanf("%d%d",&pid,&p
5、flag=false;}voidoutput(){printf("内存总量:%d块,已用空间:%d块,剩余空间:%d块,进程总数:%d个",N,N-blockCount,blockCount,processCount);if(flag&&blockCount6、=0;}}putchar('');}//输出各进程占用内存详细情况if(processCount>0){printf("内存详细使用情况如下:");for(inti=0;i0){printf("进程号:%d占用内存块(%2d):",i,process[i][0]);for(intj=1,count=0;j<=process[i][0];j++){printf("%2d",process[i][j],count++);if(count==15){putchar('');printf7、("");count=0;}}putchar('');}}}elseprintf("当前内存无进程!");/*//输出空闲内存块if(blockCount>0){printf("空闲内存块(%d):",blockCount);for(intk=0,count=0;k8、{intpid,pages,k=0;loop:printf("请输入进程号(小于%d)和所需页面数:",N);scanf("%d%d",&pid,&p
6、=0;}}putchar('');}//输出各进程占用内存详细情况if(processCount>0){printf("内存详细使用情况如下:");for(inti=0;i0){printf("进程号:%d占用内存块(%2d):",i,process[i][0]);for(intj=1,count=0;j<=process[i][0];j++){printf("%2d",process[i][j],count++);if(count==15){putchar('');printf
7、("");count=0;}}putchar('');}}}elseprintf("当前内存无进程!");/*//输出空闲内存块if(blockCount>0){printf("空闲内存块(%d):",blockCount);for(intk=0,count=0;k8、{intpid,pages,k=0;loop:printf("请输入进程号(小于%d)和所需页面数:",N);scanf("%d%d",&pid,&p
8、{intpid,pages,k=0;loop:printf("请输入进程号(小于%d)和所需页面数:",N);scanf("%d%d",&pid,&p
此文档下载收益归作者所有