課程設計:存儲管理_第1頁
課程設計:存儲管理_第2頁
課程設計:存儲管理_第3頁
課程設計:存儲管理_第4頁
課程設計:存儲管理_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

目錄TOC\o"1-5"\h\z目錄 2概述 3課程設計任務及要求 32.1設計任務 32.2設計要求 3\o"CurrentDocument"2.3課程設計任務安排 3算法及數(shù)據(jù)結構 3\o"CurrentDocument"3.1算法的總體思想(流程) 3\o"CurrentDocument"3.2首次適應算法 3321功能 4322數(shù)據(jù)結構(包I括變量的定義,要注釋?。?4算法(流程圖表示,或偽C表示) 4\o"CurrentDocument"3.3循環(huán)首次適應算法 5\o"CurrentDocument"功能 5\o"CurrentDocument"3.3.2數(shù)據(jù)結構 5\o"CurrentDocument"算法 6\o"CurrentDocument"3.4最佳適應算法 6341功能 7\o"CurrentDocument"3.4.2數(shù)據(jù)結構 7\o"CurrentDocument"算法 7\o"CurrentDocument"3.5最壞適應算法 8\o"CurrentDocument"功能 8\o"CurrentDocument"3.5.2數(shù)據(jù)結構 8\o"CurrentDocument"算法 9程序設計與實現(xiàn) 10\o"CurrentDocument"4.1程序流程圖 10\o"CurrentDocument"4.2程序代碼(要注釋) 104.3實驗結果 17結論 18收獲、體會和建議。 18\o"CurrentDocument"詹煥齊總結: 18\o"CurrentDocument"劉偉業(yè)總結: 18參考文獻。 19動態(tài)分區(qū)分配是根據(jù)進程的實際需要,動態(tài)地為之分配內存空間,而在分配時,須按照一定的分配算法,從空閑分區(qū)表或空閑分區(qū)鏈中選出一分區(qū)分配給該作業(yè)。在本實驗中運用了五種分配算法,分別是:首次適應算法循環(huán)首次適應算法最壞適應算法最佳適應算法快速適應算法2.課程設計任務及要求2.1設計任務要求設計主界面以靈活選擇其中算法,5種算法都要求實現(xiàn)。2.2設計要求1)首先由系統(tǒng)生成當前的內存狀態(tài),要求未分配的分區(qū)數(shù)量不少于3個,且空間大小隨機,然后隨機生成一個數(shù),表示等待分配進程的大小。2)然后顯示上述算法由用戶選擇,結果顯示分配后的狀態(tài)。2.3課程設計任務安排日期劉偉業(yè)詹煥齊星期三下午研究算法研究算法星期四早上設計算法參與設計星期四下午設計算法,編寫界面參與設計星期五早上編寫算法完成部分文檔星期五下午程序測試并優(yōu)化程序測試,完成文檔3.算法及數(shù)據(jù)結構3.1算法的總體思想(流程)設計程序模擬四種動態(tài)分區(qū)分配算法:首次適應算法、循環(huán)首次適應算法、最佳適應算法和最壞適應算法的工作過程。假設內存中空閑分區(qū)個數(shù)為n,空閑分區(qū)大小分別為P,…,P,在動態(tài)分區(qū)分配過程中需要分配的進程個數(shù)為m(mWn),它們需要的1n分區(qū)大小分別為S,…,S,分別利用四種動態(tài)分區(qū)分配算法將m個進程放入n個空閑1m分區(qū),進程在空閑分區(qū)中的分配情況。3.2首次適應算法3.2.1功能在首次適應算法中,是從已建立好的數(shù)組中順序查找,直至找到第一個大小能滿足要求的空閑分區(qū)為止,然后再按照作業(yè)大小,從該分區(qū)中劃出一塊內存空間分配給請求者,余下的空間令開辟一塊新的地址,大小為原來的大小減去作業(yè)大小,若查找結束都不能找到一個滿足要求的分區(qū),則此次內存分配失敗。3.2.2數(shù)據(jù)結構(包括變量的定義,要注釋?。﹑rivatestaticintMaxNum=100;〃空閑分區(qū)個數(shù)privatestaticintn;〃作業(yè)個數(shù)privatestaticintm;〃空閑分區(qū)大小privatestaticintFreePartition[]=newint[MaxNum];〃作業(yè)名稱privatestaticcharProcessName[]=newchar[MaxNum];〃作業(yè)需求空間大小privatestaticintProcessNeed[]=newint[MaxNum];〃作業(yè)分配標志privatestaticbooleanstate[]=newboolean[MaxNum];〃空閑分區(qū)個數(shù)privatestaticintPartitionNum;〃作業(yè)個數(shù)privatestaticintProcessNum;〃記錄作業(yè)分配privatestaticcharorder[][]=newchar[MaxNum][MaxNum];3.2.3算法(流程圖表示,或偽C表示)publicstaticvoidFirst(){fOr(i=0;i<m;i++){for(j=0;jvnj++){〃找到第一個合適的空閑分區(qū)if((ProcessNeed[i]<=FreePartition[jl)&&(!state[i])){for(k=0;k<3;k++) 〃記錄作業(yè)分配{if(order[j][k]==0)〃為空{order[j][k]=ProcessName[i];break;}elsecontinue;}FreePartition[j]=FreePartition[j]-ProcessNeed[i];state[i]=true;}}}}3.3循環(huán)首次適應算法3.3.1功能該算法是由首次適應算法演變而成,在為進程分配內存空間時,不再是每次都從第一個空間開始查找,而是從上次找到的空閑分區(qū)的下一個空閑分區(qū)開始查找,直至找到第一個能滿足要求的空閑分區(qū),從中劃出一塊與請求大小相等的內存空間分配給作業(yè),為實現(xiàn)本算法,設置一個全局變量f,來控制循環(huán)查找,當f%N==0時,f=0;若查找結束都不能找到一個滿足要求的分區(qū),則此次內存分配失敗。3.3.2數(shù)據(jù)結構privatestaticintMaxNum=100;〃空閑分區(qū)個數(shù)privatestaticintn;〃作業(yè)個數(shù)privatestaticintm;〃空閑分區(qū)大小privatestaticintFreePartition[]=newint[MaxNum];〃作業(yè)名稱privatestaticcharProcessName[]=newchar[MaxNum];〃作業(yè)需求空間大小privatestaticintProcessNeed[]=newint[MaxNum];〃作業(yè)分配標志privatestaticbooleanstate[]=newboolean[MaxNum];〃空閑分區(qū)個數(shù)privatestaticintPartitionNum;〃作業(yè)個數(shù)privatestaticintProcessNum;〃記錄作業(yè)分配privatestaticcharorder[][]=newchar[MaxNum][MaxNum];3.3.3算法publicstaticvoidCycleFirst(){i=0;j=0;while((i<n)&&(/km)){if((ProcessNeed[i]<=FreePartition[/])&&(!state[i])){for(k=0;kv3;k++) 〃記錄作業(yè)分配{if(order[/][k]==0){order[/][k]=ProcessName[i];break;}elsecontinue;3.4最佳適應算法3.4.1功能最佳適應分配算法是每次為作業(yè)分配內存時,掃描整個數(shù)組,總是把能滿足條件的,又是最小的空閑分區(qū)分配給作業(yè),避免“大材小用”。該算法要求將所有的空閑分區(qū)按其容量以從小到大的順序形成一空閑分區(qū)鏈。這樣,第一次找到的能滿足要求的空閑區(qū)必然是最佳的。3.4.2數(shù)據(jù)結構privatestaticintMaxNum=100;〃空閑分區(qū)個數(shù)privatestaticintn;〃作業(yè)個數(shù)privatestaticintm;〃空閑分區(qū)大小privatestaticintFreePartition[]=newint[MaxNum];〃作業(yè)名稱privatestaticcharProcessName[]=newchar[MaxNum];〃作業(yè)需求空間大小privatestaticintProcessNeed[]=newint[MaxNum];〃作業(yè)分配標志privatestaticbooleanstate[]=newboolean[MaxNum];〃空閑分區(qū)個數(shù)privatestaticintPartitionNum;〃作業(yè)個數(shù)privatestaticintProcessNum;〃記錄作業(yè)分配privatestaticcharorder[][]=newchar[MaxNum][MaxNum];3.4.3算法publicstaticvoidBest(){for(i=0;ivm;i++){temp=FreePartition[0];k=0;〃找到第一個合適的空閑分區(qū)while(ProcessNeed[i]>temp){k++;temp=FreePartition[k];}for(j=0;j<n;j++){〃按最佳適應算法找到符合的空閑區(qū)if((ProcessNeed[i]<=FreePartition[jl)&&(temp>FreePartition[j)&&(!state[i])){temp=FreePartition[j];k=j;}elsecontinue;}for(d=0;d<3;d++) 〃記錄作業(yè)分配{if(order[k][d]==0){order[k][d]=ProcessName[i];break;}elsecontinue;}FreePartition[k]=FreePartition[k]-ProcessNeed[i];state[i]=true;}}3.5最壞適應算法3.5.1功能最壞適應分配算法選擇空閑分區(qū)的策略正好與最佳適應算法相反。是每次為作業(yè)分配內存時,掃描整個數(shù)組,總是把能滿足條件的,又是最大的空閑分區(qū)分配給作業(yè)。對中小作業(yè)有利,同時查找效率很高。3.5.2數(shù)據(jù)結構privatestaticintMaxNum=100;〃空閑分區(qū)個數(shù)privatestaticintn;〃作業(yè)個數(shù)privatestaticintm;〃空閑分區(qū)大小privatestaticintFreePartition[]=newint[MaxNum];〃作業(yè)名稱privatestaticcharProcessName[]=newchar[MaxNum];〃作業(yè)需求空間大小privatestaticintProcessNeed[]=newint[MaxNum];〃作業(yè)分配標志privatestaticbooleanstate[]=newboolean[MaxNum];〃空閑分區(qū)個數(shù)privatestaticintPartitionNum;〃作業(yè)個數(shù)privatestaticintProcessNum;〃記錄作業(yè)分配privatestaticcharorder[][]=newchar[MaxNum][MaxNum];3.5.3算法publicstaticvoidWorst(){for(i=0;ivm;i++){temp=FreePartition[0];k=0;for(j=0;j<n;/++){〃按最壞適應算法找到合適的空閑分區(qū)if((ProcessNeed[i]<=FreePartition[/])&&(temp<FreePartition[j]&&

(!state[i])){temp=FreePartition[j]k=j;}elsecontinue;}for(d=0;dv3;d++) 〃記錄作業(yè)分配{if(order[k][d]==0){order[k][d]=ProcessName[i];break;}elsecontinue:}FreePartition[k]=FreePartition[k]-ProcessNeed[i];state[i]=true;}}4.程序設計與實現(xiàn)4.1程序流程圖4.2程序代碼(要注釋)D_ProcessPartition.javaimportjava.io.BufferedlnputStream;importiava.io.FilelnputStream;importjava.io.FileNotFoundException;importjava,util.Random;importjava,util.Scanner;publicclassD_ProcessPartition{privatestaticintMaxNum=100;//空閑分區(qū)個數(shù)privatestaticintn;//作業(yè)個數(shù)privatestaticintm;//空閑分區(qū)大小privatestaticintFreePartitio[]二newint[MaxNum];//作業(yè)名稱privatestaticcharProcessNam[]=newchar[MaxNum];//作業(yè)需求空間大小privatestaticintProcessNee[]=newint[MaxNum];//作業(yè)分配標志privatestaticbooleanstate[]=newboolean[MaxNum];//空閑分區(qū)個數(shù)privatestaticintPartitionNu;//作業(yè)個數(shù)privatestaticintProcessNu;//記錄作業(yè)分配privatestaticcharorder[][]=newchar[MaxNum][MaxNum];//?????privatestaticcharch[]=newchar[MaxNum];//臨時變量privatestaticinttemp;//算法選擇//l-首次適應算法//2-循環(huán)首次適應算法//3-最佳適應算法//4-最壞適應算法privatestaticintoption=0;//for循環(huán)中使用privatestaticinti;privatestaticintj;privatestaticintk;privatestaticintd;privatestaticScannerstdin;publicStringDProcessPartition(intoption,intn)throwsFileNotFoundException{Stringxinxi二;Stringzuoyexinxi二;StringsuanfaString二"“;//輸入數(shù)據(jù)xinxi二input(n);//選擇算法//1-首次適應算法//2-循環(huán)首次適應算法//3-最佳適應算法//4-最壞適應算法switch(option){case1:suanfaString二"首次適應算法";First(n);zuoyexinxi二"對作業(yè)用首次適應算法進行空間分配:\n"+output(n);break;case2:suanfaString二"循環(huán)首次適應算法";CycleFirst(n);zuoyexinxi二"對作業(yè)用循環(huán)首次適應算法進行空間分配:\n"+output(n);break;case3:suanfaString二"最佳適應算法";Best(n);zuoyexinxi二"對作業(yè)用最佳適應算法進行空間分配:\n"+output(n);break;case4:suanfaString二"最壞適應算法";Worst(n);zuoyexinxi="對作業(yè)用最壞適應算法進行空間分配:\n"+output(n);break;}//返回數(shù)據(jù)在JTA上顯示出來Stringall二"你選擇了"+suanfaString+"\n\n"+xinxi+"\n\n"+zuoyexinxi;returnall;}//輸入數(shù)據(jù)publicstaticStringinput(intn)throwsFileNotFoundException{//算法選擇//l-首次適應算法//2-循環(huán)首次適應算法//3-最佳適應算法//4-最壞適應算法Stringresult二"";//請依次輸入空閑分區(qū)大小(KB)for(i=0;i<n;i++){FreePartitio[i]二RandomTestO;result二result+FreePartitio[i]+"";}result="隨機的"+n+"個空閑分區(qū)大小為:"+result+"\n"+"隨機的作業(yè)大小為:";//請輸入作業(yè)個數(shù),按題目要求默認為1可設置m=1;//固定的作業(yè)名稱ProcessNam[i]="Process".charAt(0);ch[i]=ProcessNam[i];//按題目要求隨機作業(yè)大小(KB)for(i=0;i<m;i++){ProcessNee[i]=RandomTest();state[i]二false;result二result+ProcessNee[i];}returnresult;}publicstaticintRandomTest(){intmin=1;Randomrandom=newRandom();ints=random.nextint(MaxNum)%(MaxNum-min+1)+min;System.out.println(s);returns;}//1――首次適應算法publicstaticvoidFirst(intn){for(i=0;i<m;i++){for(j=O;j〈n;j++){//找到第一個合適的空閑分區(qū)if((ProcessNee[i]<=FreePartitio[j])&&(!state[i])){for(k=0;k<3;k++) //記錄作業(yè)分配{辻(order[j][k]==0) //為空{order[j][k]二ProcessNam[i];break;}elsecontinue;}FreePartitio[j]二FreePartitio[j]-ProcessNee[i];state[i]=true;}}}}//2――循環(huán)首次適應算法publicstaticvoidCycleFirst(intn){i=0;j=0;while((i<n)&&(j〈m)){if((ProcessNee[i]<=FreePartitio[j])&&(!state[i])){for(k=0;k<3;k++) //記錄作業(yè)分配{辻(order[j][k]==0){order[j][k]=ProcessNam[i];break;}elsecontinue;}FreePartitio[j]二FreePartitio[j]-ProcessNee[i];state[i]=true;i++;}elsej++;}}//3——最佳適應算法publicstaticvoidBest(intn){for(i=0;i<m;i++){temp二FreePartitio[0];k=0;//找到第一個合適的空閑分區(qū)while(ProcessNee[i]>temp){k++;temp=FreePartitio[k];}for(j=0;j〈n;j++){//按最佳適應算法找到符合的空閑區(qū)if((ProcessNee[i]<=FreePartitio[j])&&(temp>FreePartitio[j])&&(!state[i])){temp二FreePartitio[j];k=j;}elsecontinue;}for(d=0;d<3;d++) //記錄作業(yè)分配{if(order[k][d]==0){order[k][d]=ProcessNam[i];break;}elsecontinue;}FreePartitio[k]二FreePartitio[k]-ProcessNee[i];state[i]=true;}}//4——最壞適應算法publicstaticvoidWorst(intn){for(i=0;i<m;i++){temp二FreePartitio[0];k=0;for(j=0;j〈n;j++){//按最壞適應算法找到合適的空閑分區(qū)if((ProcessNee[i]<=FreePartitio[j])&&(temp<FreePartitio[j])&&(!state[i])){temp二FreePartitio[j];k=j;}elsecontinue;}for(d=0;d<3;d++) //記錄作業(yè)分配{if(order[k][d]==0){order[k][d]=ProcessNam[i];break;}elsecontinue;}FreePartitio[k]二FreePartitio[k]-ProcessNee[i];state[i]=true;}}//結果輸出publicstaticStringoutput(intn){StringresuItString="";for(i=0;i<n;i++){System.out.print("|");resuItString=resuItString+"|";for(j=0;j〈3;j++){if(order[i][j]==0){System.out.print("");resuItString=resuItString+"";}else{System.out.print(order[i][j]);resuItString=resuItString+order[i][j];}}}System.out.print("|\n");resuItString=resuItString+"|\n";4.3實驗結果諸輸入空閑分區(qū)的個數(shù)(不能少于外)首探適應算法情壞首決適應算諾最隹適應算法最壞迢應算法04開貽算法5.結論在上學期末幾天的時間中,我

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論