操作系统第二次实验first-fit,next-fit.

上传人:今*** 文档编号:105839226 上传时间:2019-10-13 格式:DOC 页数:20 大小:241KB
返回 下载 相关 举报
操作系统第二次实验first-fit,next-fit._第1页
第1页 / 共20页
操作系统第二次实验first-fit,next-fit._第2页
第2页 / 共20页
操作系统第二次实验first-fit,next-fit._第3页
第3页 / 共20页
操作系统第二次实验first-fit,next-fit._第4页
第4页 / 共20页
操作系统第二次实验first-fit,next-fit._第5页
第5页 / 共20页
点击查看更多>>
资源描述

《操作系统第二次实验first-fit,next-fit.》由会员分享,可在线阅读,更多相关《操作系统第二次实验first-fit,next-fit.(20页珍藏版)》请在金锄头文库上搜索。

1、操作系统第二次实验报告物联网1301 齐亨 13516110一、实验简介本实验要求建造一个没有虚拟功能的内存管理系统。任务如下: 设计一个内存管理器,支持至少两种分配策略, 如first-fit, next-fit,best-fit, worst-fit 等。 对不同分配策略的性能进行评估。二、实验过程1、first fit(首次适应)首次适应策略的思路是,分配时在空闲块列表中搜索,找到第一个能够满足请求的块即停止搜索,然后把搜索到的块分割,一部分返回给请求者,另一部分仍然作为空闲块留在空闲列表的原来位置。首次适应策略的问题在于,链表头部区域的块倾向于被首先分割,经过一段时间后,空闲链表头部可

2、能堆积大量小的空闲块,这会导致搜索时间的增加,因为当请求一个头部区域的小块无法满足的块时,需要顺次检查这些小块。代码如下:#include #include #include int array99;int *array_request(int n)int count=0;int *p=&array0;int *l=&array99;while(countn & p!=l)if(*p=0)count+;p+;elsecount=0;p+;if(countn & p=l)return NULL;elsep=p-n;int *point;point=p;for(int a=0;an;a+)*p=1

3、;p+;return point;int array_release(int *p,int m)for(int n=0;nm;n+)*p=0;p+;return 0;int main()int i=0;for(;i99;i+)arrayi=0;int m_array20;int *pp20;int t=0,tt=0;int number=0,count=0;for(i=0;i=15 | r=2);m_arraynumber=r;printf(n第%d块内存的大小为 %d n,number,r);ppnumber=array_request(m_arraynumber);if(ppnumber=

4、NULL)printf(溢出n);return 0;elseprintf(写入内存后n);for(int k=0;k99;k+)if(k%10=0)printf(“n”);printf(%d,arrayk);else if(choice=2)printf(n请输入要释放的内存块号数 1-%d n,number);count-;scanf(%d,&tt);array_release(pptt,m_arraytt);printf(n释放后n);for(int k=0;k99;k+)if(k%10=0)printf(“n”);printf(%d,arrayk);elseprintf(errorn);

5、return 0;(1) 释放第2,3块内存,以使内存分裂成块(2) 继续写入内存,按照first fit的原理,靠前的内存块首先被分割(3) 当处于前位置的内存块不足以容纳数据时,开始分配靠后的数据块(4) 当所剩数据块不够时,报溢出错误,不够的数据块不再分配(此图是重新执行之后的图,所以与之前的数据有所不一样)2、next fitnext fit(下次适应)策略是作为first fit 的优化策略提出的。在nextfit 策略下,使用一个指针记录上次搜索完成时的位置。下次分配时,从该记录位置开始搜索,到达链表尾部时则绕回。如此,多次分配时,该指针便在空闲链表内循环游动,从而避免在链表头部区

6、域堆积过多的小碎片,提高搜索效率。代码如下:#include #include #include int array99;int *p=&array0;int *array_request(int n)int count=0;int *l=&array99;int k=0;while(countn&k99 )/if (*p=0)count+;p+;else if(*p=1)count=0;p+;k+;if(k=99)/return NULL;elsep=p-n;int *point;point=p;for(int a=0;an;a+)*p=1;p+;return point;int array

7、_release(int *p,int m)for(int n=0;nm;n+) *p=0;p+;return 0;int main()for (int c=0;c99;c+)arrayc=0; int m_array9;int *pp9;int t=0,tt=0;int number=0,count=0;for (int c=0;c=25|r=2);m_arraynumber=r;ppnumber=0;printf(%dn,number,r);ppnumber=array_request(m_arraynumber);if(ppnumber=NULL)printf(溢出n);return 0

8、;elseprintf(写入内存后n);for (int k=0;k99;k+)printf(%d,arrayk);else if(a=2)printf(n请输入想要的内存号%dn,number);count-;scanf(%d,&tt);array_release(pptt, m_arraytt);printf(n释放后n);for (int k=0;k99;k+)printf(%d,arrayk);elseprintf(errorn);return 0;运行截图如下:(1)首先分配4块内存,内存大小由rand()随机数决定已分配过的内存置为1未占用的内存置为04块内存的大小分别为8,12,

9、3,9(2) 释放第2,3块内存,以使内存分裂成块(3) 继续写入内存,按照next fit的原理,靠前的内存块不做变化,继续分配较后的内存块一直分配到内存近满(3)继续分配内存块 ,指针绕道内存头部继续分配(4) 当所剩任何一个数据块都不够容纳数据时,报溢出错误,不够的数据块不再分配四、实验分析First_fit内存利用率实验程序#include #include #include int array999;int countt=0;int *array_request(int n)int *p=&array0;int count=0;int *l=&array999;while(countn& p!=l )if (*p=0)count+;p+;else count=0;p+;countt+;if(countreturn NULL;elsep=p-n;int *point;point=p;for(int a=0;an;a+)*p=1;p+;return point;int array_release(int *p,int m)for(int n=0;nm;n+) *p=0;p+;*p=NULL;return 0;int main()for (int c=0;c999;c+)/arrayc=0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号