欢迎来到天天文库
浏览记录
ID:55128177
大小:260.50 KB
页数:12页
时间:2020-04-28
《动态分区存储管理.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《操作系统》课程实验报告实验名称:动态分区存储管理姓名:学号:地点:指导老师:专业班级:一、实验目的:1、熟悉并掌握动态分区分配的算法。2、熟悉并掌握动态分区中分区回收的各种情况,并能够实现分区合并。二、实验内容:用高级语言模拟实现动态分区存储管理,要求:1、分区分配算法至少实现首次适应算法、最佳适应算法和最坏适应算法中的至少一种。熟悉并掌握各种算法的空闲区组织方式。2、分区的初始化——可以由用户输入初始分区的大小。(初始化后只有一个空闲分区,起始地址为0,大小是用户输入的大小)3、分区的动态分配过程:由用户输入作业号和作业的大小,实
2、现分区过程。4、分区的回收:用户输入作业号,实现分区回收,同时,分区的合并要体现出来。(注意:不存在的作业号要给出错误提示!)5、分区的显示:任何时刻,可以查看当前内存的情况(起始地址是什么,大小多大的分区时空闲的,或者占用的,能够显示出来)6、要求考虑:(1)内存空间不足的情况,要有相应的显示;(2)作业不能同名,但是删除后可以再用这个名字;(3)作业空间回收是输入作业名,回收相应的空间,如果这个作业名不存在,也要有相应的提示。三、实验代码#include#include#defineSIZE8
3、00//内存初始大小#defineMINSIZE5//碎片最小值enumSTATE{Free,Busy};structsubAreaNode{intaddr;//起始地址intsize;//分区大小inttaskId;//作业号STATEstate;//分区状态subAreaNode*pre;//分区前向指针subAreaNode*nxt;//分区后向指针}subHead;//初始化空闲分区链voidintSubArea(){//分配初始分区内存subAreaNode*fir=(subAreaNode*)malloc(sizeof(s
4、ubAreaNode));//给首个分区赋值fir->addr=0;fir->size=SIZE;fir->state=Free;fir->taskId=-1;fir->pre=&subHead;fir->nxt=NULL;//初始化分区头部信息subHead.pre=NULL;subHead.nxt=fir;}//首次适应算法intfirstFit(inttaskId,intsize){subAreaNode*p=subHead.nxt;while(p!=NULL){if(p->state==Free&&p->size>=size)
5、{//找到要分配的空闲分区if(p->size-size<=MINSIZE){//整块分配p->state=Busy;p->taskId=taskId;}else{//分配大小为size的区间subAreaNode*node=(subAreaNode*)malloc(sizeof(subAreaNode));node->addr=p->addr+size;node->size=p->size-size;node->state=Free;node->taskId=-1;//修改分区链节点指针node->pre=p;node->nxt=p
6、->nxt;if(p->nxt!=NULL){p->nxt->pre=node;}p->nxt=node;//分配空闲区间p->size=size;p->state=Busy;p->taskId=taskId;}printf("内存分配成功!");return1;}p=p->nxt;}printf("找不到合适的内存分区,分配失败...");return0;}//最佳适应算法intbestFit(inttaskId,intsize){subAreaNode*tar=NULL;inttarSize=SIZE+1;subAreaN
7、ode*p=subHead.nxt;while(p!=NULL){//寻找最佳空闲区间if(p->state==Free&&p->size>=size&&p->sizesize;}p=p->nxt;}if(tar!=NULL){//找到要分配的空闲分区if(tar->size-size<=MINSIZE){//整块分配tar->state=Busy;tar->taskId=taskId;}else{//分配大小为size的区间subAreaNode*node=(subAreaNod
8、e*)malloc(sizeof(subAreaNode));node->addr=tar->addr+size;node->size=tar->size-size;node->state=Free;node->task
此文档下载收益归作者所有