动态分区管理的主存分配模拟设计方案最优适应法、最差适应法_第1页
动态分区管理的主存分配模拟设计方案最优适应法、最差适应法_第2页
动态分区管理的主存分配模拟设计方案最优适应法、最差适应法_第3页
动态分区管理的主存分配模拟设计方案最优适应法、最差适应法_第4页
动态分区管理的主存分配模拟设计方案最优适应法、最差适应法_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE14学号:0121010340808课程设计题目动态分区管理的主存分配模拟设计--最优适应法、最差适应法学院计算机科学与技术学院专业计算机科学与技术专业班级计算机1002班姓名刘浪浪指导教师杨克俭2013年1月20日课程设计任务书学生姓名:刘浪浪专业班级:计科1002班指导教师:杨克俭工作单位:计算机科学与技术学院题目:动态分区管理的主存分配模拟设计-—最优适应法、最差适应法初始条件:1.预备内容:阅读操作系统的内存管理章节内容,理解动态分区的思想,并体会各分配算法的具体实施方法。2。实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1。采用指定算法模拟动态分区管理方式的主存分配。能够处理以下的情形:⑴随机出现的进程i申请jKB内存,程序能判断是否能分配,如果能分配,要求输出分配的首地址Faddress,并要求输出内存使用情况和空闲情况。内存情况输出的格式为:Faddress该分区的首地址;Eaddress该分区的尾地址Len分区长度;Process如果使用,使用的进程号,否则为0⑵主存分配函数实现寻找空闲区、空闲区表的修改、已分配区表的修改功能;2。设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷运行结果与运行情况分析;⑸自我评价与总结:=1\*romani)你认为你完成的设计哪些地方做得比较好或比较出色;=2\*romanii)什么地方做得不太好,以后如何改正;=3\*romaniii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);=4\*romaniv)完成本题是否有其他的其他方法(如果有,简要说明该方法);=5\*romanv)对实验题的评价和改进意见,请你推荐设计题目。时间安排:设计安排一周:周1、周2:完成程序分析及设计。周2、周3:完成程序调试及测试.周4、周5:验收、撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)ﻩ指导教师签名:年月日系主任(或责任教师)签名:年月日一、题目动态分区管理的主存分配模拟设计—-最优适应法、最差适应法二、主要任务1.采用指定算法模拟动态分区管理方式的主存分配.能够处理以下的情形:⑴随机出现的进程i申请jKB内存,程序能判断是否能分配,如果能分配,要求输出分配的首地址Faddress,并要求输出内存使用情况和空闲情况。内存情况输出的格式为:Faddress该分区的首地址;Eaddress该分区的尾地址Len分区长度;Process如果使用,使用的进程号,否则为0⑵主存分配函数实现寻找空闲区、空闲区表的修改、已分配区表的修改功能;2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷运行结果与运行情况分析;⑸自我评价与总结:=1\*romani)你认为你完成的设计哪些地方做得比较好或比较出色;=2\*romanii)什么地方做得不太好,以后如何改正;=3\*romaniii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);=4\*romaniv)完成本题是否有其他的其他方法(如果有,简要说明该方法);=5\*romanv)对实验题的评价和改进意见,请你推荐设计题目。三、原理1.最佳适应算法:ﻩ它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。2。最坏适应算法:ﻩ最坏适应分配算法要扫描整个空闲分区或链表,总是挑选一个最大的空闲分区分割给作业使用.该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲区链,查找时只要看第一个分区能否满足作业要求。四、实验分析 分区管理是把内存划分为若干大小不等的区域,除操作系统占用一个区域外,其余由多道环境下的各并发进程共享。动态分区法在作业执行前并不建立分区,分区的建立是在作业的处理过程中进行的,且大小可随作业或进程对内存的要求而改变。采用动态分区法,在系统初启时,除了操作系统中常驻的内存部分外,只有一个空闲区。随后,分配的程序将该区依次划给调度选中的作业或进程。下图给出了FIFO调度方式时内存的初始分配情况:进程A1K进程B2K进程C4K进程D8K。。....。.OS进程A进程B进程C进程DOS进程A进程B进程COS进程A进程BOS进程A五、实验功能设计1.数据结构说明本实验用到了结构体和类两种数据结构:结构体定义如下:structarea{intstart;intlength;intstate;structarea*next;}其中定义了四个数据成员,其中start是内存块开始地址,length是内存块长度,state是内存块使用状态,next是指向下一个内存块的指针。2程序函数模块说明主函数:intmain(){intChoice;//开始循环while(1){ﻩ system("cls");ﻩﻩinit();ﻩﻩPrintMemoryState(head);printf("1.最优适应法\n”); printf("2.最差适应法\n");ﻩﻩprintf(”3。退出程序\n”);ﻩﻩprintf(”选择分区管理方式:");scanf("%d”,&Choice);//输入你所要的选项。为choice的值switch(Choice){ﻩﻩ case1:BestFit(head);PrintMemoryState(head);//最优适应法ﻩﻩﻩ break; ﻩ case2:WorstFit(head);ﻩﻩ ﻩPrintMemoryState(head);//最差适应法break;ﻩﻩﻩcase3:ﻩ ﻩﻩprintf("正在退出程序...\n");ﻩ ﻩexit(0); ﻩﻩﻩbreak;default:printf("Pleaseinputarightnumber!\n”);break;}ﻩﻩsystem(”pause”);}return0;}最佳适应算法:voidBestFit(Area*head)//装入作业,最优适应法{intflag=0;intlengthtemp;ﻩinta[3];Area*last=NULL;Area*newFree=NULL;ﻩArea*H=NULL;ﻩinti;ﻩprintf("请分别输入需要分配内存的3个作业内存长度\n”); for(i=1;i<=3;i++) {ﻩﻩprintf("进程:%d",i);ﻩﻩscanf("%d”,&a[i-1]);ﻩ}ﻩfor(i=0;i<3;i++)ﻩ{ﻩﻩintsum;intn=0;intb[10]={-1,-1,—1,-1,-1,-1,—1,-1,-1,—1};ﻩ intd=0;ﻩArea*Task=NULL;ﻩﻩArea*p=NULL;ﻩﻩlast=head-〉next;ﻩﻩp=head—>next;ﻩﻩH=head—〉next; while(H!=NULL)ﻩﻩ{ﻩﻩﻩif(H-〉state〉0)ﻩﻩﻩ{ﻩﻩﻩﻩH=H->next;ﻩ ﻩ}ﻩ ﻩelseﻩ ﻩ{ﻩﻩﻩﻩb[n]=H->length; ﻩﻩﻩH=H->next; ﻩﻩ n++;ﻩ ﻩﻩ ﻩﻩ}ﻩﻩ} ﻩsum=b[0]; for(intj=1;j<n;j++)ﻩﻩ{ ﻩﻩif(sum<b[j])ﻩﻩﻩﻩsum=b[j];ﻩﻩ}//sum取B[n]中的最大值ﻩﻩ ﻩﻩif(a[i]>sum)ﻩﻩ{ ﻩﻩprintf("a[%d]作业过长,无法装入\n”,i); ﻩ}ﻩ elseﻩﻩ{ﻩﻩﻩwhile(last!=NULL) ﻩﻩ{ﻩﻩﻩﻩif(last->state>0) ﻩﻩ last=last-〉next; ﻩﻩﻩelseﻩﻩﻩﻩ{ ﻩﻩﻩﻩif(a[i]>last—〉length)ﻩﻩﻩﻩﻩﻩlast=last-〉next; ﻩﻩﻩ elseif(a[i]==last->length)ﻩ ﻩ ﻩ{ﻩﻩﻩ ﻩﻩTask=last; ﻩﻩﻩﻩﻩTask->state=i;ﻩﻩﻩﻩﻩ break;ﻩﻩﻩ ﻩ}ﻩ ﻩ ﻩelseif(a[i]<last—>length)ﻩﻩﻩﻩ {ﻩ ﻩﻩ ﻩif(Task==NULL)ﻩﻩﻩﻩﻩﻩ{ ﻩﻩ ﻩﻩﻩTask=last;ﻩﻩﻩﻩﻩﻩ}ﻩﻩﻩ ﻩelseif(Task—〉length>last—>length) ﻩ ﻩﻩﻩ{ﻩﻩﻩﻩﻩﻩﻩTask=last;ﻩ ﻩ }ﻩﻩﻩ ﻩlast=last—>next;ﻩ ﻩﻩ}ﻩﻩﻩ }ﻩﻩﻩ}ﻩ ﻩif(Task-〉length〉a[i])ﻩﻩﻩ{ﻩﻩ lengthtemp=Task—>length; ﻩﻩTask—>length=a[i];ﻩﻩﻩ Task->state=i+1;ﻩﻩ ﻩnewFree=(Area*)malloc(sizeof(Area));ﻩ ﻩﻩnewFree->next=Task->next;ﻩﻩﻩ newFree—>start=Task—〉start+Task-〉length;ﻩ ﻩnewFree—〉length=lengthtemp—Task->length; ﻩﻩﻩnewFree->state=0;ﻩﻩ Task—〉next=newFree;//成功插入newFree节点ﻩ ﻩ} } }}最差适应算法:voidWorstFit(Area*head)//装入作业,最差适应法{intlengthtemp;ﻩinta[3];Area*last=NULL;Area*newFree=NULL;ﻩinti; intname=0;ﻩprintf("请分别输入需要分配内存的3个作业内存长度\n");ﻩfor(i=1;i<=3;i++)ﻩ{ﻩﻩprintf("进程:%d”,i);ﻩ scanf("%d",&a[i-1]);ﻩ}ﻩfor(i=0;i〈3;i++)ﻩ{ﻩArea*Task=NULL;ﻩﻩlast=head—>next; ﻩTask=NULL; ﻩwhile(last!=NULL)ﻩ {ﻩﻩﻩif(last->state〉0)ﻩﻩ ﻩlast=last->next;ﻩﻩ elseﻩﻩﻩ{ﻩﻩﻩ if(Task==NULL)ﻩ ﻩﻩ Task=last;ﻩ ﻩﻩif(last-〉length>Task->length)ﻩﻩﻩﻩﻩTask=last;ﻩﻩﻩﻩlast=last-〉next;ﻩﻩﻩ}//task指向length最大的那块 }ﻩﻩif(a[i]>Task—>length) { ﻩﻩprintf(”a[%d]作业过长,无法装入\n",i);ﻩﻩ}ﻩ elseﻩﻩ{ﻩﻩﻩif(Task->length==a[i])ﻩﻩﻩ{ﻩ ﻩTask—>state=i+1;ﻩ ﻩ}//等于的话直接装入ﻩﻩ if(Task-〉length>a[i])ﻩﻩﻩ{ﻩ lengthtemp=Task—>length;ﻩﻩﻩﻩTask—〉length=a[i];ﻩﻩﻩﻩTask—〉state=i+1;ﻩﻩﻩ newFree=(Area*)malloc(sizeof(Area));ﻩ ﻩﻩnewFree->next=Task—>next; ﻩﻩnewFree-〉start=Task->start+Task-〉length; ﻩﻩﻩnewFree->length=lengthtemp—Task—>length;ﻩﻩﻩﻩnewFree-〉state=0;ﻩﻩ ﻩTask—〉next=newFree;//成功插入newFree节点ﻩﻩﻩ} ﻩ}ﻩ}}3.程序的流程图最优适应法和最差适应法的流程图一样,如下:请求SIZE大小的分区从空闲区表第一表目顺序查找从空闲区表第一表目顺序查找表目查完?表目查完?是无法分配否无法分配该空闲区的该空闲区的长度≥SIZE?取下一表项否取下一表项是该空闲区的长度=该空闲区的长度=SIZE?从该空闲表中截取所需大小,修改调整可用表否从该空闲表中截取所需大小,修改调整可用表是从可用表中移去该表目,调整可用表从可用表中移去该表目,调整可用表返回分配起始地址返回分配起始地址六、开发平台开发平台:windows7开发软件:visualstudio2010开发语言:C++七、运行结果与运行情况分析运行源程序得到以下运行结果:输入1,选择最优程序法,并输入作业需要的内存块大小,运行结果如下:输入2之后,选择最差适应法,并输入相应作业需要的内存块的大小,运行结果如下:当输入作业内存块大于最大内存块时,得到以下结果:八、自我评价与总结ﻩ本次的课程设计我做的题目是动态分区式管理的模拟设计中,采用的是最佳适应算法和最差适应算法,其实最差适应法和最优适应法的原理很相近,一个是先把内存块按照从小到大的顺序进行排列,另一个正好相反,在理解上没什么障碍。因此在进行课程设计的时候少了更多的困难,在原理上有个正确的认识,在做程序设计的时候就得心应手了。ﻩ在程序设计的过程中遇到

温馨提示

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

评论

0/150

提交评论