计算机操作系统内存分配实验源代码_第1页
计算机操作系统内存分配实验源代码_第2页
计算机操作系统内存分配实验源代码_第3页
计算机操作系统内存分配实验源代码_第4页
计算机操作系统内存分配实验源代码_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、#defineOK1/完成#defineERROR0/出错定义一个空闲区说明表结构typedefintStatus;typedefstructfree_tableintnum;分区序号long address; /long length; /int state; /ElemType;typedef struct Node/ElemType data;struct Node *prior; /struct Node *next; /Node,*LinkList;起始地址分区大小分区状态线性表的双向链表存储结构前趋指针后继指针LinkListfirst;/头结点LinkListend;/尾结点in

2、tflag;/记录要删除的分区序号StatusInitblock()开创带头结点的内存空间链表first=(LinkList)malloc(sizeof(Node);end=(LinkList)malloc(sizeof(Node);first->prior=NULL;first->next=end;end->prior=first;end->next=NULL;end->data.num=1;end->data.address=40;end->data.length=600;end->data.state=0;returnOK;voidsort

3、()分区序号重新排序Node*p=first->next,*q;q=p->next;for(;p!=NULL;p=p->next)for(q=p->next;q;q=q->next)if(p->data.num>=q->data.num)q->data.num+=1;/显示主存分配情况voidshow() int flag=0;/用来记录分区序号Node*p=first;p->data.num=0;p->data.address=0;p->data.length=40;p->data.state=1;sort();p

4、rintf("ntt»主存空间分配情况n");printf("*nn");printf("分区序号t起始地址t分区大小t分区状态nn");while(p)printf("%dtt%dtt%d",p->data.num,p->data.address,p->data.length);空闲 n'n");if(p->data.state=0)printf("ttelse printf("tt已分配nn");p=p->next;prin

5、tf("*nn");/首次适应算法StatusFirst_fit(intrequest)/为申请作业开辟新空间且初始化Node*p=first->next;LinkListtemp=(LinkList)malloc(sizeof(Node);temp->data.length=request;temp->data.state=1;p->data.num=1;while(p)if(p->data.state=0)&&(p->data.length=request)/有大小恰好合适的空闲块p->data.state=1;

6、returnOK;break;elseif(p->data.state=0)&&(p->data.length>request)/有空闲块能满足需求且有剩余temp->prior=p->prior;temp->next=p;temp->data.address=p->data.address;temp->data.num=p->data.num;p->prior->next=temp;p->prior=temp;p->data.address=temp->data.address+temp

7、->data.length;p->data.length-=request;p->data.num+=1;returnOK;break;p=p->next;returnERROR;/最佳适应算法StatusBest_fit(intrequest)intch;/记录最小剩余空间Node*p=first;Node*q=NULL;/记录最佳插入位置LinkListtemp=(LinkList)malloc(sizeof(Node);temp->data.state=1;p->data.num=1;while(p)/初始化最小空间和最佳位置if(p->data

8、.state=0)&&(p->data.length>=request)if(q=NULL)q=p;ch=p->data.length-request;elseif(q->data.length>p->data.length)q=p;ch=p->data.length-request;p=p->next;if(q=NULL)returnERROR;/没有找到空闲块elseif(q->data.length=request)q->data.state=1;returnOK;elsetemp->prior=q->

9、;prior;temp->next=q;temp->data.address=q->data.address;temp->data.num=q->data.num;q->prior->next=temp;q->prior=temp;q->data.address+=request;q->data.length=ch;q->data.num+=1;returnOK;returnOK;/最差适应算法StatusWorst_fit(intrequest)intch;/记录最大剩余空间Node*p=first->next;Node

10、*q=NULL;/记录最佳插入位置LinkListtemp=(LinkList)malloc(sizeof(Node);temp->data.length=request;temp->data.state=1;p->data.num=1;while(p)初始化最大空间和最佳位置if(p->data.state=0&&(p->data.length>=request)if(q=NULL)q=p;ch=p->data.length-request;elseif(q->data.length<p->data.length)q

11、=p;ch=p->data.length-request;p=p->next;没有找到空闲块if(q=NULL)returnERROR;/elseif(q->data.length=request)q->data.length=1;returnOK;elsetemp->prior=q->prior;temp->next=q;temp->data.address=q->data.address;temp->data.num=q->data.num;q->prior->next=temp;q->prior=temp

12、;q->data.address+=request;q->data.length=ch;q->data.num+=1;returnOK;returnOK;/分配主存Statusallocation(inta)int request;/申请内存大小printf("请输入申请分配的主存大小(单位:KB):");scanf("%d”,&request);if(request<0|request=0)printf("分配大小不合适,请重试!");returnERROR;switch(a)case 1: /默认首次适应算法

13、分配成功!if(First_fit(request)=OK)printf("t*elseprintf("t*内存不足,分配失败!*");returnOK;break;case 2: /选择最佳适应算法if(Best_fit(request)=OK) printf("t*分配成功!*)else printf("t*内存不足,分配失败!*");returnOK;break;case 3: /选择最差适应算法分配成功!if(Worst_fit(request)=OK)printf("t*else printf("t*内存

14、不足,分配失败!*");returnOK;break;)Statusdeal1(Node*p)/处理回收空间(Node*q=first;for(;q!=NULL;q=q->next)(if(q=p)(if(q->prior->data.state=0&&q->next->data.state!=0)(q->prior->data.length+=q->data.length;q->prior->next=q->next;q->next->prior=q->prior;q=q->p

15、rior;q->data.state=0;q->data.num=flag-1;)if(q->prior->data.state!=0&&q->next->data.state=0)(q->data.length+=q->next->data.length;q->next=q->next->next;q->next->next->prior=q;q->data.state=0;q->data.num=flag;)if(q->prior->data.state=0&a

16、mp;&q->next->data.state=0)q->prior->data.length+=q->data.length;q->prior->next=q->next;q->next->prior=q->prior;q=q->prior;q->data.state=0;q->data.num=flag-1;)if(q->prior->data.state!=0&&q->next->data.state!=0)q->data.state=0;)retur

17、nOK;)Statusdeal2(Node*p)/处理回收空间Node*q=first;for(;q!=NULL;q=q->next)(if(q=p)(if(q->prior->data.state=0&&q->next->data.state!=0)(q->prior->data.length+=q->data.length;q->prior->next=q->next;q->next->prior=q->prior;q=p->prior;q->data.state=0;q->

18、;data.num=flag-1;if(q->prior->data.state!=0&&q->next->data.state=0)(q->data.state=0;if(q->prior->data.state=0&&q->next->data.state=0)(q->prior->data.length+=q->data.length;q->prior->next=q->next;q->next->prior=q->prior;q=q->pri

19、or;q->data.state=0;q->data.num=flag-1;if(q->prior->data.state!=0&&q->next->data.state!=0)q->data.state=0;returnOK;/主存回收Statusrecovery(intflag)Node*p=first;for(;p!=NULL;p=p->next)if(p->data.num=flag)if(p->prior=first)if(p->next!=end)当前P指向的下一个不是最后一个时与后面的空闲块相连if

20、(p->next->data.state=0)/p->data.length+=p->next->data.length;p->next->next->prior=p;p->next=p->next->next;p->data.state=0;p->data.num=flag;elsep->data.state=0;if(p->next=end)/当前P指向的下一个是最后一个时p->data.state=0;/结束if(p->prior=block_first)的情况elseif(p->

21、prior!=first)if(p->next!=end)deall(p);elsedeal2(p);结束if(p->prior!=block_first)的情况结束if(p->data.num=flag)的情况printf("t*回收成功*");returnOK;/主函数voidmain()inti;/操作选择标记inta;/算法选择标记printf("*n");printf("tt用以下三种方法实现主存空间的分配n");printf("t(1)首次适应算法t(2)最佳适应算法t(3)最差适应算法n");printf(”*n")Jprintf("n");printf("请输入所使用的内存分配算法:”);scanf("%d",&a);while(a&l

温馨提示

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

评论

0/150

提交评论