2022年实验四动态分区分配方式的模拟答案_第1页
2022年实验四动态分区分配方式的模拟答案_第2页
2022年实验四动态分区分配方式的模拟答案_第3页
2022年实验四动态分区分配方式的模拟答案_第4页
2022年实验四动态分区分配方式的模拟答案_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、精选学习资料 - - - 欢迎下载动态分区安排方式的模拟第一部分设计思想的说明1设计目标用 c 语言或 c+语言分别实现采纳首次适应算法和正确适应算法的动态分区安排过程alloc和回收过程free;其中,闲暇分区通过闲暇分区链表来治理,在进行内存安排时,系统优先使用闲暇区低端空间;预期结果:假设初始状态如下,可用的内存空间为640kb,并有以下恳求序列:作业1申请130kb作业2申请60kb作业3申请100kb作业2释放60kb作业4申请200kb作业3释放100kb作业1释放130kb作业5申请140kb作业6申请60kb作业7申请50kb作业6释放60kb分别用首次适应算法和正确适应算法进

2、行内存块的安排和回收,同时显示内存块安排和回收后闲暇内存分区链的情形;2.设计理论首次适应算法(first-fit) :当要安排内存空间时,就查表,在各闲暇区中查找满意大小要求的可用块;只要找到第一个足以满意要球的闲暇块就停止查找,并把它安排出去;假如该闲暇空间与所需空间大小一样,就从闲暇表中取消该项;假如仍有剩余, 就余下的部分仍留在闲暇表中,但应修改分区大小和分区始址;正确适应算法(best-fit): 当要安排内存空间时,就查找闲暇表中满意要求的闲暇块,并使得剩余块为最小的;然后把它安排出去,如大小恰好合适,就直按安排;如有剩余 块,就仍保留该余下的闲暇分区,并修改分区大小的起始地址;内

3、存回收: 将释放作业所在内存块的状态改为闲暇状态,删除其作业名,设置为空;并判定该闲暇块为否与其他闲暇块相连,如释放的内存空间与闲暇块相连时,就合并为同一个闲暇块,同时修改分区大小及起始地址;精品学习资料精选学习资料 - - - 欢迎下载其次部分程序清单/*/*动态分区安排方式的模拟*/*#include<iostream.h>#include<stdlib.h>#define free 0 /闲暇状态#define busy 1 /已用状态#define ok 1/完成#define error 0 /出错#define max_length 640 /最大内存空间为

4、640kb typedef int status;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、*dulinklist;dulinklist block_first;

5、 /头结点dulinklist block_last; /尾结点status allocint;/内存安排status freeint; /内存回收status first_fitint、int;/首次适应算法status best_fitint、int; /正确适应算法void show;/查看安排status initblock;/开创空间表精品学习资料精选学习资料 - - - 欢迎下载status initblock/开创带头结点的内存空间链表block_first=dulinklistmallocsizeofdulnode; block_last=dulinklistmallocsiz

6、eofdulnode; block_first->prior=null;block_first->next=block_last; block_last->prior=block_first; block_last->next=null; block_last->data.address=0;block_last->data.size=max_length; block_last->data.id=0;block_last->data.state=free; return ok;/-分 配 主 存 -status allocint chint i

7、d、request;cout<<" 请输入作业 分区号 :" cin>>id;cout<<" 请输入需要安排的主存大小 单位 :kb : "cin>>request; ifrequest<0 |request=0cout<<" 安排大小不合适,请重试!"<<endl; return error;ifch=2 /挑选正确适应算法ifbest_fitid、request=ok cout<<"安排胜利! "<<endl;

8、 else cout<<"内存不足,安排失败!"<<endl;return ok;else /默认首次适应算法iffirst_fitid、request=ok cout<<"安排胜利! "<<endl; else cout<<"内存不足,安排失败!"<<endl;return ok;/-首次适应算法-status first_fitint id、int request/传入作业名及申请量精品学习资料精选学习资料 - - - 欢迎下载/ 为申请作业开创新空间且初始化

9、dulinklist temp=dulinklistmallocsizeofdulnode; temp->data.id=id;temp->data.size=request;temp->data.state=busy;dulnode *p=block_first->next; whilepifp->data.state=free && p->data.size=request/ 有大小恰好合适的闲暇块p->data.state=busy; p->data.id=id; return ok;break;ifp->data.s

10、tate=free && p->data.size>request/ 有闲暇块能满意需求且有剩余" 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;

11、p=p->next;return error;/-正确适应算法-status best_fitint id、int requestint ch; /记录最小剩余空间dulinklist temp=dulinklistmallocsizeofdulnode; temp->data.id=id;temp->data.size=request; temp->data.state=busy; dulnode *p=block_first->next;dulnode *q=null; /记录正确插入位置whilep /初始化最小空间和正确位置精品学习资料精选学习资料 - -

12、 - 欢迎下载ifp->data.state=free &&p->data.size>request | p->data.size=request q=p;ch=p->data.size-request; break;p=p->next;whilepifp->data.state=free && p->data.size=request/ 闲暇块大小恰好合适p->data.id=id;p->data.state=busy; return ok;break;ifp->data.state=free

13、&& p->data.size>request/ 闲暇块大于安排需求ifp->data.size-request<ch/剩余空间比初值仍小ch=p->data.size-request;/更新剩余最小值q=p;/ 更新正确位置指向p=p->next;ifq=null return error;/没有找到闲暇块else/找到了正确位置并实现安排temp->prior=q->prior; temp->next=q;temp->data.address=q->data.address; q->prior->

14、next=temp;q->prior=temp;q->data.address+=request; q->data.size=ch;return ok;/-主 存 回 收-精品学习资料精选学习资料 - - - 欢迎下载status freeint iddulnode *p=block_first; whilepifp->data.id=idp->data.state=free; p->data.id=free;ifp->prior->data.state=free/与前面的闲暇块相连p->prior->data.size+=p->

15、;data.size; p->prior->next=p->next;p->next->prior=p->prior;ifp->next->data.state=free/与后面的闲暇块相连p->data.size+=p->next->data.size; p->next->next->prior=p;p->next=p->next->next;break;p=p->next;return ok;/-显示主存安排情形-void showcout<<"+n"

16、cout<<"+主 存 分 配 情 况+n" cout<<"+n"dulnode *p=block_first->next; whilepcout<<" 分 区 号 : "ifp->data.id=free cout<<"free"<<endl; else cout<<p->data.id<<endl;cout<<" 起始地址: "<<p->data.address

17、<<endl;cout<<" 分区大小: "<<p->data.size<<" kb"<<endl;cout<<" 状态: "ifp->data.state=free cout<<"空闲"<<endl;精品学习资料精选学习资料 - - - 欢迎下载else cout<<"已安排 "<<endl;cout<<" "<<end

18、l;p=p->next;/-主函数-void mainint ch;/算法挑选标记cout<<"动态分区安排方式的模拟n" cout<<"*n"cout<<"* 1首次适应算法2正确适应算法*n"cout<<"*n"cout<<" 请挑选安排算法:" cin>>ch;initblock; /开创空间表 int choice; /操作挑选标记 while1cout<<"*n"cout<<"*1:安排内存2:回收内存*n" cout<<"*3:查看安排0:退出*n"cout<<"*n"cout&

温馨提示

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

评论

0/150

提交评论