动态分区分配方式的模拟实验报告模板

上传人:pu****.1 文档编号:562544586 上传时间:2024-02-22 格式:DOCX 页数:59 大小:44.47KB
返回 下载 相关 举报
动态分区分配方式的模拟实验报告模板_第1页
第1页 / 共59页
动态分区分配方式的模拟实验报告模板_第2页
第2页 / 共59页
动态分区分配方式的模拟实验报告模板_第3页
第3页 / 共59页
动态分区分配方式的模拟实验报告模板_第4页
第4页 / 共59页
动态分区分配方式的模拟实验报告模板_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《动态分区分配方式的模拟实验报告模板》由会员分享,可在线阅读,更多相关《动态分区分配方式的模拟实验报告模板(59页珍藏版)》请在金锄头文库上搜索。

1、华北电力大学实验报告实验名称动态分区分配方式的模拟课程名称计算机操作系统专业班级:学生姓名:学 号:成 绩:指导教师:实验日期:一、实验目的:了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存 储管理方式及其实现过程的理解。二、实验内容:(1)用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和 回收过程free()。其中,空闲分区通过分区链来管理;在进行内存分配时,系统优先使用 空闲区低端的空间。(2 )假设初始状态下,可用内存空间为640K ,并有下列请求序列:作业1申请130KB。作业2申请60KB。作业3申请100KB。作业2释放60K

2、B。作业4申请200KB。作业3释放100KB。作业1释放130KB。作业5申请140KB。作业6申请60KB。作业7申请50KB。作业6释放60KB。请分别用首次适应算法和最佳适应算法进行内存块的分配和回收,要求每次分配和回收 后显示出空闲内存分区链的情况。四、设计思路和方法:首次适应算法(First-fit):当要分配内存空间时,就查表,在各空闲区中查找满足大小要求的 可用块。只要找到第一个足以满足要球的空闲块就停止查找,并把它分配出去;如果该空闲空间与所 需空间大小一样,则从空闲表中取消该项;如果还有剩余,则余下的部分仍留在空闲表中,但应修改 分区大小和分区始址。应算最佳适应算法(Bes

3、t-fit):当要分配内存空间时,就查找空闲表中满足要求的空闲块,并使得 剩余块是最小的。然后把它分配出去,若大小恰好合适,则直按分配;若有剩余块,则仍保留该余下 的空闲分区,并修改分区大小的起始地址。内存回收:将释放作业所在内存块的状态改为空闲状态,删除其作业名,设置为空。并判断该空 闲块是否与其他空闲块相连,若释放的内存空间与空闲块相连时,则合并为同一个空闲块,同时修改 分区大小及起始地址。五、主要数据结构和算法:主要数据结构:ss wssiruci freearea mil) /V冈血-Ong sizp/冈汁、/-Ong address- /v冈stlt ini siaie; /克势m-

4、emTypp3海3沼回潺湖令薜曲 siruci DuLNode /doub-e -inked =si E-emType daia-siruci DuLNode *prioL /理ffi5-F siruci DuLNode *nexi; /Bffi5-F oULNOderDULmkusi;%磷回讲-湖fflH343、WMSWS、w四茹四T-HK 斗sm芸 *二*n c - u d eAiosirea m h V*nc-ude 人 sid-ib.hv#defme Free 0rtsi5H#defme Busy 1、/印丑舜捞#defme OK 1 TylJm#defme ERROR 0 pEEm

5、#defme MAXengih 640 T*-34rt画甘 640KB iypedef ini sorius-4W.4苒 typedef struct freearea/徒义一个空闲区说明表结构int ID;分区号long size;分区大小long address; 分区地址int state;状态ElemType;/线性表的双向链表存储结构typedef struct DuLNode /double linked listElemType data;struct DuLNode *prior; / 前趋指针struct DuLNode *next; 后继指针DuLNode,*DuLinkL

6、ist;DuLinkList block_first; 头结点DuLinkList block_last; 尾结点Status alloc(int);/ 内存分配Status free(int); /I内存回收Status First_fit(int,int);/ 首次适应算法Status Best_fit(int,int); 最佳适应算法void show();/查看分配Status Initblock();/开创空间表Status Initblock()/开创带头结点的内存空间链表block_first=(DuLinkList)malloc(sizeof(DuLNode);block_la

7、st=(DuLinkList)malloc(sizeof(DuLNode);block_first-prior二NULL;block_first-next=block_last;block_last-prior=block_first; 坦.今 z0 EFIM =pu vv= i 昌音R、股K-W2WVVFI0U *o =puevv= i 母货固8冬8 QORQSnb 巴QstSJizw) 4W普矍WYW切 soz0 EFIM =pu vv= i 昌音R、股K-W2WVVFIOU *o =pu VV- ieKevvwou QORQSnb 巴QmuASw) wiBi? 客MOWLJJEnM =p

8、u?= i 垣、fflWE-K爨-VVWOU) oHHASCDnbCD一一 OVASCDnbCDJWnsCDnbCDx Auu 厂二DQxea)二、4皿卅招固斯雕啤=有QIUUU 厂二咿凶R)=I姓 s=vvwou 侦言巴百二一! 一)(Lp AUVO-CUsn 为 s 皿卅固R= po-q OH a I.CUACUPAAscu-lpo - q EASUO-IXVIAI hcdns.cuacup a4Ls05-lpo-q OH SSCDp pa5a5Aa5pA4Lsa5-lpo - q 3_ln N 0xCDuA4Lsa5_lpo-q/首次适应算法Status First_fit(int ID

9、,int request)/传入作业名及申请量为申请作业开辟新空间且初始化DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode);temp-data.ID=ID;temp-data.size二request;temp-data.state二Busy;DuLNode *p=block_first-next;while(p)if(p-data.state= = Free & p-data.size= = request)/有大小恰好合适的空闲块p-data.state二Busy;p-data.ID=ID;return OK;break;if(p-dat

10、a.state= = Free & p-data.sizerequest)/有空闲块能满足需求且有剩余temp-prior=p-prior;temp-next=p;temp-data.address=p-data.address;p-prior-next=temp;p-prior=temp;p-data.address二temp-data.address+temp-data.size;p-data.size-二request;return OK;break;p=p-next;return ERROR;/最佳适应算法Status Best_fit(int ID,int request)int c

11、h; 记录最小剩余空间DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode);temp-data.ID=ID;temp-data.size二request;temp-data.state二Busy;DuLNode *p=block_first-next;DuLNode *q = NULL; 记录最佳插入位置while(p) /初始化最小空间和最佳位置if(p-data.state= = Free &(p-data.sizerequest | p-data.size= = request) q=p;ch = p-data.size-request;b

12、reak;p=p-next;while(p)if(p-data.state= = Free & p-data.size= = request)/空闲块大小恰好合适p-data.ID=ID;p-data.state二Busy;return OK;break;if(p-data.state= = Free & p-data.sizerequest)/空闲块大于分配需求if(p-data.size-requestdata.size-request;/更 新剩余最小值q = p;/更新最佳位置指向p=p-next;if(q = = NULL) return ERROR;/ 没有找到空闲块else/找到

13、了最佳位置并实现分配temp-prior=q-prior;temp-next=q;temp-data.address=q-data.address;q-prior-next=temp;q-prior二temp;q-data.address+=request;q-data.size=ch;return OK;/ 主存回收 Status free(int ID)DuLNode *p=block_first;while(p)if(p-data.ID=ID)p-data.state二Free;p-data.ID二Free;if(p-prior-data.state= = Free)/与 前面的空闲块相连 p-prior-data.size+=p-data.size;p-prior-next=p-next

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

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