版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 操作系統(tǒng)課程設(shè)計(jì)</b></p><p> 動(dòng)態(tài)分區(qū)分配存儲(chǔ)管理</p><p><b> 計(jì)算機(jī)10-01班</b></p><p> 第一章 課程設(shè)計(jì)概述</p><p><b> 1.1 設(shè)計(jì)任務(wù):</b></p>
2、<p> 動(dòng)態(tài)分區(qū)分配存儲(chǔ)管理</p><p><b> 1.2 設(shè)計(jì)要求</b></p><p> 建立描述內(nèi)存分配狀況的數(shù)據(jù)結(jié)構(gòu);</p><p> ?建立描述進(jìn)程的數(shù)據(jù)結(jié)構(gòu);</p><p> ?使用兩種方式產(chǎn)生進(jìn)程:(a)自動(dòng)產(chǎn)生, (b)手工輸入;</p><p>
3、 ?在屏幕上顯示內(nèi)存的分配狀況、每個(gè)進(jìn)程的執(zhí)行情況;</p><p> ?建立分區(qū)的分配與回收算法,支持緊湊算法;</p><p> ?時(shí)間的流逝可用下面幾種方法模擬:(a)按鍵盤(pán),每按一次可認(rèn)為過(guò)一個(gè)時(shí)間單位; (b) 響應(yīng)WM_TIMER;</p><p> ?將一批進(jìn)程的執(zhí)行情況存入磁盤(pán)文件,以后可以讀出并重放;</p><
4、;p> ?支持算法:首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法:最壞適應(yīng)算法。</p><p><b> 1.3 設(shè)計(jì)目的</b></p><p> 旨在讓我們更好的了解動(dòng)態(tài)分區(qū)管理方面的知識(shí).</p><p> 第二章 原理及算法描述</p><p> 2.1動(dòng)態(tài)分區(qū)分配算法原理</p>
5、;<p><b> 首次適應(yīng)算法</b></p><p> * 算法概述:分配內(nèi)存時(shí),從鏈?zhǔn)组_(kāi)始順序查找,找到滿足的空閑分區(qū)則劃出空間分配,余下的空閑空間仍保留在空閑鏈表中</p><p> * 實(shí)現(xiàn)方法:分配時(shí)從數(shù)組第一個(gè)元素開(kāi)始比較,若符合條件則將該元素減去對(duì)應(yīng)作業(yè)的值</p><p><b> 循環(huán)首次適應(yīng)
6、算法</b></p><p> * 算法概述:由首次適應(yīng)算法演變,只是每次分配改為由上一次找到的空閑分區(qū)開(kāi)始查找</p><p> * 實(shí)現(xiàn)方法:在首次適應(yīng)算法的基礎(chǔ)上增加一個(gè)值用于記錄找到的空閑分區(qū)的位置</p><p><b> 最佳適應(yīng)算法</b></p><p> * 算法概述:每次為作業(yè)分配
7、內(nèi)存時(shí),總是把能滿足要求、又是最小的空閑分區(qū)分配給作業(yè)</p><p> * 實(shí)現(xiàn)方法:我們決定每次分配先把空閑分區(qū)按從小到大的順序排列,然后將第一個(gè)匹配分區(qū)分配給作業(yè)</p><p><b> 最壞適應(yīng)算法</b></p><p> * 算法概述:每次為作業(yè)分配內(nèi)存時(shí),總是挑選一個(gè)最大的空閑分區(qū)分割給作業(yè)使用</p>&l
8、t;p> * 實(shí)現(xiàn)方法:算法與最佳適應(yīng)算法幾乎相同,僅在排序時(shí)把空閑分區(qū)表按從大到小的順序排列,所以未作詳細(xì)注釋</p><p><b> 回收分區(qū)</b></p><p> 當(dāng)進(jìn)程運(yùn)行完畢釋放內(nèi)存時(shí),系統(tǒng)根據(jù)回收區(qū)的首址,從空閑區(qū)鏈(表)中找到相應(yīng)的插入點(diǎn),此時(shí)可能出現(xiàn)以下四種情況之一;</p><p> 1)回收區(qū)與插入點(diǎn)的前
9、一個(gè)空閑分區(qū)F1相鄰接,此時(shí)應(yīng)將回收區(qū)與插入點(diǎn)的前一分區(qū)合并,不必為回收區(qū)分配新表項(xiàng),而只需修改其前一分區(qū)F1的大小.</p><p> 2)回收分區(qū)與插入點(diǎn)的后一空閑分區(qū)F2相鄰接,此時(shí)也可將兩分區(qū)合并,形成新的空閑分區(qū),但用回收區(qū)的首址作為新空閑區(qū)的首址,大小為兩者之和.</p><p> 3)回收區(qū)同時(shí)與插入點(diǎn)的前,后兩個(gè)分區(qū)鄰接,此時(shí)將三個(gè)分區(qū)合并,使用F1的表項(xiàng)和F1的首址,
10、取消F2的表項(xiàng),大小為三者之和.</p><p> 4)回收區(qū)既不與F1相鄰接,又不與F2鄰接.這時(shí)應(yīng)為回收區(qū)單獨(dú)建立一新表項(xiàng),填寫(xiě)回收區(qū)的首址和大小,并根據(jù)其首址插入到空閑鏈中的適當(dāng)位置.</p><p><b> 緊湊算法</b></p><p> 通過(guò)移動(dòng)內(nèi)存中的作業(yè)的位置,以把原來(lái)多個(gè)分散的小分區(qū)拼接成一個(gè)大分區(qū)的方法.</
11、p><p> 第三章 開(kāi)發(fā)環(huán)境</p><p> 此程序是本人利用c++語(yǔ)言在vs2012的開(kāi)發(fā)環(huán)境中實(shí)現(xiàn)的 </p><p> 第四章 程序?qū)崿F(xiàn)--數(shù)據(jù)結(jié)構(gòu)</p><p> #include <iostream></p><p> #include <string></
12、p><p> #include <fstream> </p><p> using namespace std;</p><p> ofstream stream;//輸出流對(duì)象</p><p> int ary1[20][4];//內(nèi)存分配狀態(tài)</p><p> int ary2[20][3];//
13、空閑分區(qū)狀態(tài)</p><p> int ary3[10];//進(jìn)程分配狀態(tài)</p><p> int recycle;//需要回收的盤(pán)塊序號(hào) </p><p> int id1;//算法選擇號(hào)</p><p> int m;//內(nèi)存區(qū)數(shù)</p><p> int n;//空閑區(qū)數(shù)</p><
14、;p> int q;//進(jìn)程數(shù)</p><p> int r=0;//循環(huán)首次適應(yīng)算法:對(duì)應(yīng)的這次查找到的空閑分區(qū)序號(hào)</p><p><b> //打印輸出函數(shù)</b></p><p> void vision()</p><p><b> { </b></p>
15、<p><b> int i;</b></p><p><b> int j;</b></p><p> if(id1==1)stream.open("first_fit.txt", ios::app);</p><p> if(id1==2)stream.open("nex
16、tfirst_fit.txt", ios::app);</p><p> if(id1==3)stream.open("best_fit.txt",ios::app);</p><p> if(id1==4)stream.open("worst_fit.txt", ios::app);</p><p> if(
17、id1==5)stream.open("compact.txt",ios::app);</p><p> if(id1==6)stream.open("huishou.txt",ios::app);</p><p> cout<<"-------------內(nèi)存分配狀態(tài)-------------"<<e
18、ndl;</p><p> cout<<"分區(qū)號(hào) 大小/KB 始址/KB 狀態(tài)"<<endl;</p><p> stream<<"-------------內(nèi)存分配狀態(tài)-------------"<<endl;</p><p> stream<&l
19、t;"分區(qū)號(hào) 大小/KB 始址/KB 狀態(tài)"<<endl;</p><p> for(j=0;j<m;j++)</p><p><b> {</b></p><p> cout <<ary1[j][0]<<" ";<
20、/p><p> stream<<ary1[j][0]<<" ";</p><p> cout <<ary1[j][1]<<" ";</p><p> stream<<ary1[j][1]<<"
21、 ";</p><p> cout <<ary1[j][2]<<" ";</p><p> stream<<ary1[j][2]<<" ";</p><p> if(ary1[j][3]==2){</p><p>
22、 cout<<"已分配";</p><p> stream<<"已分配";}</p><p><b> else{</b></p><p> cout<<"未分配";</p><p> stream<<&
23、quot;未分配";</p><p><b> }</b></p><p> cout <<endl;</p><p> stream<<endl;</p><p><b> }</b></p><p> cout <<
24、endl;</p><p> cout<<"--------空閑分區(qū)鏈--------"<<endl;</p><p> cout<<"分區(qū)號(hào) 大小/KB 起址/KB"<<endl;</p><p> stream<<"--------空閑分區(qū)鏈---
25、-----"<<endl;</p><p> stream<<"分區(qū)號(hào) 大小/KB 起址/KB"<<endl;</p><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> cout<<
26、;ary2[i][0]<<" ";</p><p> stream<<ary2[i][0]<<" ";</p><p> cout<<ary2[i][1]<<" ";</p><p> stream&
27、lt;<ary2[i][1]<<" ";</p><p> cout<<ary2[i][2];</p><p> stream<<ary2[i][2];</p><p> cout<<endl;</p><p> stream<<end
28、l;</p><p><b> }</b></p><p> cout<<"--------------------------"<<endl;</p><p> stream<<"--------------------------"<<endl;&
29、lt;/p><p> cout<<endl;</p><p> stream.close();</p><p><b> }</b></p><p> //作業(yè)信息的自動(dòng)產(chǎn)生</p><p> void create_pro()</p><p><b
30、> {</b></p><p><b> int i;</b></p><p> for(i=0;i<q;i++)</p><p><b> {</b></p><p> ary3[i]=rand()%100;</p><p> if(ar
31、y3[i]==0)</p><p><b> {i--;}</b></p><p><b> }</b></p><p> ary3[0]=42;</p><p> ary3[1]=86;</p><p> cout<<"產(chǎn)生"<
32、;<q<<"個(gè)隨機(jī)進(jìn)程"<<endl;</p><p> cout<<"大小分別是:";</p><p> for(i=0;i<q;i++){</p><p> cout<<"["<<ary3[i]<<"]&
33、quot;<<" ";</p><p><b> }</b></p><p> cout <<endl;</p><p><b> }</b></p><p><b> //作業(yè)的手動(dòng)生成</b></p><
34、;p> void create_zuoye(){</p><p><b> int j;</b></p><p> int choice2;</p><p> int id3=rand()%10;</p><p> m=id3;//內(nèi)存區(qū)數(shù)量 </p><p> cout<
35、;<"---您將創(chuàng)建幾個(gè)進(jìn)程---:" ;</p><p> cin>>choice2;</p><p> q=choice2;</p><p> cout<<"輸入想創(chuàng)建的作業(yè)請(qǐng)求大小"<<endl;</p><p> for(int i=0;i<
36、;choice2;i++)</p><p><b> {</b></p><p><b> cin>>j;</b></p><p> ary3[i]=j;</p><p><b> }</b></p><p> cout<&l
37、t;"你創(chuàng)建了"<<choice2<<"個(gè)進(jìn)程 ";</p><p> for(int i=0;i<choice2;i++){</p><p> cout<<ary3[i]<<" ";</p><p><b> }</b>
38、</p><p> cout<<endl;</p><p><b> }</b></p><p> //內(nèi)存信息的自動(dòng)產(chǎn)生</p><p> void create_apply()</p><p><b> {</b></p><p&
39、gt;<b> int i;</b></p><p> for (i=0;i<m;i++)</p><p><b> {</b></p><p> ary1[i][0]=i+1;</p><p> ary1[i][1]=rand()%100;</p><p>
40、<b> if(i==0)</b></p><p> ary1[i][2]=0;</p><p><b> else</b></p><p><b> {</b></p><p> ary1[i][2]=ary1[i-1][2]+ary1[i-1][1];</p
41、><p><b> }</b></p><p> ary1[i][3]=rand()%3;</p><p> //cout <<i<<endl;</p><p> if(ary1[i][1]==0)</p><p><b> {i--;}</b>
42、</p><p><b> }</b></p><p> int k=0;//空閑區(qū)數(shù)量</p><p> for (i=0;i<m;i++)</p><p><b> {</b></p><p> if(ary1[i][3]!=2)</p>&
43、lt;p> {ary2[k][0]=ary1[i][0];</p><p> ary2[k][1]=ary1[i][1];</p><p> ary2[k][2]=ary1[i][2];</p><p><b> k++;</b></p><p><b> }</b></p&g
44、t;<p><b> }</b></p><p> n=k;//空閑塊數(shù)量</p><p><b> }</b></p><p> //內(nèi)存信息的手動(dòng)生成</p><p> int create_fenqu(){</p><p> int k,x,
45、y,o=0; </p><p><b> int a=0;</b></p><p> cout<<"輸入想創(chuàng)建的內(nèi)存分區(qū)塊數(shù) : " ;</p><p><b> cin>>k;</b></p><p> cout<<"
46、輸入"<<k<<"個(gè)內(nèi)存分區(qū)塊 大小"<<endl;</p><p> for(int i=0;i<k;i++){</p><p> ary1[i][0]=i; //序號(hào)</p><p><b> cin>>x;</b></p><p
47、> ary1[i][1]=x;//大小</p><p><b> }</b></p><p> cout<<"輸入內(nèi)存塊的分配狀態(tài)"<<endl;</p><p> for(int i=0;i<k;i++){</p><p><b> cin&g
48、t;>y;</b></p><p><b> if(y==2){</b></p><p><b> n++;</b></p><p><b> }</b></p><p> ary1[i][3]=y;//狀態(tài)</p><p>&
49、lt;b> }</b></p><p> ary1[0][2]=0;</p><p> ary1[1][2]=ary1[0][1];</p><p> for(int i=2;i<k;i++){</p><p> ary1[i][2]=ary1[i-1][2]+ary1[i-1][1];//起始地址</
50、p><p><b> }</b></p><p><b> m=k; </b></p><p> for (int i=0;i<k;i++)</p><p><b> {</b></p><p> if(ary1[i][3]!=2){<
51、;/p><p> ary2[a][0]=ary1[i][0];</p><p> ary2[a][1]=ary1[i][1];</p><p> ary2[a][2]=ary1[i][2];</p><p><b> a++;</b></p><p><b> }</b>
52、;</p><p><b> }</b></p><p><b> n=a;</b></p><p> return m,n;</p><p><b> }</b></p><p><b> //首次適應(yīng)算法</b><
53、;/p><p> void first_fit()</p><p><b> { </b></p><p><b> vision();</b></p><p><b> int i;</b></p><p><b> int j;&
54、lt;/b></p><p><b> int k;</b></p><p><b> int l;</b></p><p> int d;//用來(lái)保存第k個(gè)的值</p><p> int id2=0;</p><p> for(i=0;i<q;i++)
55、//為每個(gè)進(jìn)程分配空間</p><p><b> {</b></p><p> for(j=0;j<n;j++)//查找空閑鏈表每項(xiàng)</p><p><b> {</b></p><p> if(ary2[j][1]>=ary3[i])//進(jìn)程占用空間小于等于其中一個(gè)空閑區(qū)的大小
56、</p><p><b> {</b></p><p> cout<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]相匹配"<<endl;</p><
57、p> stream.open("first_fit.txt", ios::app);</p><p> stream<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]相匹配"<<endl;&
58、lt;/p><p> stream.close();</p><p> if(ary2[j][1]==ary3[i])//進(jìn)程占用空間等于其中一個(gè)空閑區(qū)塊大小</p><p><b> {</b></p><p> ary1[ary2[j][0]-1][3]=2;</p><p> for(
59、k=j+1;k<n;k++)</p><p><b> {</b></p><p> ary2[k-1][0]=ary2[k][0];</p><p> ary2[k-1][1]=ary2[k][1];</p><p> ary2[k-1][2]=ary2[k][2];</p><p&g
60、t;<b> }</b></p><p><b> n--; </b></p><p> }else//否則的話,空閑鏈對(duì)應(yīng)的地方盤(pán)塊大小小了進(jìn)程占用的大小,并且內(nèi)存分配從對(duì)應(yīng)的那一項(xiàng)開(kāi)始增加一項(xiàng)</p><p><b> {</b></p><p> l=ary
61、2[j][0];</p><p> d=ary1[l-1][1];//大小</p><p> ary1[l-1][1]=ary3[i];</p><p> ary1[l-1][3]=2;</p><p><b> m++;</b></p><p> for(k=m;k>ary2[j
62、][0]+1;k--)</p><p><b> {</b></p><p> ary1[k-1][0]=ary1[k-2][0]+1;</p><p> ary1[k-1][1]=ary1[k-2][1];</p><p> ary1[k-1][2]=ary1[k-2][2];</p><p
63、> ary1[k-1][3]=ary1[k-2][3];</p><p><b> }</b></p><p> l=ary2[j][0];</p><p> ary1[l][0]=l+1;</p><p> ary1[l][1]=d-ary3[i];</p><p> ary1
64、[l][2]=ary1[l-1][1]+ary1[l-1][2];</p><p> ary1[l][3]=0;</p><p><b> k=0;</b></p><p> for(id2=0;id2<m;id2++)</p><p><b> {</b></p>&l
65、t;p> if(ary1[id2][3]!=2)</p><p><b> {</b></p><p> ary2[k][0]=ary1[id2][0];</p><p> ary2[k][1]=ary1[id2][1];</p><p> ary2[k][2]=ary1[id2][2];</p&g
66、t;<p><b> k++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> n=k;</b></p><p><b> }</b></p&
67、gt;<p><b> break;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> cout<<"["
68、;<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]不匹配"<<endl;</p><p> stream.open("first_fit.txt", ios::app);</p><p> stream<&
69、lt;"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]不匹配"<<endl;</p><p> stream.close();</p><p><b> }</b></p>
70、;<p><b> } </b></p><p> vision(); </p><p><b> }</b></p><p><b> }</b></p><p> //首次循環(huán)適應(yīng)算法</p><p> void n
71、ext_fit()</p><p><b> { </b></p><p><b> vision();</b></p><p><b> int i;</b></p><p><b> int j;</b></p><p>
72、;<b> int k;</b></p><p><b> int s;</b></p><p><b> int d; </b></p><p><b> int id2;</b></p><p> for(i=0;i<q;i++)//對(duì)
73、每一個(gè)進(jìn)程隊(duì)列中的進(jìn)程分配資源</p><p><b> {</b></p><p> for(j=r;j<n;j++)</p><p><b> {</b></p><p> if(ary3[i]<=ary2[j][1])</p><p><b&g
74、t; {</b></p><p> cout<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]相匹配"<<endl;</p><p> stream.open("nex
75、tfirst_fit.txt", ios::app);</p><p> stream<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]相匹配"<<endl;</p><p> st
76、ream.close();</p><p> if(ary3[i]==ary2[j][1])</p><p><b> {</b></p><p> //---改變內(nèi)存分配---</p><p> k=ary2[j][0];//得到對(duì)應(yīng)空閑塊對(duì)應(yīng)內(nèi)存塊的序號(hào)</p><p><b&g
77、t; k--;</b></p><p> ary1[k][3]=2;//把對(duì)應(yīng)內(nèi)存塊標(biāo)志位上改成已分配</p><p> //------------------</p><p> //--改變空閑塊表:把從這塊空閑塊以下的所有空閑塊向上移一格--</p><p><b> n--;</b><
78、/p><p> for(k=j;k<n;k++)</p><p><b> {</b></p><p> ary2[k][0]=ary2[k+1][0];</p><p> ary2[k][1]=ary2[k+1][1];</p><p> ary2[k][2]=ary2[k+1][2
79、];</p><p><b> }</b></p><p><b> vision();</b></p><p> //------------------</p><p><b> break;</b></p><p><b> }
80、</b></p><p> else//對(duì)應(yīng)的空閑塊大小大于進(jìn)程需要大小</p><p><b> {</b></p><p> //-----改變內(nèi)存分配情況-----</p><p> r=(r+1)%n;</p><p> //改變第k塊的內(nèi)容</p>&
81、lt;p> k=ary2[j][0];</p><p> d=ary1[k-1][1];</p><p> ary1[k-1][1]=ary3[i];</p><p> ary1[k-1][3]=2;</p><p> //從k+1之后所有向后移一格</p><p> m++;//內(nèi)存塊數(shù)增加1<
82、;/p><p> for(s=m-1;s>k;s--)</p><p><b> {</b></p><p> ary1[s][0]=ary1[s-1][0]+1;</p><p> ary1[s][1]=ary1[s-1][1];</p><p> ary1[s][2]=ary1[s
83、-1][2];</p><p> ary1[s][3]=ary1[s-1][3];</p><p><b> }</b></p><p> //改變第k+1塊內(nèi)容:對(duì)應(yīng)的數(shù)組是ary1[k]</p><p> ary1[k][0]=ary1[k-1][0]+1;</p><p> ary
84、1[k][1]=d-ary1[k-1][1];</p><p> ary1[k][2]=ary1[k-1][1]+ary1[k-1][2];</p><p> //--------------------------</p><p> //----改變空閑表分配情況----</p><p><b> k=0;</b&g
85、t;</p><p> for(id2=0;id2<m;id2++)</p><p><b> {</b></p><p> if(ary1[id2][3]!=2)</p><p><b> {</b></p><p> ary2[k][0]=ary1[id2
86、][0];</p><p> ary2[k][1]=ary1[id2][1];</p><p> ary2[k][2]=ary1[id2][2];</p><p><b> k++;</b></p><p><b> }</b></p><p><b>
87、}</b></p><p><b> n=k;</b></p><p> //--------------------------</p><p><b> vision();</b></p><p><b> break;</b></p>&
88、lt;p><b> }</b></p><p><b> }</b></p><p><b> else{</b></p><p> cout<<"["<<ary3[i]<<"]與"<<"[
89、"<<ary2[j][1]<<"]不匹配"<<endl;</p><p> stream.open("nextfirst_fit.txt", ios::app);</p><p> stream<<"["<<ary3[i]<<"]與&q
90、uot;<<"["<<ary2[j][1]<<"]不匹配"<<endl;</p><p> stream.close();</p><p><b> }</b></p><p><b> }</b></p><
91、p><b> }</b></p><p><b> }</b></p><p> //思路:先把空閑列表檢索一遍,選出最佳答案,進(jìn)行分配</p><p> void best_fit()//最佳算法--按順序檢索,把與進(jìn)程要求內(nèi)存大小最接近的快分配給進(jìn)程</p><p><b&g
92、t; {</b></p><p><b> int i;</b></p><p><b> int s;</b></p><p> int j=-9999;//用來(lái)保存最接近的答案</p><p> int e;//用來(lái)存放進(jìn)行比較時(shí)的中間結(jié)果</p><p
93、><b> int k;</b></p><p><b> int l;</b></p><p><b> int d;</b></p><p><b> int id2;</b></p><p><b> vision();&l
94、t;/b></p><p> for(i=0;i<q;i++)</p><p> { e=9999;</p><p><b> j=-9999;</b></p><p> for(s=0;s<n;s++)</p><p><b> {</b>&
95、lt;/p><p> if((ary2[s][1]>=ary3[i])&&(e>ary2[s][1]))//滿足分配要求</p><p><b> {</b></p><p> e=ary2[s][1];</p><p><b> j=s;</b></p>
96、<p><b> }</b></p><p><b> }</b></p><p><b> if(j<0)</b></p><p><b> {</b></p><p> cout<<"["&
97、lt;<ary3[i]<<"]與"<<"所有空閑盤(pán)塊不匹配"<<endl;</p><p> stream.open("best_fit.txt", ios::app);</p><p> stream<<"["<<ary3[i]<&l
98、t;"]與"<<"所有空閑盤(pán)塊不匹配"<<endl;</p><p> stream.close();</p><p><b> }else</b></p><p><b> {</b></p><p> cout<<
99、;"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]最佳相匹配"<<endl;</p><p> stream.open("best_fit.txt", ios::app);</p><p>
100、; stream<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]最佳相匹配"<<endl;</p><p> stream.close();</p><p> if(ary2[j][1]=
101、=ary3[i])</p><p><b> {</b></p><p> k=ary2[j][0];</p><p> ary1[k-1][3]=2;</p><p> for(l=k;l<n;l++)</p><p><b> {</b></p>
102、;<p> ary2[l-1][0]=ary2[l][0];</p><p> ary2[l-1][1]=ary2[l][1];</p><p> ary2[l-1][2]=ary2[l][2];</p><p><b> }</b></p><p><b> n--;</b>
103、;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> //把對(duì)應(yīng)的內(nèi)存分配進(jìn)行更改</p><p> k=ary2[j][0];</p>&l
104、t;p> d=ary1[k-1][1];</p><p> ary1[k-1][1]=ary3[i];</p><p> ary1[k-1][3]=2;</p><p><b> m++;</b></p><p> for(l=m;l>ary2[j][0]+1;l--)</p><
105、;p><b> {</b></p><p> ary1[l-1][0]=ary1[l-2][0]+1;</p><p> ary1[l-1][1]=ary1[l-2][1];</p><p> ary1[l-1][2]=ary1[l-2][2];</p><p> ary1[l-1][3]=ary1[l-
106、2][3];</p><p><b> }</b></p><p> k=ary2[j][0];</p><p> ary1[k][0]=k+1;</p><p> ary1[k][1]=d-ary1[k-1][1];</p><p> ary1[k][2]=ary1[k-1][1]+a
107、ry1[k-1][2];</p><p> ary1[k][3]=0;</p><p><b> k=0;</b></p><p> for(id2=0;id2<m;id2++)</p><p><b> {</b></p><p> if(ary1[id2]
108、[3]!=2)</p><p><b> {</b></p><p> ary2[k][0]=ary1[id2][0];</p><p> ary2[k][1]=ary1[id2][1];</p><p> ary2[k][2]=ary1[id2][2];</p><p><b>
109、; k++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> n=k;</b></p><p> for(k=j+1;k<n;k++)</p><p><b&
110、gt; {</b></p><p> ary2[k][0]++;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> vision(
111、);</b></p><p><b> }</b></p><p><b> }</b></p><p><b> //最壞適應(yīng)算法</b></p><p> void worst_fit()</p><p><b> {
112、</b></p><p><b> int i;</b></p><p><b> int s;</b></p><p> int j=-9999;//用來(lái)保存最接近的答案</p><p> int e=-9999;//用來(lái)存放進(jìn)行比較時(shí)的中間結(jié)果</p><
113、p><b> int k;</b></p><p><b> int l;</b></p><p><b> int d;</b></p><p><b> int id2;</b></p><p><b> vision();&
114、lt;/b></p><p> for(i=0;i<q;i++)</p><p><b> {</b></p><p><b> j=-9999;</b></p><p><b> e=-9999;</b></p><p> for
115、(s=0;s<n;s++)</p><p><b> {</b></p><p> if((ary2[s][1]>=ary3[i])&&(e<ary2[s][1]))//滿足分配要求</p><p><b> {</b></p><p> e=ary2[s]
116、[1];</p><p><b> j=s;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> if(j<0)</b></p><p><b>
117、{</b></p><p> cout<<"["<<ary3[i]<<"]與"<<"所有空閑盤(pán)塊不匹配"<<endl;</p><p> stream.open("worst_fit.txt", ios::app);</p>
118、<p> stream<<"["<<ary3[i]<<"]與"<<"所有空閑盤(pán)塊不匹配"<<endl;</p><p> stream.close();</p><p><b> }else</b></p><
119、p><b> {</b></p><p> cout<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]最差相匹配"<<endl;</p><p> stream.
120、open("worst_fit.txt", ios::app);</p><p> stream<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]最差相匹配"<<endl;</p>&
121、lt;p> stream.close();</p><p> if(ary2[j][1]==ary3[i])</p><p><b> {</b></p><p> k=ary2[j][0];</p><p> ary1[k-1][3]=2;</p><p> for(l=k;l
122、<n;l++)</p><p><b> {</b></p><p> ary2[l-1][0]=ary2[l][0];</p><p> ary2[l-1][1]=ary2[l][1];</p><p> ary2[l-1][2]=ary2[l][2];</p><p><b
123、> }</b></p><p><b> n--;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> //
124、把對(duì)應(yīng)的內(nèi)存分配進(jìn)行更改</p><p> k=ary2[j][0];</p><p> d=ary1[k-1][1];</p><p> ary1[k-1][1]=ary3[i];</p><p> ary1[k-1][3]=2;</p><p><b> m++;</b></p
125、><p> for(l=m;l>ary2[j][0]+1;l--)</p><p><b> {</b></p><p> ary1[l-1][0]=ary1[l-2][0]+1;</p><p> ary1[l-1][1]=ary1[l-2][1];</p><p> ary1[l-
126、1][2]=ary1[l-2][2];</p><p> ary1[l-1][3]=ary1[l-2][3];</p><p><b> }</b></p><p> k=ary2[j][0];</p><p> ary1[k][0]=k+1;</p><p> ary1[k][1]=d
127、-ary1[k-1][1];</p><p> ary1[k][2]=ary1[k-1][1]+ary1[k-1][2];</p><p> ary1[k][3]=0;</p><p><b> k=0;</b></p><p> for(id2=0;id2<m;id2++)</p><
128、p><b> {</b></p><p> if(ary1[id2][3]!=2)</p><p><b> {</b></p><p> ary2[k][0]=ary1[id2][0];</p><p> ary2[k][1]=ary1[id2][1];</p>&l
129、t;p> ary2[k][2]=ary1[id2][2];</p><p><b> k++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> n=k;</b></p>
130、;<p> for(k=j+1;k<n;k++)</p><p><b> {</b></p><p> ary2[k][0]++;</p><p><b> }</b></p><p><b> }</b></p><p>
131、;<b> }</b></p><p><b> vision();</b></p><p><b> } </b></p><p><b> }</b></p><p><b> //回收內(nèi)存算法:</b></p&g
132、t;<p><b> /* </b></p><p> 有共計(jì)八種情況,1.(1)回收區(qū)上鄰接著空閑盤(pán)塊,下連接著已分配盤(pán)塊</p><p> (2)回收區(qū)下鄰接著空閑盤(pán)塊,上鄰接著已分配盤(pán)塊</p><p> (3)回收區(qū)上下連接的都是空閑盤(pán)塊</p><p> (4)空閑區(qū)上下鄰接的都是已分配
133、盤(pán)塊</p><p> ?。?)要回收的盤(pán)塊就是第一個(gè)盤(pán)塊,并且向下鄰接著空閑盤(pán)塊</p><p> (6)要回收的盤(pán)塊就是第一個(gè)盤(pán)塊,但是向下鄰接著已分配盤(pán)塊</p><p> (7)要回收的盤(pán)塊就是最后一個(gè)盤(pán)塊,并且向上鄰接的是空閑盤(pán)塊</p><p> (8)要回收的盤(pán)塊就是最后一個(gè)盤(pán)塊,但是向上鄰接的是已分配盤(pán)塊</p&g
134、t;<p><b> */</b></p><p> void apply_recycle()</p><p><b> {</b></p><p><b> int i;</b></p><p><b> int j;</b>&l
135、t;/p><p><b> int k;</b></p><p><b> if(m==1)</b></p><p><b> {</b></p><p> ary1[0][3]=0;</p><p><b> n++;</b>
136、;</p><p> ary2[0][0]=1;</p><p> ary2[0][1]=ary1[0][1];</p><p> ary2[0][2]=ary1[0][2];</p><p><b> vision();</b></p><p><b> }</b>
137、;</p><p><b> else</b></p><p><b> {</b></p><p> if(recycle==1)</p><p> { //cout<<ary1</p><p> if(ary1[1][3]!=2)</p&g
138、t;<p><b> {</b></p><p> cout<<"要回收的盤(pán)塊就是第一個(gè)盤(pán)塊,并且向下鄰接著空閑盤(pán)塊"<<endl;</p><p> stream.open("huishou.txt", ios::app);</p><p> stream&
139、lt;<"要回收的盤(pán)塊就是第一個(gè)盤(pán)塊,并且向下鄰接著空閑盤(pán)塊"<<endl;</p><p> stream.close();</p><p> ary1[0][1]=ary1[0][1]+ary1[1][1];</p><p> ary1[0][3]=0;</p><p> for(i=1;i&
140、lt;m;i++)</p><p><b> {</b></p><p> ary1[i][0]=ary1[i+1][0]-1;</p><p> ary1[i][1]=ary1[i+1][1];</p><p> ary1[i][2]=ary1[i+1][2];</p><p> ar
141、y1[i][3]=ary1[i+1][3];</p><p> //cout<<"ary1[i][3]"<<ary1[i][3]<<endl;</p><p><b> }</b></p><p><b> m--;</b></p><p&g
142、t; //cout<<""</p><p><b> k=0;</b></p><p><b> vision();</b></p><p> //cout<<"ary1[0][3]"<<ary1[0][3]<<endl;&l
143、t;/p><p> //cout<<"ary1[1][3]"<<ary1[1][3]<<endl;</p><p> //cout<<"ary1[2][3]"<<ary1[2][3]<<endl;</p><p> //cout<<"
144、;ary1[3][3]"<<ary1[3][3]<<endl;</p><p> for(j=0;j<m;j++)</p><p><b> {</b></p><p> cout<<"ary1[j][3]"<<ary1[j][3]<<endl
145、;</p><p> if(ary1[j][3]!=2)</p><p><b> {</b></p><p> ary2[k][0]=ary1[j][0];</p><p> ary2[k][1]=ary1[j][1];</p><p> ary2[k][2]=ary1[j][2];&
146、lt;/p><p><b> k++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> n=k;</b></p><p><b> vision();&l
147、t;/b></p><p><b> }</b></p><p><b> else{</b></p><p> cout<<"要回收的盤(pán)塊就是第一個(gè)盤(pán)塊,但是向下鄰接著已分配盤(pán)塊"<<endl;</p><p> stream.open(&
148、quot;huishou.txt", ios::app);</p><p> stream<<"要回收的盤(pán)塊就是第一個(gè)盤(pán)塊,但是向下鄰接著已分配盤(pán)塊"<<endl;</p><p> stream.close();</p><p> ary1[0][3]=0;</p><p><
149、;b> k=0;</b></p><p> for(j=0;j<m;j++)</p><p><b> {</b></p><p> //cout<<"ary1[j][3]"<<ary1[j][3]<<endl;</p><p>
150、if(ary1[j][3]!=2)</p><p><b> {</b></p><p> ary2[k][0]=ary1[j][0];</p><p> ary2[k][1]=ary1[j][1];</p><p> ary2[k][2]=ary1[j][2];</p><p><
151、b> k++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> n=k;</b></p><p><b> vision();</b></p><
152、p><b> }</b></p><p><b> }</b></p><p> else if(recycle==m)</p><p><b> {</b></p><p> if(ary1[recycle-2][3]!=2)</p><p
153、><b> {</b></p><p> cout<<"要回收的盤(pán)塊就是最后一個(gè)盤(pán)塊,并且向上鄰接的是空閑盤(pán)塊"<<endl;</p><p> stream.open("huishou.txt", ios::app);</p><p> stream<<
154、"要回收的盤(pán)塊就是最后一個(gè)盤(pán)塊,并且向上鄰接的是空閑盤(pán)塊"<<endl;</p><p> stream.close();</p><p> ary1[recycle-2][3]=0;</p><p> ary1[recycle-2][1]=ary1[recycle-2][1]+ary1[recycle-1][1];</p
155、><p><b> m--;</b></p><p><b> k=0;</b></p><p> for(j=0;j<m;j++)</p><p><b> {</b></p><p> //cout<<"ary1[j
156、][3]"<<ary1[j][3]<<endl;</p><p> if(ary1[j][3]!=2)</p><p><b> {</b></p><p> ary2[k][0]=ary1[j][0];</p><p> ary2[k][1]=ary1[j][1];</p
157、><p> ary2[k][2]=ary1[j][2];</p><p><b> k++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> n=k;</b><
158、;/p><p><b> vision();</b></p><p><b> }</b></p><p><b> else{</b></p><p> cout<<"要回收的盤(pán)塊就是最后一個(gè)盤(pán)塊,但是向上鄰接的是已分配盤(pán)塊"<<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四操作系統(tǒng)-動(dòng)態(tài)分區(qū)分配算法
- c語(yǔ)言課程設(shè)計(jì)_存儲(chǔ)管理分區(qū)分配算法
- 操作系統(tǒng)課程設(shè)計(jì)--模擬實(shí)現(xiàn)可變分區(qū)存儲(chǔ)管理
- 操作系統(tǒng)原理課程設(shè)計(jì)報(bào)告-可變分區(qū)存儲(chǔ)管理
- 操作系統(tǒng)課程設(shè)計(jì)存儲(chǔ)管理
- 《操作系統(tǒng)》課程設(shè)計(jì)---連續(xù)動(dòng)態(tài)分區(qū)內(nèi)存管理模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)--連續(xù)動(dòng)態(tài)分區(qū)內(nèi)存管理模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)--連續(xù)動(dòng)態(tài)分區(qū)內(nèi)存管理模擬實(shí)現(xiàn)
- 模擬頁(yè)式存儲(chǔ)管理-操作系統(tǒng)課程設(shè)計(jì)
- 模擬頁(yè)式存儲(chǔ)管理 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--請(qǐng)求頁(yè)式存儲(chǔ)管理
- 操作系統(tǒng)課程設(shè)計(jì)--請(qǐng)求頁(yè)式存儲(chǔ)管理
- 操作系統(tǒng)課程設(shè)計(jì)--- 請(qǐng)求調(diào)頁(yè)存儲(chǔ)管理
- 操作系統(tǒng)課程設(shè)計(jì)--請(qǐng)求頁(yè)式存儲(chǔ)管理
- 虛擬存儲(chǔ)器管理系統(tǒng)操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---文件加密存儲(chǔ)
- 操作系統(tǒng)課程設(shè)計(jì)——操作系統(tǒng)課程設(shè)計(jì)模擬操作系統(tǒng)
- 內(nèi)存管理(操作系統(tǒng))操作系統(tǒng)課程設(shè)計(jì)
- 模擬頁(yè)式存儲(chǔ)管理-操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)-- 操作系統(tǒng)
評(píng)論
0/150
提交評(píng)論