您好,欢迎访问三七文档
操作系统实验四题目:动态分区分配算法班级:姓名:学号:完成日期:一、需求分析1、问题描述:设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1,…,Pn,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1,…,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。2、基本要求:一个完整的系统应具有以下功能:1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。3)输入:空闲分区个数n,空闲分区大小P1,…,Pn,进程个数m,进程需要的分区大小S1,…,Sm,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法。4)输出:最终内存空闲分区的分配情况。3、测试数据:见上机指导书测试数据。4、实现提示:1)程序中变量定义参考(根据需要可添加)如下:constintMaxNumber=100;intFreePartition[MaxNumber];intFirstPartition[MaxNumber];intCycleFirstPartition[MaxNumber];intBestPartition[MaxNumber];intWorstPartition[MaxNumber];intProcessNeed[MaxNumber];intPartitionNum,ProcessNum;2)页面置换的实现过程如下:变量初始化;空闲分区个数n,空闲分区大小P1,…,Pn,进程个数m,进程需要的分区大小S1,…,Sm,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法;根据用户选择的算法进行动态分区分配;输出所有进程分配后的空闲分区分配情况。二、概要设计1.变量描述intm,n;charResName[MaxNumber];charProName[MaxNumber];操作系统实验四intAvailable[MaxNumber];intMax[MaxNumber][MaxNumber];intAllocation[MaxNumber][MaxNumber];intNeed[MaxNumber][MaxNumber];2.主程序的流程以及各程序模块之间的调用关系:(1).资源分配表初始化(Initialization)(2).读取资源分配表(Resource)(3).安全性算法(Safety)(4).银行家算法(Order)(5).申请需求后的银行家算法(Request)(6).结束程序三.详细设计#includesuanfa.h//--------------------------主函数------------------------------intmain(){cout--------关闭窗口则退出.-----------endl;intFreePartition[MaxNumber];intFirstPartition[MaxNumber];charName[MaxNumber];intCycleFirstPartition[MaxNumber];intBestPartition[MaxNumber];intWorstPartition[MaxNumber];intProcessNeed[MaxNumber];intPartitionNum,ProcessNum;intk=1;while(k){charchioce;cout请键入一个选择功能符(I:Initialization,F:First,N:Next,endl;coutB:Best,W:Worst,Q:Quit):endl;cinchioce;switch(chioce){case'I':Initialization(Name,FreePartition,ProcessNeed,ProcessNum,PartitionNum);break;//初始化操作系统实验四case'F':First(Name,FreePartition,ProcessNeed,FirstPartition,ProcessNum,PartitionNum);break;//首次适应算法case'N':Next(Name,FreePartition,ProcessNeed,CycleFirstPartition,ProcessNum,PartitionNum);break;//循环首次适应算法case'B':Best(Name,FreePartition,ProcessNeed,BestPartition,ProcessNum,PartitionNum);break;//最佳适应算法case'W':Worst(Name,FreePartition,ProcessNeed,WorstPartition,ProcessNum,PartitionNum);break;//最坏适应算法case'Q':k=0;//退出运行}}return0;}//----------------------------------------------------------------//====================================================================#includeiostream#includefstreamusingnamespacestd;#defineMaxNumber100//====================================================================voidInitialization(charName[],intFreePartition[],intProcessNeed[],int&m,int&n){//将数据写入文件partition.txt中inti;ofstreamfout(partition.txt);cout请输入进程个数:m=;//cinm;foutmendl;cout请输入空闲分区个数:n=;//cinn;foutnendl;char*name=newchar[m];int*free=newint[n];int*need=newint[m];cout请输入m个进程名称:;for(i=1;i=m;i++){cinname[i];}for(i=1;i=m;i++){操作系统实验四Name[i]=name[i];foutName[i];}foutendl;cout请输入m个进程需求大小:;//for(i=1;i=m;i++){cinneed[i];}for(i=1;i=m;i++){ProcessNeed[i]=need[i];foutProcessNeed[i];}foutendl;cout请输入n个空闲分区大小:;//for(i=1;i=n;i++){cinfree[i];}for(i=1;i=n;i++){FreePartition[i]=free[i];foutFreePartition[i];}foutendl;cout空间分区和进程大小已写入文件partition.txt中。endl;}//--------------------------------------------------------------------voidPartition(charName[],intFreePartition[],intProcessNeed[],int&m,int&n){//从partition.txt文件中读取数据inti;ifstreamfin(partition.txt);finm;finn;char*name=newchar[m];int*free=newint[n];int*need=newint[m];for(i=1;i=m;i++){finname[i];操作系统实验四Name[i]=name[i];}for(i=1;i=m;i++){finneed[i];ProcessNeed[i]=need[i];}for(i=1;i=n;i++){finfree[i];FreePartition[i]=free[i];}}//--------------------------------------------------------------------/*voidSelect(intFreePartition[],int&n){//泡沫排序intt;for(intj=1;j=n;j++){for(inti=1;i=n-j+1;i++){if(FreePartition[i-1]FreePartition[i]){t=FreePartition[i-1];FreePartition[i-1]=FreePartition[i];FreePartition[i]=t;}}}}*///--------------------------------------------------------------------intMin(intFreePartition[],int&n,int&t){//求最小数t=FreePartition[1];for(inti=1;i=n;i++){if(FreePartition[i]t){t=FreePartition[i];}}returnt;操作系统实验四}//--------------------------------------------------------------------intMax(intFreePartition[],int&n,int&t){//求最小数t=FreePartition[1];for(inti=1;i=n;i++){if(FreePartition[i]t){t=FreePartition[i];}}returnt;}//--------------------------------------------------------------------voidFirst(charName[],intFreePartition[],intProcessNeed[],intFirstPartition[],int&m,int&n){//首次适应算法Partition(Name,FreePartition,ProcessNeed,m,n);inti,j;for(i=1;i=m;i++){FirstPartition[i]=0;}for(i=1;i=m;i++){for(j=1;j=n;j++){if(ProcessNeed[i]=FreePartition[j]&&FirstPartition[i]==0){FirstPartition[i]=j;FreePartition[j]=FreePartition[j]-ProcessNeed[i];}}}cout首次适应算法:endl;for(i=1;i=n;i++){coutFreePartition[i];for(j=1;j=m;j++){if(FirstPartition[j]==i){coutName[j];}操作系统实验四}}coutendl;}//--------------------------------------------------------------------voidNe
本文标题:动态分区分配算法
链接地址:https://www.777doc.com/doc-5900626 .html