动态分区存储管理

动态分区存储管理

ID:5525063

大小:241.38 KB

页数:12页

时间:2017-12-17

动态分区存储管理_第1页
动态分区存储管理_第2页
动态分区存储管理_第3页
动态分区存储管理_第4页
动态分区存储管理_第5页
资源描述:

《动态分区存储管理》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、《操作系统》课程实验报告实验名称:动态分区存储管理姓名:学号:地点:指导老师:专业班级:一、实验目的:1、熟悉并掌握动态分区分配的算法。2、熟悉并掌握动态分区中分区回收的各种情况,并能够实现分区合并。二、实验内容:用高级语言模拟实现动态分区存储管理,要求:1、分区分配算法至少实现首次适应算法、最佳适应算法和最坏适应算法中的至少一种。熟悉并掌握各种算法的空闲区组织方式。2、分区的初始化——可以由用户输入初始分区的大小。(初始化后只有一个空闲分区,起始地址为0,大小是用户输入的大小)3、分区的动态分配过程:由用户

2、输入作业号和作业的大小,实现分区过程。4、分区的回收:用户输入作业号,实现分区回收,同时,分区的合并要体现出来。(注意:不存在的作业号要给出错误提示!)5、分区的显示:任何时刻,可以查看当前内存的情况(起始地址是什么,大小多大的分区时空闲的,或者占用的,能够显示出来)6、要求考虑:(1)内存空间不足的情况,要有相应的显示;(2)作业不能同名,但是删除后可以再用这个名字;(3)作业空间回收是输入作业名,回收相应的空间,如果这个作业名不存在,也要有相应的提示。三、实验代码#include#inc

3、lude#defineSIZE800//内存初始大小#defineMINSIZE5//碎片最小值enumSTATE{Free,Busy};structsubAreaNode{intaddr;//起始地址intsize;//分区大小inttaskId;//作业号STATEstate;//分区状态subAreaNode*pre;//分区前向指针subAreaNode*nxt;//分区后向指针}subHead;//初始化空闲分区链voidintSubArea(){//分配初始分区内存subAre

4、aNode*fir=(subAreaNode*)malloc(sizeof(subAreaNode));//给首个分区赋值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.

5、nxt;while(p!=NULL){if(p->state==Free&&p->size>=size){//找到要分配的空闲分区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;no

6、de->state=Free;node->taskId=-1;//修改分区链节点指针node->pre=p;node->nxt=p->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;}//最佳适应算

7、法intbestFit(inttaskId,intsize){subAreaNode*tar=NULL;inttarSize=SIZE+1;subAreaNode*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

8、){//整块分配tar->state=Busy;tar->taskId=taskId;}else{//分配大小为size的区间subAreaNode*node=(subAreaNode*)malloc(sizeof(subAreaNode));node->addr=tar->addr+size;node->size=tar->size-size;node->state=Free;node->task

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。