版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机类课程试验汇报(操作系统试验)试验二试验名称动态分辨别配方式的模拟试验日期试验成绩试验目的、规定及内容(给出本次试验所波及并规定掌握的知识点及试验内容详细描述)试验目的:理解动态分辨别配方式中使用的数据构造和分派算法,并深入加深对动态分区存储管理方式及其实现过程的理解。试验内容:用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请分别采用初次适应算法和最佳适应算法进行内存块的分派和回收,规定每次分派和回收后显示出空闲内存分区链的状况。试验环境(列出本次试验所使用的平台和有关软件)地点:使用软件:VisualC++6.0调试过程及试验成果(程序源代码截图。详细记录在调试过程中出现的问题及处理措施,截图记录试验执行的成果。)#include<iostream.h>#include<stdlib.h>#defineFree0//空闲状态#defineBusy1//已用状态#defineOK1//完毕#defineERROR0//出错#defineMAX_length640//最大内存空间为32767KBtypedefintStatus;intn=0;typedefstructfreearea//定义一种空闲区阐明表构造{intID;//分区号longsize;//分区大小longaddress;//分区地址intstate;//状态}ElemType;//----------线性表的双向链表存储构造------------typedefstructDuLNode//doublelinkedlist{ElemTypedata;structDuLNode*prior;//前趋指针structDuLNode*next;//后继指针}DuLNode,*DuLinkList;DuLinkListblock_first;//头结点DuLinkListblock_last;//尾结点Statusalloc(int);//内存分派Statusfree(int);//内存回收StatusFirst_fit(int,int);//初次适应算法StatusBest_fit(int,int);//最佳适应算法voidshow();//查看分派StatusInitblock();//开创空间表StatusInitblock()//开创带头结点的内存空间链表{block_first=(DuLinkList)malloc(sizeof(DuLNode));block_last=(DuLinkList)malloc(sizeof(DuLNode));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;returnOK;}//-----------------------分配主存-------------------------Statusalloc(intch){intID,request;cout<<"请输入作业(分区号):";cin>>ID;cout<<"请输入需要分派的主存大小(单位:KB):";cin>>request;if(request<0||request==0){cout<<"分派大小不合适,请重试!"<<endl;returnERROR;}if(ch==2)//选择最佳适应算法{if(Best_fit(ID,request)==OK)cout<<"分派成功!"<<endl;elsecout<<"内存局限性,分派失败!"<<endl;returnOK;}else//默认初次适应算法{if(First_fit(ID,request)==OK)cout<<"分派成功!"<<endl;elsecout<<"内存局限性,分派失败!"<<endl;returnOK;}}//------------------初次适应算法-----------------------StatusFirst_fit(intID,intrequest)//传入作业名及申请量{//为申请作业开辟新空间且初始化DuLinkListtemp=(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;returnOK;break;}if(p->data.state==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;returnOK;break;}p=p->next;}returnERROR;}//--------------------最佳适应算法------------------------StatusBest_fit(intID,intrequest){intch;//记录最小剩余空间DuLinkListtemp=(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.size>request||p->data.size==request)){q=p;ch=p->data.size-request;break;}p=p->next;}while(p){if(p->data.state==Free&&p->data.size==request){//空闲块大小恰好合适p->data.ID=ID;p->data.state=Busy;returnOK;break;}if(p->data.state==Free&&p->data.size>request){//空闲块不小于分派需求if(p->data.size-request<ch)//剩余空间比初值还小{ch=p->data.size-request;//更新剩余最小值q=p;//更新最佳位置指向}}p=p->next;}if(q==NULL)returnERROR;//没有找到空闲块else{//找到了最佳位置并实现分派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;returnOK;}}//-----------------------主存回收--------------------Statusfree(intID){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;p->next->prior=p->prior;}if(p->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;}returnOK;}//---------------显示主存分派状况------------------voidshow(){cout<<"***********-----------------************\n";cout<<"****主存分配情况****\n";cout<<"***********-----------------************\n";DuLNode*p=block_first->next;while(p){cout<<"分区号:";if(p->data.ID==Free)cout<<"Free"<<endl;elsecout<<p->data.ID<<endl;cout<<"起始地址:"<<p->data.address<<endl;cout<<"分区大小:"<<p->data.size<<"KB"<<endl;cout<<"状态:";if(p->data.state==Free)cout<<"空闲"<<endl;elsecout<<"已分派!"<<endl;cout<<"-----------------------"<<endl;p=p->next;}}//-----------------------主函数---------------------------voidmain(){intch,d=0;//算法选择标识cout<<"1.初次适应算法2.最佳适应算法0.退出\n";cout<<"请选择分派算法:";cin>>ch;if(ch==0||ch==1||ch==2)d++;while(d==0){cout<<"请选择对的的数字0,1或2"<<endl;cin>>ch;if(ch==0||ch==1||ch==2)d++;}if(ch==0)exit(0);if(n==0)Initblock();//开创空间表intchoice;//操作选择标识while(1){cout<<"********************************************\n";cout<<"**1:分派内存2:回收内存**\n";cout<<"**3:查看分派0:返回**\n";cout<<"***********
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州省遵义市2023-2024学年七年级上学期期末英语试题(含答案)
- 监理单位自查自纠记录表
- 慢病管理中的个性化管理方案
- 慢病管理中家庭照护者赋能策略
- 2025四川九州电子科技股份有限公司招聘合规管理岗拟录用人员笔试历年参考题库附带答案详解
- 能源供应协议(2025年用电合同)
- 慢性病长期照护服务的成本效益与可持续发展
- 慢性病患者健康行为依从性影响因素
- 全国一等奖统编版语文三年级下册《昆虫备忘录》公开课精美课件
- 公务员考试招警察试题及答案
- GB/T 5617-2025钢件表面淬火硬化层深度的测定
- 2025年贸易经济专业题库- 贸易教育的现状和发展趋势
- DB46-T 481-2019 海南省公共机构能耗定额标准
- 神经介入进修汇报课件
- 感染患者终末消毒操作规范
- 学生公寓物业管理服务服务方案投标文件(技术方案)
- 脑供血不足病人的护理查房-课件
- 文控文员工作总结
- 团体团建跳舞活动方案
- 食品加工企业主要管理人员及工程技术人员的配备计划
- 儿童语言发育迟缓课件
评论
0/150
提交评论