操作系统首次适应算法动态分配C语言代码10页_第1页
操作系统首次适应算法动态分配C语言代码10页_第2页
操作系统首次适应算法动态分配C语言代码10页_第3页
操作系统首次适应算法动态分配C语言代码10页_第4页
操作系统首次适应算法动态分配C语言代码10页_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验名称: 操作系统动态分配 姓 名: 杨秀龙 学 号: 1107300432 专业班级: 创新实验班111 指导老师: 霍林 实验题目内存动态分区的分配与回收内存实验目的有利于我们更好的了解内存动态分区分配的操作情况,掌握可变分区首次适应算法的原理以及其编程实现。设计思想可变分区分配是根据进程的实际需求,动态地为之分配内存空间。首次适应算法要求空闲空间链以地址递增的次序链接。进行内存分配时,从链表头部开始依次检索,找到第一个不小于请求空间大小的空闲空间进行分配。分配时需考虑碎片问题,若分配会导致碎片产生则将整块分区分配。内存的回收需要考虑四种情况:1 收分区前后两个分区都空闲,则需要和前后两

2、个分区合并;2 回收分区只有前一分区空闲,则与前一分区合并;3 回收分区只有后一分区空闲,则和后一分区合并;4 回收分区独立,不考虑合并主要数据结构主要的数据结构有两个:空闲分区表结构和表的链结构。根据空闲分区的作用,空闲分区表结构必须包括(分区号、分区起始地址、分区状态、分区数据大小)。由于采用的是双向链表的结果,所以表的链结构包括(空闲分区表的信息、首指针、尾指针)结构程序代码如下:typedef struct Bodyint ID;int size;int address;int sign;typedef struct Node Body data;struct Node *prior;

3、 struct Node *next; *DLinkList;流程图退出选0输入有误>3 or<0选择0-3操作操作界面开始选3显示内存分配选2回收内存选1分配内存输入分区号结束合并后回收合并后回收该分区后一个分区空闲该分区前一个分区空闲合并后回收该分区前后都空闲结束将分区从空闲链移出,并修改相应数据结构整块分配判断是否会有碎片内存不足判断剩余空间是否足够输入分区大小运行结果图(1)主界面图(2)分配3个分区后的分配情况图(3)回收1、3分区后的分配情况图(4)再次分配4分区后的分配情况附录:源代码如下:#include<iostream.h>#include<s

4、tdio.h>#define Free 0 /空闲#define Zhanyong 1 /占用 #define FINISH 1 /完成#define ERROR 0 /出错#define memory 512 /最大内存#define min 10 /碎片值typedef struct Bodyint ID;int size;int address;int sign;typedef struct Node Body data;struct Node *prior; struct Node *next; *DLinkList;DLinkList head; /头结点DLinkList t

5、ou; /尾结点int Create()/初始化head=(DLinkList)malloc(sizeof(Node);tou=(DLinkList)malloc(sizeof(Node);head->prior=NULL;head->next=tou;tou->prior=head;tou->next=NULL;tou->data.address=0;tou->data.size=memory;tou->data.ID=0;tou->data.sign=Free;return FINISH;int FirstFit(int ID,int spa

6、ce)/首次适应算法DLinkList NewNode=(DLinkList)malloc(sizeof(Node);/新建作业的结点NewNode->data.ID=ID;NewNode->data.size=space;NewNode->data.sign=Zhanyong;Node *p=head;while(p)if(p->data.sign=Free && p->data.size=space)/剩余大小恰好满足p->data.sign=Zhanyong;p->data.ID=ID;return FINISH;break; i

7、f(p->data.sign=Free && p->data.size>space && (p->data.size-space>min)/满足需求且有剩余且不产生碎片NewNode->prior=p->prior;NewNode->next=p;NewNode->data.address=p->data.address;p->prior->next=NewNode;p->prior=NewNode;p->data.address=NewNode->data.address

8、+NewNode->data.size;p->data.size=p->data.size-space;return FINISH;break; if(p->data.sign=Free && p->data.size>space && p->data.size-space<=min)/产生碎片时p->data.sign=Zhanyong;p->data.ID=ID;return FINISH;break;p=p->next;/若已有分配,P指针后移return ERROR;int Allocat

9、ion()/内存分配int ID,space;printf("请输入分区号(不能输入相同的两个分区号):");scanf("%d",&ID);printf("输入分配内存大小(单位:KB):");scanf("%d",&space);if(space<0 |space=0)printf("分配的内存大小必须是正整数!n");return ERROR;if(FirstFit(ID,space)=FINISH)printf("分配成功!n");elsepri

10、ntf("内存不足,分配失败!n");int Recycle(int ID)/shifangzuoyeNode *p=head;while(p)if(p->data.ID=ID)p->data.sign=Free;/p->data.ID=Free;if(p->prior->data.sign=Free)&&(p->next->data.sign=Free)/与前后的空闲块相连p->prior->data.size=p->prior->data.size+p->data.size+p-&g

11、t;next->data.size;p->prior->next=p->next->next;if(p->next->next=NULL)/*若p->next是最后一个结点p->prior->data.ID=Free;p->next=NULL;elsep->next->next->prior=p->prior;break; if(p->prior->data.sign=Free)/与前面的空闲块相连p->prior->data.size+=p->data.size;p->

12、;prior->next=p->next;p->next->prior=p->prior;break;if(p->next->data.sign=Free)/与后面的空闲块相连p->data.size+=p->next->data.size;if(p->next->next=NULL)/若p->next是最后一个结点p->next=NULL;elsep->next->next->prior=p;p->next=p->next->next;break;break;p=p->

13、;next;printf("分区号为%d的内存回收成功n",ID);return FINISH;void show()printf("*当前内存分配情况*n");Node *p=head->next;while(p)printf("分区号:");if(p->data.ID=Free)printf("未分配");elseprintf("%6d",p->data.ID); printf(" 始地址:%4d",p->data.address); printf

14、(" 分区大小:%4dKB",p->data.size); printf(" 状 态:");if(p->data.sign=Free)printf("空 闲n");else if(p->data.sign=Zhanyong)printf("已分配n");p=p->next;printf("n");int main()Create();int choice;int i;for(i=0;i+) printf("请选择操作:n");printf("1.分配内存 n");printf("2.回收内存 n");printf("3.显示内存分配情况 n");printf("0.退出程序n");scanf("%d"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论