版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院</p><p> 操作系統(tǒng) 課程設(shè)計(jì)報(bào)告</p><p> 課 題: 模擬頁(yè)式存儲(chǔ)管理 </p><p> 姓 名: </p><p> 學(xué) 號(hào): <
2、/p><p> 同組姓名: </p><p> 專(zhuān)業(yè)班級(jí): </p><p> 指導(dǎo)教師: </p><p> 設(shè)計(jì)時(shí)間: 2013-6-25 </p><p><b
3、> 目錄</b></p><p><b> 一、目的和要求2</b></p><p><b> 1、設(shè)計(jì)目的2</b></p><p><b> 2、設(shè)計(jì)要求2</b></p><p> 二、設(shè)計(jì)思路及過(guò)程2</p><p
4、><b> 1、概要設(shè)計(jì)2</b></p><p><b> 2、過(guò)程設(shè)計(jì)3</b></p><p><b> 三、數(shù)據(jù)定義5</b></p><p><b> 四、核心代碼5</b></p><p><b> 五、運(yùn)行截
5、圖8</b></p><p><b> 六、小結(jié)10</b></p><p><b> 七、參考文獻(xiàn)11</b></p><p><b> 附錄12</b></p><p><b> 一、目的和要求</b></p>
6、<p><b> 1、設(shè)計(jì)目的</b></p><p> 通過(guò)請(qǐng)求頁(yè)式存儲(chǔ)管理中頁(yè)面置換算法模擬設(shè)計(jì),了解虛擬存儲(chǔ)技術(shù)的特點(diǎn),掌握請(qǐng)求頁(yè)式存儲(chǔ)管理的頁(yè)面置換算法。</p><p><b> 2、設(shè)計(jì)要求</b></p><p> 根據(jù)模擬的頁(yè)式管理設(shè)計(jì),掌握在頁(yè)式存儲(chǔ)管理中最基本的三種頁(yè)面調(diào)度算法FIF
7、O、LRU以及OPT。但在三種算法中均要求在調(diào)度程序中產(chǎn)生的頁(yè)面序列是隨機(jī)產(chǎn)生的,而不是人為的輸入,在執(zhí)行時(shí)只需改變頁(yè)面的大小及內(nèi)存容量就可以得到不同的頁(yè)面序列,另外還需要說(shuō)明隨機(jī)的性能和其性能可能對(duì)算法的影響,并對(duì)隨機(jī)性要有一定的參數(shù)控制能力。此外,計(jì)算并輸出FIFO、LRU以及OPT算法在不同內(nèi)存容量下的命中率。</p><p> 根據(jù)方法的執(zhí)行過(guò)程,編寫(xiě)一個(gè)解決上述問(wèn)題的程序,顯示訪問(wèn)每個(gè)值頁(yè)面中的值。&
8、lt;/p><p> 具體參數(shù):訪問(wèn)串的長(zhǎng)度,訪問(wèn)串,頁(yè)面?zhèn)€數(shù)。</p><p> 分別用3種不同的方法實(shí)現(xiàn)頁(yè)面的置換,并輸出相關(guān)信息。</p><p><b> 二、設(shè)計(jì)思路及過(guò)程</b></p><p><b> 1、概要設(shè)計(jì)</b></p><p><b>
9、; 1.1 問(wèn)題概述</b></p><p> 根據(jù)三種不同的置換算法,依據(jù)其不同的算法方式,分別計(jì)算該算法在不同情況下的命中率,并顯示各頁(yè)面的變化情況。</p><p><b> 1.2 內(nèi)容分析</b></p><p> 對(duì)于該課程設(shè)計(jì)中模擬的頁(yè)式存儲(chǔ)管理的頁(yè)面置換過(guò)程,只要掌握其中最基本的三種算法,包括FIFO、LRU
10、及OPT。 但最重要的一點(diǎn)就是要求產(chǎn)生隨機(jī)序列,所以在編寫(xiě)程序時(shí)要采用控制產(chǎn)生隨機(jī)值的種子數(shù)函數(shù),如此能產(chǎn)生隨機(jī)的訪問(wèn)序列。另外,不能在執(zhí)行完一次操作后就只能進(jìn)行另外一種算法的操作,必須還要有更加詳細(xì)的操作,比如:是否要重新得到新序列?還是要不改變?cè)L問(wèn)序列而只改變?cè)L問(wèn)串的內(nèi)存容量?抑或是不操作就退出該算法以進(jìn)行下一種調(diào)度算法?因此,在執(zhí)行完每次操作后都必須要有提示語(yǔ),看是否進(jìn)入更細(xì)節(jié)的操作,還是退出本次算法的操作以進(jìn)入下一種算法的調(diào)度。
11、</p><p><b> 2、過(guò)程設(shè)計(jì)</b></p><p><b> 2.1模塊設(shè)計(jì)</b></p><p> 在下圖的主模塊設(shè)計(jì)圖中,只注重描繪了頁(yè)式存儲(chǔ)管理的三種主要算法,未描繪出細(xì)節(jié)部分。其中,在執(zhí)行每種算法時(shí)都會(huì)要求輸入你所需要的訪問(wèn)串長(zhǎng)度、隨機(jī)值以及同一種算法的不同內(nèi)存容量,如此就可以得出不同的命中率
12、。另外,在執(zhí)行完該操作后又會(huì)出現(xiàn)三條提示語(yǔ),是重新得到新序列?還是不改變?cè)L問(wèn)序列只改變?cè)L問(wèn)串的內(nèi)存容量?抑或是不操作退出以進(jìn)行下一種調(diào)度算法?這些在下圖中都未一一實(shí)現(xiàn)。</p><p> 圖2.1 頁(yè)式存儲(chǔ)管理的主模塊設(shè)計(jì)圖</p><p> 2.2 算法原理分析</p><p> 要學(xué)成功實(shí)現(xiàn)算法,首先要知道各個(gè)方法是怎么做的,即原理是怎樣的,下面是三種算法
13、的原理。</p><p> FIFO算法是先進(jìn)先出,當(dāng)當(dāng)前內(nèi)存中沒(méi)有正要訪問(wèn)的頁(yè)面時(shí),置換出最先進(jìn)來(lái)的頁(yè)面。</p><p> LRU算法是最近最久未使用,當(dāng)當(dāng)前內(nèi)存中沒(méi)有正要訪問(wèn)的頁(yè)面時(shí),置換出在當(dāng)前頁(yè)面中最近最久沒(méi)有使用的頁(yè)面。</p><p> OPT算法是未來(lái)最遠(yuǎn)出現(xiàn),當(dāng)當(dāng)前內(nèi)存中沒(méi)有正要訪問(wèn)的頁(yè)面時(shí),置換出當(dāng)前頁(yè)面中在未來(lái)的訪問(wèn)頁(yè)中再也不出現(xiàn)的頁(yè)面或
14、最遠(yuǎn)出現(xiàn)的頁(yè)面。</p><p><b> 2.3 程序流程圖</b></p><p> 本次課程設(shè)計(jì)的主要流程是3種置換算法的流程圖,我負(fù)責(zé)opt算法的流程圖,流程圖如下所示:</p><p> 圖2.2 opt 算法流程圖</p><p><b> 三、數(shù)據(jù)定義</b></
15、p><p> int length,num_page,count,seed; //length記錄訪問(wèn)串的長(zhǎng)度,num_page頁(yè)面數(shù),count記錄缺頁(yè)次數(shù)</p><p> int result[20][30],order[30],a[10]; //result記錄結(jié)果,order存儲(chǔ)訪問(wèn)串,a存儲(chǔ)當(dāng)前頁(yè)面中的值</p><p> int pos1,flag
16、1,flag2; //pos1位置變量,flag1等為標(biāo)志變量</p><p> char result1[30]; //記錄缺頁(yè)數(shù)組</p><p><b> 四、核心代碼</b></p><p> 三種置換算法中只列出我負(fù)責(zé)部分( opt 算法),具體代碼及注釋如下:</p><p> void opt(
17、) //理想型</p><p><b> {</b></p><p> int i,pos[10],flag[10];</p><p><b> while(1)</b></p><p><b> {</b></p><p><b>
18、 count=0;</b></p><p> flag1=flag2=0;</p><p> for(i=0;i<length;i++)</p><p><b> {</b></p><p> if(!search(order[i]))</p><p><b>
19、; {</b></p><p><b> count++;</b></p><p> result1[i]='*';</p><p> if(a[num_page-1]!=-1) //表示當(dāng)前頁(yè)面已滿(mǎn)要淘汰一個(gè)</p><p><b> {</b></p&
20、gt;<p> memset(pos,-1,sizeof(pos));</p><p> memset(flag,0,sizeof(flag));</p><p><b> int j,k;</b></p><p> for( j=i;j<length;j++)//找出當(dāng)前頁(yè)中的值在將來(lái)訪問(wèn)串中對(duì)應(yīng)的最近位置<
21、/p><p><b> {</b></p><p> for( k=0;k<num_page;k++)</p><p><b> {</b></p><p> if(order[j]==a[k]&&flag[k]==0)</p><p><b&
22、gt; {</b></p><p><b> pos[k]=j;</b></p><p> flag[k]=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }&
23、lt;/b></p><p> cout<<endl;</p><p> int max=-10,max_pos;</p><p> for( k=0;k<num_page;k++)//找出位置最遠(yuǎn)的那個(gè)值</p><p><b> {</b></p><p>
24、if(pos[k]==-1)//未出現(xiàn)則跳出,替換該值</p><p><b> {</b></p><p> max_pos=k;</p><p><b> break;</b></p><p><b> }</b></p><p> els
25、e if(max<pos[k])</p><p><b> {</b></p><p> max=pos[k];</p><p> max_pos=k;</p><p><b> }</b></p><p><b> }</b></
26、p><p> a[max_pos]=order[i];</p><p><b> }</b></p><p> else //還有空頁(yè)</p><p><b> {</b></p><p> for(int j=0;j<num_page;j++)</p>
27、;<p><b> {</b></p><p> if(a[j]==-1)</p><p><b> {</b></p><p> a[j]=order[i];</p><p><b> break;</b></p><p>&l
28、t;b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> else result1[i]=' ';</p><p>
29、; for(int j=0;j<num_page;j++)</p><p><b> {</b></p><p> result[j][i]=a[j];</p><p><b> }</b></p><p><b> }</b></p><p
30、> again(); //再操作</p><p> if(flag1==0&&flag2==0)</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p>
31、<p> 其中的查詢(xún)函數(shù)search()具體代碼如下:</p><p> bool search(int n) //查找當(dāng)前內(nèi)存中是否已存在該頁(yè)</p><p><b> {</b></p><p><b> int i;</b></p><p> for(i=0;i<n
32、um_page;i++)</p><p><b> {</b></p><p> if(a[i]==n)</p><p> return true;</p><p><b> }</b></p><p> return false;</p><p
33、><b> }</b></p><p> 其中的再操作函數(shù)again(),具體代碼如下:</p><p> void again() //用于再輸入</p><p><b> {</b></p><p><b> print();</b></p>
34、<p> int numpage,m;</p><p> printf("************************************** \n");</p><p> printf(" 1.重新輸入新序列.\n");</p><p> printf(" 2.不改變?cè)L問(wèn)
35、序列只改變頁(yè)面數(shù).\n");</p><p> printf(" 0.不操作退出.\n");</p><p> printf("************************************** \n");</p><p> printf(" 選擇所要操作:");&
36、lt;/p><p> scanf("%d",&m);</p><p><b> if(m==1) </b></p><p><b> {</b></p><p> flag1=1; //重新輸入</p><p><b> init
37、();</b></p><p><b> }</b></p><p> else if(m==2)</p><p><b> {</b></p><p><b> flag2=1;</b></p><p> cout<<
38、"輸入新頁(yè)面數(shù):";</p><p> cin>>numpage;</p><p> num_page=numpage;memset(a,-1,sizeof(a));</p><p><b> }</b></p><p> else return ;</p><
39、p><b> 五、運(yùn)行截圖</b></p><p><b> 主菜單:</b></p><p> 根據(jù)不同的分工,限于紙張只列出部分截圖,以下是對(duì) opt 調(diào)度算法的實(shí)驗(yàn)截圖: </p><p> 圖5.1 相同的內(nèi)存容量下不同的訪問(wèn)串序列1</p><p> 圖5.2 相同的
40、內(nèi)存容量下不同的訪問(wèn)串序列2</p><p> 依上圖5.1和5.2來(lái)看, opt 調(diào)度算法在訪問(wèn)串長(zhǎng)度一致,隨機(jī)值不同以致產(chǎn)生不同的訪問(wèn)串序列時(shí),但頁(yè)面數(shù)不相同的情況下,所得到的命中率也不同。</p><p> 圖5.3 不同的內(nèi)存容量下相同的訪問(wèn)串序列</p><p> 在上圖5.3中就是對(duì)同一訪問(wèn)串序列進(jìn)行 opt 調(diào)度,只是改變其
41、頁(yè)面的大小,得到了不同的命中率。</p><p><b> 六、小結(jié)</b></p><p> 本次課程設(shè)計(jì)目的是通過(guò)請(qǐng)求頁(yè)式管理中頁(yè)面置換算法模擬設(shè)計(jì),了解虛擬存儲(chǔ)技術(shù)的特點(diǎn),掌握請(qǐng)求頁(yè)式存儲(chǔ)管理的頁(yè)面置換算法。要求設(shè)計(jì)隨機(jī)頁(yè)面產(chǎn)生程序,并說(shuō)明隨機(jī)的性能和其性能可能對(duì)算法的影響,對(duì)隨機(jī)性要有一定的參數(shù)控制能力;計(jì)算并輸出FIFO及LRU OPT算法在不同內(nèi)存容
42、量下的命中率。</p><p> 由于上學(xué)期做過(guò)頁(yè)面置換的實(shí)驗(yàn),內(nèi)容包括先進(jìn)先出算法(FIFO)、最近最久未使用頁(yè)面置換算法(LRU)和理想淘汰算法(OPT),3種算法思想簡(jiǎn)單明確,選好數(shù)據(jù)結(jié)構(gòu),思路清晰便基本沒(méi)問(wèn)題了。所以相對(duì)來(lái)說(shuō),這次操作系統(tǒng)的課程設(shè)計(jì)容易許多,只是在之前實(shí)驗(yàn)基礎(chǔ)上,要附加設(shè)計(jì)隨機(jī)頁(yè)面產(chǎn)生程序,對(duì)隨機(jī)性要有一定的參數(shù)控制能力。對(duì)于隨機(jī)頁(yè)面產(chǎn)生程序,我們之前沒(méi)做過(guò),在網(wǎng)上查閱資料,使用了庫(kù)函數(shù)
43、srand()和rand(),實(shí)現(xiàn)了簡(jiǎn)單的隨機(jī)頁(yè)面產(chǎn)生程序,功能基本完成。我們知識(shí)所限,沒(méi)有使用漂亮可視化界面編程實(shí)現(xiàn)功能,用簡(jiǎn)單的C語(yǔ)言編程實(shí)現(xiàn)的。不管怎么樣,最終還是實(shí)現(xiàn)的本次課程設(shè)計(jì)要求的。</p><p> 做了這么多次課程設(shè)計(jì)了,大致的過(guò)程都熟悉了,每次的動(dòng)手實(shí)踐,調(diào)動(dòng)了我們主動(dòng)學(xué)習(xí)的積極性, 并引導(dǎo)我們根據(jù)實(shí)際編程要求, 訓(xùn)練自己實(shí)際分析問(wèn)題的能力及編程能力, 并養(yǎng)成良好的編程習(xí)慣。 通過(guò)詳細(xì)的實(shí)例
44、, 循序漸進(jìn)地啟發(fā)我們完成設(shè)計(jì)課程設(shè)計(jì)將要求。</p><p> 從拿到題目到完成整個(gè)編程,從理論到實(shí)踐可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。知識(shí)的獲
45、得是無(wú)止境的,只要你想學(xué),只要你行動(dòng),就一定會(huì)有所收獲的?;厥走@兩個(gè)星期的課程設(shè)計(jì),盡管很是頭痛,很多都不會(huì),但經(jīng)過(guò)努力,我們還是學(xué)了不少知識(shí)的。這期間,老師給了我們?cè)S多幫助,非常感謝!</p><p><b> 七、參考文獻(xiàn)</b></p><p> 【1】張堯?qū)W, 史美林. 計(jì)算機(jī)操作系統(tǒng)教程(第2版)習(xí)題解答與實(shí)驗(yàn)指導(dǎo). 北京: 清華大學(xué)出版社, 2000&
46、lt;/p><p> 【2】譚浩強(qiáng), 張基溫. C語(yǔ)言程序設(shè)計(jì)教程. 高等教育出版社,1991</p><p> 【3】張堯?qū)W, 史美林. 計(jì)算機(jī)操作系統(tǒng)教程(第2版). 北京: 清華大學(xué)出版社, 2000</p><p><b> 附錄</b></p><p> 所有源程序代碼如下:</p><
47、p> #include<iostream></p><p> #include<stdlib.h></p><p> using namespace std;</p><p> int length,num_page,count,seed;</p><p> int result[20][30],ord
48、er[30],a[10];</p><p> int pos1,flag1,flag2;</p><p> char result1[30];</p><p> void init()</p><p><b> {</b></p><p> memset(a,-1,sizeof(a));
49、</p><p><b> int i;</b></p><p> cout<<"輸入訪問(wèn)串的長(zhǎng)度:";</p><p> cin>>length;</p><p> cout<<"輸入種子數(shù)控制產(chǎn)生的隨機(jī)值:";</p>
50、<p> cin>>seed;</p><p> srand(seed);</p><p> cout<<"產(chǎn)生的隨機(jī)訪問(wèn)串:";</p><p> for(i=0;i<length;i++)</p><p><b> {</b></p>
51、<p> //cin>>order[i];</p><p> order[i]=rand()%10;</p><p> cout<<order[i]<<" ";</p><p><b> }</b></p><p> cout<<
52、endl;</p><p> cout<<"輸入頁(yè)面的個(gè)數(shù):";</p><p> cin>>num_page;</p><p><b> }</b></p><p> void print()</p><p><b> {</
53、b></p><p><b> int i,j;</b></p><p> cout<<"(*表示缺頁(yè))"<<endl;</p><p> cout<<endl;</p><p> for( j=0;j<length;j++)</p>
54、<p> printf("%2d ",order[j]);</p><p> cout<<endl;</p><p> for( i=0;i<num_page;i++)</p><p><b> {</b></p><p> for( j=0;j<len
55、gth;j++)</p><p><b> {</b></p><p> if(result[i][j]==-1)</p><p><b> {</b></p><p> printf(" ");</p><p><b> }<
56、;/b></p><p><b> else</b></p><p> printf("%2d ",result[i][j]);</p><p><b> }</b></p><p> cout<<endl;</p><p>&l
57、t;b> }</b></p><p> for( j=0;j<length;j++)</p><p><b> {</b></p><p> printf("%2c ",result1[j]);</p><p><b> }</b></p&
58、gt;<p> cout<<endl;</p><p> cout<<"命中率:"<<length-count<<"/"<<length;</p><p> printf("=%.1lf",(length*1.0-count*1.0)/(length*
59、1.0)*100);</p><p> cout<<"%"<<endl;</p><p><b> }</b></p><p> bool search(int n) //查找當(dāng)期內(nèi)存是否已存在</p><p><b> {</b></p&
60、gt;<p><b> int i;</b></p><p> for(i=0;i<num_page;i++)</p><p><b> {</b></p><p> if(a[i]==n)</p><p> return true;</p><p&
61、gt;<b> }</b></p><p> return false;</p><p><b> }</b></p><p> void again() //用于再輸入</p><p><b> {</b></p><p><b>
62、; print();</b></p><p> int numpage,m;</p><p> printf("************************************** \n");</p><p> printf(" 1.重新輸入新序列.\n");</p><
63、p> printf(" 2.不改變?cè)L問(wèn)序列只改變頁(yè)面數(shù).\n");</p><p> printf(" 0.不操作退出.\n");</p><p> printf("************************************** \n");</p><p> pr
64、intf(" 選擇所要操作:");</p><p> scanf("%d",&m);</p><p><b> if(m==1) </b></p><p><b> {</b></p><p> flag1=1; //重新輸入<
65、/p><p><b> init();</b></p><p><b> }</b></p><p> else if(m==2)</p><p><b> {</b></p><p><b> flag2=1;</b><
66、;/p><p> cout<<"輸入新頁(yè)面數(shù):";</p><p> cin>>numpage;</p><p> num_page=numpage;memset(a,-1,sizeof(a));</p><p><b> }</b></p><p>
67、; else return ;</p><p><b> }</b></p><p> void fifo() //先進(jìn)先出</p><p><b> {</b></p><p> int i,thisn=0;</p><p><b> while(1)
68、</b></p><p><b> {</b></p><p><b> count=0;</b></p><p> flag1=flag2=0;</p><p> for(i=pos1;i<length;i++)</p><p><b>
69、 {</b></p><p> if(!search(order[i]))</p><p><b> {</b></p><p><b> count++;</b></p><p> result1[i]='*';</p><p> i
70、f(a[num_page-1]!=-1) //表示當(dāng)前頁(yè)面已滿(mǎn)要淘汰一個(gè)</p><p><b> {</b></p><p> a[thisn]= order[i];</p><p><b> thisn++;</b></p><p> if(thisn>=num_page)<
71、/p><p><b> thisn=0;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> for(int j=0;j<nu
72、m_page;j++)</p><p><b> {</b></p><p> if(a[j]==-1)</p><p><b> {</b></p><p> a[j]=order[i];</p><p><b> break;</b><
73、;/p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> else result1[i]=' ';
74、</p><p> for(int j=0;j<num_page;j++)</p><p><b> {</b></p><p> result[j][i]=a[j];</p><p><b> }</b></p><p><b> }</b&
75、gt;</p><p> again(); //再操作</p><p> if(flag1==0&&flag2==0)</p><p><b> break;</b></p><p><b> }</b></p><p><b> }&l
76、t;/b></p><p> void lru() //最久最近沒(méi)使用</p><p><b> {</b></p><p> int i,pos[10];</p><p><b> while(1)</b></p><p><b> {</
77、b></p><p><b> count=0;</b></p><p> flag1=flag2=0;</p><p> memset(pos,-1,sizeof(pos));</p><p> for(i=pos1;i<length;i++)</p><p><b&g
78、t; {</b></p><p> if(!search(order[i]))</p><p><b> {</b></p><p><b> count++;</b></p><p> result1[i]='*';</p><p>
79、 if(a[num_page-1]!=-1) //表示當(dāng)前頁(yè)面已滿(mǎn)要淘汰一個(gè)</p><p><b> {</b></p><p><b> int j,k;</b></p><p> for( j=0;j<i;j++) //查找當(dāng)前頁(yè)中的值對(duì)應(yīng)的最近位置</p><p><b&
80、gt; {</b></p><p> for( k=0;k<num_page;k++)</p><p><b> {</b></p><p> if(order[j]==a[k])</p><p><b> {</b></p><p><b&
81、gt; pos[k]=j;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> int min=pos[0],min_pos=0;</p><p&g
82、t; for( k=1;k<num_page;k++)//找出位置最遠(yuǎn)的那個(gè)</p><p><b> {</b></p><p> if(min>pos[k])</p><p><b> {</b></p><p> min=pos[k];</p><p&
83、gt; min_pos=k;</p><p><b> }</b></p><p><b> }</b></p><p> a[min_pos]=order[i];</p><p><b> }</b></p><p> else //還有空
84、頁(yè)</p><p><b> {</b></p><p> for(int j=0;j<num_page;j++)</p><p><b> {</b></p><p> if(a[j]==-1)</p><p><b> {</b>&l
85、t;/p><p> a[j]=order[i];</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p&g
86、t;<p><b> }</b></p><p> else result1[i]=' ';</p><p> for(int j=0;j<num_page;j++)</p><p><b> {</b></p><p> result[j][i]=a[
87、j];</p><p><b> }</b></p><p><b> }</b></p><p> again(); //再操作</p><p> if(flag1==0&&flag2==0)</p><p><b> break;&l
88、t;/b></p><p><b> }</b></p><p><b> }</b></p><p> void opt() //理想型</p><p><b> {</b></p><p> int i,pos[10],flag[1
89、0];</p><p><b> while(1)</b></p><p><b> {</b></p><p><b> count=0;</b></p><p> flag1=flag2=0;</p><p> for(i=0;i<l
90、ength;i++)</p><p><b> {</b></p><p> if(!search(order[i]))</p><p><b> {</b></p><p><b> count++;</b></p><p> result1
91、[i]='*';</p><p> if(a[num_page-1]!=-1) //表示當(dāng)前頁(yè)面已滿(mǎn)要淘汰一個(gè)</p><p><b> {</b></p><p> memset(pos,-1,sizeof(pos));</p><p> memset(flag,0,sizeof(flag));
92、</p><p><b> int j,k;</b></p><p> for( j=i;j<length;j++)//找出當(dāng)前頁(yè)中的值在將來(lái)訪問(wèn)串中對(duì)應(yīng)的最近位置</p><p><b> {</b></p><p> for( k=0;k<num_page;k++)</
93、p><p><b> {</b></p><p> if(order[j]==a[k]&&flag[k]==0)</p><p><b> {</b></p><p><b> pos[k]=j;</b></p><p> flag
94、[k]=1;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> cout<<endl;</p><p> int max=-10,max_pos;&l
95、t;/p><p> for( k=0;k<num_page;k++)//找出位置最遠(yuǎn)的那個(gè)值</p><p><b> {</b></p><p> if(pos[k]==-1)//未出現(xiàn)則跳出,替換該值</p><p><b> {</b></p><p> m
96、ax_pos=k;</p><p><b> break;</b></p><p><b> }</b></p><p> else if(max<pos[k])</p><p><b> {</b></p><p> max=pos[k
97、];</p><p> max_pos=k;</p><p><b> }</b></p><p><b> }</b></p><p> a[max_pos]=order[i];</p><p><b> }</b></p>&
98、lt;p> else //還有空頁(yè)</p><p><b> {</b></p><p> for(int j=0;j<num_page;j++)</p><p><b> {</b></p><p> if(a[j]==-1)</p><p><
99、b> {</b></p><p> a[j]=order[i];</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b>
100、 }</b></p><p><b> }</b></p><p> else result1[i]=' ';</p><p> for(int j=0;j<num_page;j++)</p><p><b> {</b></p><p&
101、gt; result[j][i]=a[j];</p><p><b> }</b></p><p><b> }</b></p><p> again(); //再操作</p><p> if(flag1==0&&flag2==0)</p><p>
102、;<b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> void mune()</p><p><b> {</b></p><p><b>
103、; int m;</b></p><p> printf("\n**************************************\n\n");</p><p> printf(" 動(dòng)態(tài)分配分區(qū)方法演示\n");</p><p> printf("\n***********
104、*************************** \n\n");</p><p> printf(" 1.先進(jìn)先出算法.\n\n");</p><p> printf(" 2.最久最近未使用頁(yè)面置換算法.\n\n");</p><p> printf("
105、 3.理想型淘汰算法.\n\n");</p><p> printf(" 0.退出程序.\n");</p><p> printf("\n************************************** \n");</p><p> printf("\n 選擇所要操
106、作:");</p><p> scanf("%d",&m);</p><p><b> switch(m)</b></p><p><b> {</b></p><p><b> case 1:</b></p><
107、;p><b> init();</b></p><p><b> fifo( );</b></p><p><b> mune();</b></p><p><b> break;</b></p><p><b> case 2:
108、</b></p><p><b> init();</b></p><p><b> lru( );</b></p><p><b> mune();</b></p><p><b> break;</b></p><
109、;p><b> case 3:</b></p><p><b> init();</b></p><p><b> opt( );</b></p><p><b> mune();</b></p><p><b> break;&
110、lt;/b></p><p><b> case 0:</b></p><p><b> break;</b></p><p><b> default:</b></p><p> printf("選擇錯(cuò)誤,重新選擇.");</p>
111、<p><b> mune();</b></p><p><b> }</b></p><p><b> }</b></p><p> void main() //主函數(shù)</p><p><b> {</b></p&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 模擬頁(yè)式存儲(chǔ)管理 操作系統(tǒng)課程設(shè)計(jì)
- 模擬頁(yè)式存儲(chǔ)管理-操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--模擬請(qǐng)求頁(yè)式存儲(chǔ)管理
- 操作系統(tǒng)課程設(shè)計(jì)--請(qǐng)求頁(yè)式存儲(chǔ)管理
- 操作系統(tǒng)課程設(shè)計(jì)--請(qǐng)求頁(yè)式存儲(chǔ)管理
- 操作系統(tǒng)課程設(shè)計(jì)--請(qǐng)求頁(yè)式存儲(chǔ)管理
- 操作系統(tǒng)課程設(shè)計(jì)--模擬請(qǐng)求頁(yè)式管理
- 操作系統(tǒng)課程設(shè)計(jì)--- 請(qǐng)求調(diào)頁(yè)存儲(chǔ)管理
- 操作系統(tǒng)課程設(shè)計(jì)存儲(chǔ)管理
- 操作系統(tǒng)課程設(shè)計(jì)--頁(yè)式存儲(chǔ)管理中頁(yè)面置換(淘汰)的模擬程序
- 操作系統(tǒng)課程設(shè)計(jì)——操作系統(tǒng)課程設(shè)計(jì)模擬操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)--模擬實(shí)現(xiàn)可變分區(qū)存儲(chǔ)管理
- 操作系統(tǒng)課程設(shè)計(jì)---請(qǐng)求頁(yè)式存儲(chǔ)管理的頁(yè)面置換算法
- 模擬操作系統(tǒng)課程設(shè)計(jì)
- 虛擬存儲(chǔ)器管理系統(tǒng)操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---文件加密存儲(chǔ)
- 操作系統(tǒng)課程設(shè)計(jì)--模擬操作系統(tǒng)的實(shí)現(xiàn)
- 內(nèi)存管理(操作系統(tǒng))操作系統(tǒng)課程設(shè)計(jì)
- 《操作系統(tǒng)》課程設(shè)計(jì)-- 模擬文件管理系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)--請(qǐng)求調(diào)頁(yè)
評(píng)論
0/150
提交評(píng)論