欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    操作系统-存储器的分配与回收算法实现(共20页).doc

    • 资源ID:6612804       资源大小:286.50KB        全文页数:20页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统-存储器的分配与回收算法实现(共20页).doc

    精选优质文档-倾情为你奉上操作系统实验报告存储器的分配与回收算法实现姓 名: 学 号: 班 级: 09计算机1 一、实验名称及要求1、实验名称:存储器的分配与回收算法实现2、实验要求: 学生应正确地设计有关的数据结构与各个功能模块,画出程序的流程图,编写程序,程序执行结果应正确。3、实验方式: 学生通过实验室的微机上机,实际调试程序。4、实验环境: Windows操作系统环境下的个人微机 或程序设计语言二、实验内容1 本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。2 采用最先适应法、最佳适应法、最坏适应法分配主存空间。3 当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。4 当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。5 运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。三、实验程序#include <iostream.h>#include <malloc.h>#include <stdlib.h>typedef struct FreeLink/定义自由链struct FreeLink *prior;char name;int start;int size;bool flag;struct FreeLink *next;* ptr,*head;head top;ptr p;void print()/将内存分配情况打印到屏幕上p=top;cout<<"*内存分配情况表*"<<endl;cout<<"区号tt"<<"起始位置t"<<"区间长度t"<<"区间状态t"<<endl;docout<<p->name<<"tt"<<p->start<<"tt"<<p->size<<"tt"if(p->flag=false)cout<<"空闲"<<endl;elsecout<<"已占用"<<endl;p=p->next;while(p!=NULL);void clear()/结束操作时清空“内存”以备其他操作dop=top;top=top->next;free(p);while(top!=NULL);void asc(ptr &p)/最佳适应法的内存分配函数int min;ptr op;FreeLink *fl=(FreeLink *)malloc(sizeof(FreeLink);cout<<"请输入要分配内存的进程名"<<endl;cin>>fl->name;cout<<"请输入要分配内存的大小"<<endl;cin>>fl->size;min=256;fl->flag=true;doif(p->flag=false&&p->size<=min&&p->size>=fl->size)min=p->size;op=p;p=p->next;while(p!=NULL);if(op->size>fl->size) fl->start=op->start; op->start=fl->start+fl->size; op->size=op->size-fl->size; fl->next=op; fl->prior=op->prior; op->prior->next=fl; op->prior=fl; goto flag1;if(op->size=fl->size) op->flag=fl->flag; op->name=fl->name; free(fl); goto flag1;cout<<"内存过小,分配失败!"<<endl;goto flag2;flag1: cout<<"分配成功!"<<endl;flag2: ;void dec(ptr &p)/最坏适应法的内存分配函数int max;ptr op;FreeLink *fl=(FreeLink *)malloc(sizeof(FreeLink);cout<<"请输入要分配内存的进程名"<<endl;cin>>fl->name;cout<<"请输入要分配内存的大小"<<endl;cin>>fl->size;max=fl->size;fl->flag=true;doif(p->flag=false&&p->size>=max)max=p->size;op=p;p=p->next;while(p!=NULL);if(op->size>fl->size) fl->start=op->start; op->start=fl->start+fl->size; op->size=op->size-fl->size; fl->next=op; fl->prior=op->prior; op->prior->next=fl; op->prior=fl; goto flag3;if(op->size=fl->size) op->flag=fl->flag; op->name=fl->name; free(fl); goto flag3;cout<<"内存过小,分配失败!"<<endl;goto flag4;flag3: cout<<"分配成功!"<<endl;flag4: ;void splice(ptr &p)/若被操作的内存有相邻空闲区则将空闲区拼接合并int x;if(p->prior->flag=false&&p->next->flag=false)x=1;if(p->prior->flag=false&&p->next->flag=true)|(p->prior->flag=false&&p->next=NULL)x=2;if(p->prior->flag=true&&p->next->flag=false)|(p->prior=NULL&&p->next->flag=false)x=3;if(p->prior->flag=true&&p->next->flag=true)|(p->prior=NULL&&p->next->flag=true)|(p->prior->flag=true&&p->next=NULL)x=4; switch(x)case 1:p->next->prior=p->prior; p->prior->next=p->next; p->prior->size=p->prior->size+p->size+p->next->size; p->prior->next=p->next->next; if(p->next->next!=NULL)p->next->next->prior=p->next->prior; free(p->next); free(p); break; case 2:if(p->next=NULL) p->prior->next=p->next; else p->next->prior=p->prior; p->prior->next=p->next; p->prior->size=p->prior->size+p->size; free(p); break;case 3:if(p->prior=NULL) top=p->next; p->next->prior=NULL; p->next->start=p->start; p->next->size=p->next->size+p->size; else p->next->prior=p->prior; p->prior->next=p->next;p->next->start=p->start; p->next->size=p->next->size+p->size; free(p); break;case 4:p->name='' p->flag=false; break;void allocate(ptr &p)/最先适应法的内存分配函数FreeLink *fl=(FreeLink *)malloc(sizeof(FreeLink);cout<<"请输入要分配内存的进程名"<<endl;cin>>fl->name;cout<<"请输入要分配内存的大小"<<endl;cin>>fl->size;fl->flag=true;doif(p->flag=false&&p->size>fl->size) fl->start=p->start; p->start=fl->start+fl->size; p->size=p->size-fl->size; fl->next=p; fl->prior=p->prior; p->prior->next=fl; p->prior=fl; goto a;if(p->flag=false&&p->size=fl->size) p->flag=fl->flag; p->name=fl->name; free(fl); goto a;p=p->next;while(p!=NULL);cout<<"内存过小,分配失败!"<<endl;goto b;a: cout<<"分配成功!"<<endl;b: ;void recover(ptr &p)/内存回收函数char n = ' 'cout<<"请输入要回收的内存对应的进程名"cin>>n;do if(p->flag=true&&p->name=n)splice(p); goto c; p=p->next;while(p!=NULL);cout<<"内存并未分配给对应进程,回收失败!"<<endl;goto d;c: cout<<"内存回收成功!"<<endl;d: ;int ffa()/最先适应法char choice=' 'print();ptr pcb=(FreeLink *)malloc(sizeof(FreeLink);pcb->next=top;pcb->prior=top->prior; top->prior=pcb;pcb->start=top->start;cout<<"请输入要为系统分配的内存块名"<<endl;cin>>pcb->name;cout<<"请输入要分配内存的大小"<<endl; goto f;e:cout<<"超过内存最大容量请重新输入要分配内存的大小"<<endl;f:cin>>pcb->size;if(pcb->size>256) goto e;top->size=top->size-pcb->size;top=pcb;top->flag=true;top->next->start+=top->size;print();while(true)dop=top->next;cout<<"请从下列选项中进行选择"<<endl;cout<<"1.分配内存"<<endl;cout<<"2.回收内存"<<endl;cout<<"3.结束操作"<<endl;cout<<"请输入你的选择"cin>>choice;while(choice!='1'&&choice!='2'&&choice!='3');switch(choice)case '1':allocate(p);print();break;case '2':recover(p);print();break;case '3':clear();return 0;break;int bfa()/最佳适应法char choice=' 'print();ptr pcb=(FreeLink *)malloc(sizeof(FreeLink);pcb->next=top;pcb->prior=top->prior; top->prior=pcb;pcb->start=top->start;cout<<"请输入要为系统分配的内存块名"<<endl;cin>>pcb->name;cout<<"请输入要分配内存的大小"<<endl; goto h;g:cout<<"超过内存最大容量请重新输入要分配内存的大小"<<endl;h:cin>>pcb->size;if(pcb->size>256) goto g;top->size=top->size-pcb->size;top=pcb;top->flag=true;top->next->start+=top->size;print();while(true)dop=top->next;cout<<"请从下列选项中进行选择"<<endl;cout<<"1.分配内存"<<endl;cout<<"2.回收内存"<<endl;cout<<"3.结束操作"<<endl;cout<<"请输入你的选择"cin>>choice;while(choice!='1'&&choice!='2'&&choice!='3');switch(choice)case '1':asc(p);print();break;case '2':recover(p);print();break;case '3':clear();return 0;break;int wfa()/最坏适应法char choice=' 'print();ptr pcb=(FreeLink *)malloc(sizeof(FreeLink);pcb->next=top;pcb->prior=top->prior; top->prior=pcb;pcb->start=top->start;cout<<"请输入要为系统分配的内存块名"<<endl;cin>>pcb->name;cout<<"请输入要分配内存的大小"<<endl; goto j;i:cout<<"超过内存最大容量请重新输入要分配内存的大小"<<endl;j:cin>>pcb->size;if(pcb->size>256) goto i;top->size=top->size-pcb->size;top=pcb;top->flag=true;top->next->start+=top->size;print();while(true)dop=top->next;cout<<"请从下列选项中进行选择"<<endl;cout<<"1.分配内存"<<endl;cout<<"2.回收内存"<<endl;cout<<"3.结束操作"<<endl;cout<<"请输入你的选择"cin>>choice;while(choice!='1'&&choice!='2'&&choice!='3');switch(choice)case '1':dec(p);print();break;case '2':recover(p);print();break;case '3':clear();return 0;break;int main()/主函数char choice = ' ' ptr free=(FreeLink *)malloc(sizeof(FreeLink); top=free; top->name='' top->start=0; top->size=256;top->flag=false; top->prior=NULL; top->next=NULL;cout<<"*Memory allocation and recovery algorithm*"<<endl;cout<<"*存储器的分配与回收算法*"<<endl;while(true)docout<<"请从下列选项中进行选择"<<endl;cout<<"1.最先适应算法"<<endl;cout<<"2.最优适应算法"<<endl;cout<<"3.最坏适应算法"<<endl;cout<<"4.退出"<<endl;cout<<"请输入你的选择"cin>>choice;while(choice!='1'&&choice!='2'&&choice!='3'&&choice!='4');switch(choice)case '1':ffa();break;case '2':bfa();break;case '3':wfa();break;case '4':return 0;break;四、实 验 结 果最先适应法最佳适应法最坏适应法五实验总结知道了存储器的分配与回收算法实现方法,采用最先适应法、最佳适应法、最坏适应法分配主存空间。当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。最后感谢李老师的指导。专心-专注-专业

    注意事项

    本文(操作系统-存储器的分配与回收算法实现(共20页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开