欢迎来到天天文库
浏览记录
ID:40842597
大小:163.00 KB
页数:9页
时间:2019-08-08
《操作系统-基本分页存储管理(内有代码)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基本分页存储管理实验目的连续内存分配方式会形成许多“碎片”,虽然可以通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无需再进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式。在分页存储管理方式中,如果不具备页面兑换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具备支持虚拟存储器的功能,它要求把每个作业全部装入内存后方能运行。本实验通过程序模拟操作系统的基本分页存储管理方式,进
2、一步理解这一内存分配方式的原理和特点,加深对理论知识的掌握。实验要求1、用C语言或Java语言编写程序模拟操作系统对内存的基本分页存储管理方式2、程序要能正确对“内存”进行“分配”和“回收”,能接受用户的输入,显示内存的分配情况,并有一定的容错能力。3、每个人独立按时完成实验内容。实验内容本实验假定内存空间已经按块划分,目标程序无需关心内存块大小等底层细节,只需按算法对内存块进行分配即可。程序应该实现以下功能:1、内存初始化。假定内存块共有N个,初始化后的内存空间应该有一部分已经被使用,这可以用随机数或程序内部的其他算法完成。2、程序应该能接受用户输入的进程信息,并为之分
3、配内存,返回分配结果(成功或失败),注意,此处应该考虑到不合法的输入并进行相应处理。3、程序能回收用户指定的进程所占用的内存空间,因此,程序可能需要为每个进程分配一个唯一的进程号并给出详细的提示信息。4、能直观合理地显示内存分配情况。5、程序界面友好,便于操作和查看运行结果。9#include#include#defineN100//共有100个内存块intprocess[N][N+1];//存放每个进程的页表intblock[N];//内存块状态标志数组,0:空闲,1:使用intblockCount;//记录当前内存剩余空间int
4、processCount;//记录当前进程数boolflag=true;voidinit();voidoutput();boolcreateProcess();boolendProcess();voidinit(){inti,j;//初始化内存状态标志数组for(i=0;i5、][0]=0;for(j=1;j6、f(block[k]==1)printf("%2d",k,++count);if(count==15){putchar('');count=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",7、process[i][j],count++);if(count==15){putchar('');printf("");count=0;}}putchar('');}}}elseprintf("当前内存无进程!");/*//输出空闲内存块if(blockCount>0){9printf("空闲内存块(%d):",blockCount);for(intk=0,count=0;k
5、][0]=0;for(j=1;j6、f(block[k]==1)printf("%2d",k,++count);if(count==15){putchar('');count=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",7、process[i][j],count++);if(count==15){putchar('');printf("");count=0;}}putchar('');}}}elseprintf("当前内存无进程!");/*//输出空闲内存块if(blockCount>0){9printf("空闲内存块(%d):",blockCount);for(intk=0,count=0;k
6、f(block[k]==1)printf("%2d",k,++count);if(count==15){putchar('');count=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",
7、process[i][j],count++);if(count==15){putchar('');printf("");count=0;}}putchar('');}}}elseprintf("当前内存无进程!");/*//输出空闲内存块if(blockCount>0){9printf("空闲内存块(%d):",blockCount);for(intk=0,count=0;k
此文档下载收益归作者所有