资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
操作系统实验报告实验四动态分区分配算法学号:班级:姓名:【实验目的】 通过这次实验,加深对动态分区分配算法的理解,进一步掌握首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的实现方法。【实验内容】问题描述:设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1, ,Pn,在动态分区分配过程中需要分配的进程个数为m(mn),它们需要的分区大小分别为S1, ,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。程序要求如下:1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。3)输入:空闲分区个数n,空闲分区大小P1, ,Pn,进程个数m,进程需要的分区大小S1, ,Sm,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法。4)输出:最终内存空闲分区的分配情况。实现提示:用C+语言实现提示:1)程序中变量定义参考(根据需要可添加)如下:const int MaxNumber=100;int FreePartitionMaxNumber;int FirstPartitionMaxNumber;int CycleFirstPartitionMaxNumber;int BestPartitionMaxNumber;int WorstPartitionMaxNumber;int ProcessNeedMaxNumber;int PartitionNum,ProcessNum;2)页面置换的实现过程如下: 变量初始化; 空闲分区个数n,空闲分区大小P1, ,Pn,进程个数m,进程需要的分区大小S1, ,Sm,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法; 根据用户选择的算法进行动态分区分配; 输出所有进程分配后的空闲分区分配情况。实验要求:1) 上机前认真复习动态分区分配算法,熟悉首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的计算过程;2) 上机时独立编程、调试程序;3) 根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。【源程序】头文件First.h#include#include#include#include#define Proprintf printf(|-+-+-+-+-+-+-+-+-|n)#define Myprintf printf(|+|n)#define MaxNum 100typedef struct ProcessPartition_structint FreePartitionMaxNum; /空闲分区大小char ProcessNameMaxNum; /作业名称int ProcessNeedMaxNum; /作业需求空间大小int stateMaxNum; /作业分配标志int PartitionNum,ProcessNum; /空闲分区个数,作业个数Process;Process p;int i,j,k,d,temp;char orderMaxNumMaxNum;char chMaxNum;int m; /作业个数int n; /空闲分区个数int First();int CycleFirst();int Best();int Worst();int Option(); /选择算法int Pinput(); /参数输入int Poutput(); /结果输出int Pinput() /参数输入printf(请输入空闲分区个数:n);scanf(%d,&n);printf(请依次输入空闲分区大小(KB):n);for(i=0;in;i+)scanf(%d,&p.FreePartitioni);printf(请输入作业个数:n);scanf(%d,&m);printf(请依次输入作业名称:n);for(i=0;im;i+)scanf(%c%c,&chi,&p.ProcessNamei);printf(请依次输入作业大小(KB):n);for(i=0;im;i+)scanf(%d,&p.ProcessNeedi);p.statei=0;Proprintf;for(i=0;in;i+)printf(|%3d ,p.FreePartitioni);printf(|n);Proprintf;printf(作业信息如下:n);for(i=0;im;i+)printf(%3c,p.ProcessNamei);printf(n);for(i=0;im;i+)printf(%3d,p.ProcessNeedi);printf(n);return 0;int First() /首次适应算法for(i=0;im;i+)for(j=0;jn;j+) /找到第一个合适的空闲分区if(p.ProcessNeedi = p.FreePartitionj) & (!p.statei) for(k=0;k3;k+) /记录作业分配if(orderjk=NULL)orderjk=p.ProcessNamei;break;elsecontinue;p.FreePartitionj=p.FreePartitionj-p.ProcessNeedi;p.statei=1;return 0;头文件CycleFirst.h#include#include#include#includeint CycleFirst() /循环首次适应算法i=0;j=0;while(in) & (jm)if(p.ProcessNeedi = p.FreePartitionj) & (!p.statei)for(k=0;k3;k+) /记录作业分配if(orderjk=NULL)orderjk=p.ProcessNamei;break;elsecontinue;p.FreePartitionj=p.FreePartitionj-p.ProcessNeedi;p.statei=1;i+;elsej+;return 0;头文件Best.h#include#include#include#includeint Best() /最佳适应算法for(i=0;i temp)k+;temp=p.FreePartitionk;for(j=0;jn;j+) /按最佳适应算法找到符合的空闲区if(p.ProcessNeedi p.FreePartitionj) & (!p.statei) temp=p.FreePartitionj;k=j;elsecontinue;for(d=0;d3;d+) /记录作业分配if(orderkd=NULL)orderkd=p.ProcessNamei;break;elsecontinue;p.FreePartitionk=p.FreePartitionk-p.ProcessNeedi;p.statei=1;return 0;头文件Worst.h#include#include#include#includeint Worst() /最坏适应算法for(i=0;im;i+)temp=p.FreePartition0;k=0;for(j=0;jn;j+) /按最坏适应算法找到合适的空闲分区if(p.ProcessNeedi = p.FreePartitionj) & (temp p.FreePartitionj) & (!p.statei) temp=p.FreePartitionj;k=j;elsecontinue;for(d=0;d3;d+) /记录作业分配if(orderkd=NULL)order
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号