版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 《網(wǎng)絡(luò)操作系統(tǒng)》</b></p><p> 課 程 設(shè) 計(jì) 報(bào) 告 書(shū)</p><p> 題 目:請(qǐng)求調(diào)頁(yè)存儲(chǔ)管理方式的模擬 </p><p> 學(xué) 號(hào): </p><p> 學(xué)生姓名: </p>
2、<p> 指導(dǎo)教師: </p><p> 2010 年 12 月 10 日</p><p><b> 目錄</b></p><p> 課程設(shè)計(jì)一:請(qǐng)求調(diào)頁(yè)存儲(chǔ)管理方式的模擬</p><p><b> 一、實(shí)驗(yàn)?zāi)康?lt;/b></p>&
3、lt;p><b> 二、實(shí)驗(yàn)內(nèi)容</b></p><p><b> 三、設(shè)計(jì)思路</b></p><p> 四、文件系統(tǒng)結(jié)構(gòu)的說(shuō)明</p><p><b> 五、數(shù)據(jù)結(jié)構(gòu)的說(shuō)明</b></p><p><b> 六、程序流程圖</b><
4、;/p><p><b> 七、源代碼</b></p><p> 八、運(yùn)行結(jié)果以及分析</p><p><b> 九、使用說(shuō)明</b></p><p><b> 十、總結(jié)</b></p><p> 課程設(shè)計(jì)二:通過(guò)DNS協(xié)議,可實(shí)現(xiàn)IP地址和主機(jī)名之
5、間的轉(zhuǎn)換</p><p><b> 一、實(shí)驗(yàn)?zāi)康?lt;/b></p><p><b> 二、實(shí)驗(yàn)內(nèi)容</b></p><p><b> 三、設(shè)計(jì)思路</b></p><p> 四、文件系統(tǒng)結(jié)構(gòu)的說(shuō)明</p><p><b> 五、源代碼&
6、lt;/b></p><p> 六、運(yùn)行結(jié)果以及分析</p><p><b> 七、使用說(shuō)明</b></p><p><b> 八、總結(jié)</b></p><p><b> 課程設(shè)計(jì)一</b></p><p><b> 一:實(shí)驗(yàn)?zāi)?/p>
7、的</b></p><p> 1.通過(guò)模擬實(shí)現(xiàn)請(qǐng)求頁(yè)式存儲(chǔ)管理的幾種基本頁(yè)面置換算法,了解虛擬儲(chǔ)技術(shù)的特點(diǎn)。</p><p> 2.通過(guò)對(duì)頁(yè)面、頁(yè)表、地址轉(zhuǎn)換和頁(yè)面置換過(guò)程的模擬,加深對(duì)請(qǐng)求調(diào)頁(yè)系統(tǒng)的原理和實(shí)現(xiàn)過(guò)程的理解。</p><p> 3.掌握虛擬存儲(chǔ)請(qǐng)求頁(yè)式存儲(chǔ)管理中幾種基本頁(yè)面置換算法的基本思想和實(shí)現(xiàn)過(guò)程,并比較它們的效率。</p&
8、gt;<p><b> 二:實(shí)驗(yàn)內(nèi)容</b></p><p> 1.假設(shè)每個(gè)頁(yè)面中可存放10條指令,分配給一個(gè)作業(yè)的內(nèi)存塊數(shù)為4</p><p> 2.用C語(yǔ)言模擬一作業(yè)的執(zhí)行過(guò)程。該作業(yè)共有320條指令,即它的地址空間為32頁(yè),目前它的所有頁(yè)都還未調(diào)入內(nèi)存。在模擬過(guò)程中,如果訪問(wèn)的指令已在內(nèi)存,則顯示其物理地址,并轉(zhuǎn)下一條指令。如果所訪問(wèn)的指令還
9、未裝入內(nèi)存,則發(fā)生缺頁(yè),此時(shí)需記錄缺頁(yè)的次數(shù),并將相應(yīng)頁(yè)調(diào)入內(nèi)存。如果4個(gè)內(nèi)存塊中均已裝入該作業(yè),則需進(jìn)行頁(yè)面轉(zhuǎn)換。最后顯示其物理地址,并轉(zhuǎn)下一條指令。在所有320條指令執(zhí)行完畢后,請(qǐng)計(jì)算并顯示作業(yè)運(yùn)行過(guò)程中發(fā)生的缺頁(yè)率。</p><p> 3.置換算法:請(qǐng)分別考慮OPT、FIFO和LRU算法。</p><p> 4.作業(yè)中指令的訪問(wèn)次序按下述原則生成:</p><
10、p> 50%的指令是順序執(zhí)行的</p><p> 25%的指令是均勻分布在前地址部分</p><p> 25%的指令是均勻分布在后地址部分</p><p><b> 具體的實(shí)施辦法:</b></p><p> ?、僭赱0,319]之間隨機(jī)選取一條起始指令,其序號(hào)為m</p><p>
11、 ?、陧樞驁?zhí)行下一條指令,即序號(hào)為m+1的指令</p><p> ?、弁ㄟ^(guò)隨機(jī)數(shù),跳轉(zhuǎn)到前地址部分[0,m-1]中的某條指令處,其序號(hào)為m1;</p><p> ④順序執(zhí)行下一條指令,即序號(hào)為m1+1的指令</p><p> ?、萃ㄟ^(guò)隨機(jī)數(shù),跳轉(zhuǎn)到后地址部分[m1+2,319]中的某條指令處,其序號(hào)為m2;</p><p> ?、揄樞驁?zhí)行下
12、一條指令,即序號(hào)為m2+1的指令</p><p> ?、咧貜?fù)跳轉(zhuǎn)到前地址部分、順序執(zhí)行、跳轉(zhuǎn)到后地址部分、順序執(zhí)行的過(guò)程,直至執(zhí)行320條指令。</p><p><b> 三:設(shè)計(jì)思路</b></p><p> 因?yàn)樵诔绦蜻\(yùn)行的過(guò)程中,當(dāng)我們?cè)L問(wèn)一個(gè)頁(yè)面時(shí),倘若此頁(yè)面不在內(nèi)存當(dāng)中,我們就需要將其調(diào)入內(nèi)存。此時(shí)就產(chǎn)生了兩個(gè)問(wèn)題:內(nèi)存是否有空閑
13、和倘若內(nèi)存有空閑我們要將那個(gè)頁(yè)面調(diào)出的問(wèn)題。這樣的話就需要根據(jù)一定的算法來(lái)判斷決定。我們大家都知道,算法的好壞反映在程序執(zhí)行的效率上面,所以我們要根據(jù)不同的情況調(diào)用不同的算法。這里我們有三種置換算法:1最佳置換算法(Optimal) 2、先進(jìn)先出法(First In First Out) 3、最近最久未使用(Least Recently Used)。所謂最佳置換算法,就是其所選擇的被淘汰頁(yè)是將來(lái)不再被使用,或者是在最遠(yuǎn)的將來(lái)才被訪問(wèn)的頁(yè)
14、面。 采用這種頁(yè)面置換算法, 保證有最少的缺頁(yè)率。但由于目前還無(wú)法預(yù)知一個(gè)進(jìn)程在內(nèi)存的若干個(gè)頁(yè)面中,哪個(gè)在最長(zhǎng)的時(shí)間內(nèi)不會(huì)被訪問(wèn),因而,現(xiàn)實(shí)中該算法是無(wú)法實(shí)現(xiàn)的。因此在該算法的模擬過(guò)程中,頁(yè)面訪問(wèn)次序必須是給定的,具體實(shí)現(xiàn)為:對(duì)每一個(gè)物理塊設(shè)置一個(gè)整數(shù)型的訪問(wèn)標(biāo)志位,當(dāng)需要置換物理塊中的某一頁(yè)時(shí),將每一個(gè)物理塊中的頁(yè)面號(hào)與當(dāng)前需調(diào)入頁(yè)以后的每一頁(yè)面號(hào)進(jìn)行比較,若物理塊中的頁(yè)面號(hào)與所有的頁(yè)面號(hào)都不同,則該頁(yè)即為將來(lái)不再使用的頁(yè),</
15、p><p> 四:文件系統(tǒng)結(jié)構(gòu)的說(shuō)明</p><p> #include <iostream.h></p><p> #include<stdlib.h></p><p> #include<conio.h></p><p> #include<stdio.h>&l
16、t;/p><p> #define Bsize 4</p><p> typedef struct BLOCK//聲明一種新類型——物理塊類型</p><p><b> { </b></p><p> int pageNum;//頁(yè)號(hào)</p><p> int accessed;//訪問(wèn)字
17、段,其值表示多久未被訪問(wèn)</p><p> }BLOCK; </p><p> int pc;//程序計(jì)數(shù)器,用來(lái)記錄指令的序號(hào)</p><p> int m;//缺頁(yè)計(jì)數(shù)器,用來(lái)記錄缺頁(yè)的次數(shù) </p><p> static int random[320];//用來(lái)存儲(chǔ)320條隨機(jī)數(shù)</p><p&
18、gt; BLOCK block[Bsize]; //定義一大小為4的物理塊數(shù)組</p><p> void init( ); //程序初始化函數(shù)</p><p> int findExist(int curpage);//查找物理塊中是否有該頁(yè)面</p><p> int findSpace( );//查找是否有空閑物理塊</p>&l
19、t;p> int findReplace( );//查找應(yīng)予置換的頁(yè)面</p><p> void display ( );//顯示</p><p> void suijishu( );//產(chǎn)生320條隨機(jī)數(shù),顯示并存儲(chǔ)到random[320]</p><p> void pagestring( );//顯示調(diào)用的頁(yè)面隊(duì)列</p><
20、;p> void OPT( );//OPT算法——最佳置換算法</p><p> void LRU( );// LRU算法——最近最久未使用算法</p><p> void FIFO( );//FIFO算法</p><p><b> 五:數(shù)據(jù)結(jié)構(gòu)的說(shuō)明</b></p><p> 在本程序中,對(duì)于物理塊使用
21、了結(jié)構(gòu)體。最后主函數(shù)通過(guò)依次調(diào)用三種算法函數(shù)來(lái)實(shí)現(xiàn)功能。</p><p> 頭文件:#include <iostream.h></p><p> #include<stdlib.h></p><p> #include<conio.h></p><p> #include<stdio.h>
22、;</p><p> #define Bsize 4</p><p><b> 物理塊:</b></p><p> typedef struct BLOCK//聲明一種新類型——物理塊類型</p><p><b> { </b></p><p> int page
23、Num;//頁(yè)號(hào)</p><p> int accessed;//訪問(wèn)字段,其值表示多久未被訪問(wèn)</p><p> }BLOCK; </p><p> 六:程序流程圖——整體</p><p> 六:程序流程圖——LRU</p><p><b> 七:源代碼</b></p
24、><p> #include <iostream.h></p><p> #include<stdlib.h></p><p> #include<conio.h></p><p> #include<stdio.h></p><p> #define Bsize
25、4</p><p> typedef struct BLOCK//聲明一種新類型——物理塊類型</p><p><b> { </b></p><p> int pageNum;//頁(yè)號(hào)</p><p> int accessed;//訪問(wèn)字段,其值表示多久未被訪問(wèn)</p><p>
26、}BLOCK; </p><p> int pc;//程序計(jì)數(shù)器,用來(lái)記錄指令的序號(hào)</p><p> int m;//缺頁(yè)計(jì)數(shù)器,用來(lái)記錄缺頁(yè)的次數(shù) </p><p> static int random[320];//用來(lái)存儲(chǔ)320條隨機(jī)數(shù)</p><p> BLOCK block[Bsize]; //定義一大小為4的
27、物理塊數(shù)組</p><p> void init( ); //程序初始化函數(shù)</p><p> int findExist(int curpage);//查找物理塊中是否有該頁(yè)面</p><p> int findSpace( );//查找是否有空閑物理塊</p><p> int findReplace( );//查找應(yīng)予置
28、換的頁(yè)面</p><p> void display ( );//顯示</p><p> void suijishu( );//產(chǎn)生320條隨機(jī)數(shù),顯示并存儲(chǔ)到random[320]</p><p> void pagestring( );//顯示調(diào)用的頁(yè)面隊(duì)列</p><p> void OPT( );//OPT算法——最佳置換算法
29、</p><p> void LRU( );// LRU算法——最近最久未使用算法</p><p> void FIFO( );//FIFO算法</p><p> void init( ) //程序初始化函數(shù)</p><p><b> { </b></p><p> for(int i
30、=0;i<Bsize;i++) </p><p><b> {</b></p><p> block[i].pageNum=-1;</p><p> block[i].accessed=0;</p><p><b> pc=m=0;</b></p><p>&l
31、t;b> }</b></p><p><b> }</b></p><p> int findExist(int curpage)//查找物理塊中是否有該頁(yè)面</p><p><b> {</b></p><p> for(int i=0; i<Bsize; i++
32、)</p><p><b> {</b></p><p> if(block[i].pageNum == curpage )</p><p> return i;//檢測(cè)到內(nèi)存中有該頁(yè)面,返回block中的位置</p><p><b> }</b></p><p>
33、 return -1;</p><p><b> }</b></p><p> int findSpace( )//查找是否有空閑物理塊</p><p><b> { </b></p><p> for(int i=0; i<Bsize; i++)</p><p
34、><b> {</b></p><p> if(block[i].pageNum == -1)</p><p> return i;//找到空閑的block,返回block中的位置</p><p><b> } </b></p><p> return -1;</p>
35、<p><b> }</b></p><p> int findReplace( )//查找應(yīng)予置換的頁(yè)面</p><p><b> {</b></p><p> int pos = 0;</p><p> for(int i=0; i<Bsize; i++)</p&
36、gt;<p><b> {</b></p><p> if(block[i].accessed >block[pos].accessed)</p><p> pos = i;//找到應(yīng)予置換頁(yè)面,返回BLOCK中位置</p><p><b> }</b></p><p>
37、 return pos;</p><p><b> }</b></p><p> void display( )</p><p><b> {</b></p><p> for(int i=0; i<Bsize; i++)</p><p><b>
38、 {</b></p><p> if(block[i].pageNum != -1)</p><p> { printf(" %02d",block[i].pageNum);}</p><p><b> }</b></p><p> cout<<endl;&
39、lt;/p><p><b> }</b></p><p> void suijishu( )</p><p> { int flag=0;</p><p> printf("請(qǐng)輸入一個(gè)0~320之間的隨機(jī)數(shù):\n");</p><p> scanf("%d&
40、quot;,&pc);</p><p> printf("-------按照要求產(chǎn)生的320個(gè)隨機(jī)數(shù):-------\n");</p><p> for(int i=0;i<320;i++)</p><p><b> { </b></p><p> random[i]=pc
41、;</p><p> if(flag%2==0) pc=++pc%320;//順序執(zhí)行下一條指令,即序號(hào)為m+1的指令</p><p> if(flag==1) pc=rand( )% (pc-1);//通過(guò)隨機(jī)數(shù),跳轉(zhuǎn)到前地址部分[0,m-1]中的某條指令處,其序號(hào)為m1</p><p> if(flag==3) pc=pc+1+(rand( )%(320-
42、(pc+1)));//通過(guò)隨機(jī)數(shù),跳轉(zhuǎn)到后地址部分[m1+2,319]中的某條指令處,其序號(hào)為m2</p><p> flag=++flag%4;//如果4個(gè)內(nèi)存塊中均已裝入該作業(yè),則需進(jìn)行頁(yè)面轉(zhuǎn)換</p><p> printf(" %03d",random[i]);</p><p> if((i+1)%10==0) cout<&l
43、t;endl;//每個(gè)頁(yè)面中可存放10條指令</p><p><b> } </b></p><p><b> }</b></p><p> void pagestring( )</p><p><b> { </b></p><p> f
44、or(int i=0;i<320;i++)</p><p><b> {</b></p><p> printf(" %02d",random[i]/10);//顯示該頁(yè)面</p><p> if((i+1)%10==0) printf("\n");//每個(gè)頁(yè)面中可存放10條指令</p&
45、gt;<p><b> }</b></p><p><b> }</b></p><p> void OPT( )/*OPT算法——最佳置換算法.最佳置換算法是Blady在理論上提出的一種算法。其所選擇的被淘汰頁(yè)是將來(lái)不再被使用,或者是在最遠(yuǎn)的將</p><p> 來(lái)才被訪問(wèn)的頁(yè)面.采用這種頁(yè)面置換算
46、法, 保證有最少的缺頁(yè)率。但由于目前還無(wú)法預(yù)知一個(gè)進(jìn)程在內(nèi)存的若干個(gè)頁(yè)面中,哪個(gè)在最長(zhǎng)的</p><p> 時(shí)間內(nèi)不會(huì)被訪問(wèn),因而,現(xiàn)實(shí)中該算法是無(wú)法實(shí)現(xiàn)的。因此在該算法的模擬過(guò)程中,頁(yè)面訪問(wèn)次序必須是給定的,具體實(shí)現(xiàn)為:對(duì)每一</p><p> 物理塊設(shè)置一個(gè)整數(shù)型的訪問(wèn)標(biāo)志位,當(dāng)需要置換物理塊中的某一頁(yè)時(shí),將每一個(gè)物理塊中的頁(yè)面號(hào)與當(dāng)前需調(diào)入頁(yè)以后的每一頁(yè)面號(hào)進(jìn)行</p>
47、;<p> 比較,若物理塊中的頁(yè)面號(hào)與所有的頁(yè)面號(hào)都不同,則該頁(yè)即為將來(lái)不再使用的頁(yè),將訪問(wèn)標(biāo)記設(shè)置為1000,表示將來(lái)不會(huì)用,設(shè)置為一個(gè)</p><p> 很大數(shù);若找到頁(yè)號(hào)相同的則將其訪問(wèn)次序記入訪問(wèn)標(biāo)記,比較訪問(wèn)標(biāo)記,最大的即為最久不會(huì)被訪問(wèn)的,將其換出。</p><p><b> */</b></p><p><
48、;b> {</b></p><p> int exist,space,position ;</p><p> int curpage;</p><p> for(int i=0;i<320;i++)</p><p><b> { </b></p><p>
49、 if(i%100==0) getch( );</p><p> pc=random[i]; </p><p> curpage=pc/10;</p><p> exist = findExist(curpage);</p><p> if(exist==-1)</p><p><b> {<
50、/b></p><p> space = findSpace ( );</p><p> if(space != -1)</p><p><b> {</b></p><p> block[space].pageNum = curpage; </p><p> display(
51、);</p><p><b> m=m+1;</b></p><p><b> }</b></p><p><b> else {</b></p><p> for(int k=0;k<Bsize;k++)</p><p><b>
52、; {</b></p><p> for(int j=i;j<320;j++)</p><p><b> {</b></p><p> if(block[k].pageNum!= random[j]/10)//物理塊中的頁(yè)面號(hào)與所有的頁(yè)面號(hào)都不同 { </p><p> block[k].
53、accessed = 1000; </p><p> }//將來(lái)不會(huì)用,設(shè)置為一個(gè)很大數(shù)</p><p> else//找到頁(yè)號(hào)相同的則將其訪問(wèn)次序記入訪問(wèn)標(biāo)記</p><p><b> {</b></p><p> block[k].accessed = j;</p><p> bre
54、ak; </p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> position = findReplace( ); </p><p> block[po
55、sition].pageNum = curpage; </p><p> display( );</p><p> m++; </p><p><b> }</b></p><p><b> }</b></p><p><b> }<
56、/b></p><p> printf("缺頁(yè)次數(shù):%d\n",m);</p><p> cout<<"缺頁(yè)率:"<<(m/320.0)*100<<"%"<<endl;</p><p><b> }</b></p>
57、<p> void LRU( )/*LRU算法——最近最久未使用算法.該算法以最近的過(guò)去作為不久將來(lái)的近似, 將過(guò)去最長(zhǎng)一段時(shí)間里不曾被使用的頁(yè)面置換掉。</p><p> 在該算法的模擬過(guò)程中,每當(dāng)物理塊中的頁(yè)面被訪問(wèn)時(shí),便將其訪問(wèn)標(biāo)記置為-1</p><p> 以后每執(zhí)行一條指令,便將物理塊中各頁(yè)面的訪問(wèn)標(biāo)記加一,需置換時(shí)訪問(wèn)標(biāo)記最大的便是將要被置換的。</p
58、><p><b> */</b></p><p><b> {</b></p><p> int exist,space,position ;</p><p> int curpage;</p><p> for(int i=0;i<320;i++)</p&
59、gt;<p><b> { </b></p><p> if(i%100==0) getch( );</p><p> pc=random[i]; </p><p> curpage=pc/10;//每頁(yè)十個(gè)指令</p><p> exist = findExist(curpage);<
60、/p><p> if(exist==-1)</p><p><b> {</b></p><p> space = findSpace( );</p><p> if(space != -1)</p><p><b> {</b></p><p>
61、; block[space].pageNum = curpage; </p><p> display( );</p><p><b> m=m+1;</b></p><p><b> }</b></p><p><b> else</b></p>&
62、lt;p><b> {</b></p><p> position = findReplace( ); </p><p> block[position].pageNum = curpage; </p><p> display( );</p><p> m++; </p>
63、<p><b> }</b></p><p><b> }</b></p><p> else block[exist].accessed = -1;//恢復(fù)存在的并剛訪問(wèn)過(guò)的BLOCK中頁(yè)面accessed為-1</p><p> for(int j=0; j<4; j++)</p>
64、;<p> {block[j].accessed++;}//每執(zhí)行一條指令,便將物理塊中各頁(yè)面的訪問(wèn)標(biāo)記加一</p><p><b> }</b></p><p> printf("缺頁(yè)次數(shù):%d\n",m);</p><p> cout<<"缺頁(yè)率:"<<(
65、m/320.0)*100<<"%"<<endl;</p><p><b> }</b></p><p> void FIFO( )/*該算法總是淘汰最先進(jìn)入內(nèi)存的頁(yè)面,既選擇在內(nèi)存中駐留時(shí)間最久的頁(yè)面予以淘汰。</p><p> 在該算法的模擬過(guò)程中,每當(dāng)某一頁(yè)面進(jìn)入內(nèi)存時(shí)(包括頁(yè)面置換時(shí)頁(yè)面的
66、置入),物理塊中各頁(yè)面訪問(wèn)標(biāo)記自動(dòng)加一,置換后,將置換頁(yè)面</p><p> 所在的物理塊中訪問(wèn)標(biāo)記減一;這樣能防止當(dāng)物理塊訪問(wèn)標(biāo)記出現(xiàn)兩個(gè)以上相同的值的錯(cuò)誤執(zhí)行,更好地模擬了先進(jìn)先出法;</p><p><b> */</b></p><p><b> {</b></p><p> int
67、 exist,space,position ;</p><p> int curpage;</p><p> for(int i=0;i<320;i++)</p><p><b> { </b></p><p> if(i%100==0) getch( );</p><p>
68、pc=random[i]; </p><p> curpage=pc/10;</p><p> exist = findExist(curpage);</p><p> if(exist==-1)</p><p><b> {</b></p><p> space = findSpace
69、( );</p><p> if(space != -1)</p><p><b> {</b></p><p> block[space].pageNum = curpage; </p><p> display( );</p><p><b> m=m+1;</b&
70、gt;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> position = findReplace( ); </p><p> block[posi
71、tion].pageNum = curpage; </p><p> display( );</p><p><b> m++;</b></p><p> block[position].accessed--;</p><p><b> }</b></p><p>
72、;<b> }</b></p><p> for(int j=0; j<Bsize; j++)</p><p> block[j].accessed++;//每當(dāng)某一頁(yè)面進(jìn)入內(nèi)存時(shí)(包括頁(yè)面置換時(shí)頁(yè)面的置入),物理塊中各頁(yè)面訪問(wèn)標(biāo)記自動(dòng)加一</p><p><b> }</b></p><
73、p> printf("缺頁(yè)次數(shù):%d\n",m);</p><p> cout<<"缺頁(yè)率:"<<(m/320.0)*100<<"%"<<endl;</p><p><b> }</b></p><p> void main
74、( )</p><p><b> { </b></p><p> int select;</p><p> cout<<"請(qǐng)輸入第一條指令號(hào)(0~320):";</p><p> suijishu( );</p><p> cout<<&qu
75、ot;-------對(duì)應(yīng)的調(diào)用頁(yè)面隊(duì)列-------"<<endl;</p><p> pagestring( );</p><p><b> do</b></p><p><b> { </b></p><p> cout<<"---------
76、-------------------------------"<<endl;</p><p> cout<<"****************************************"<<endl;</p><p> cout<<"------1:OPT 2:LRU 3:FIFO
77、4:退出------"<<endl;</p><p> cout<<"****************************************"<<endl;</p><p> cout<<"----------------------------------------"<
78、<endl;</p><p> cout<<" 請(qǐng)選擇一種頁(yè)面置換算法:\n"; </p><p> cin>>select;</p><p> cout<<"----------------------------------------"<<endl
79、;</p><p><b> init( );</b></p><p> switch(select)</p><p><b> {</b></p><p> case 1:printf("您選擇的是最佳置換算法OPT:\n");</p><p>
80、 printf("----------------------------------------\n");</p><p> OPT( );//輸出結(jié)果</p><p><b> break;</b></p><p> case 2:printf("您選擇的是最近最久未使用置換算法LRU:\n"
81、);</p><p> printf("----------------------------------------\n");</p><p> LRU( );//輸出結(jié)果</p><p><b> break;</b></p><p> case 3:printf("您選擇的是
82、先進(jìn)先出置換算法FIFO:\n");</p><p> printf("----------------------------------------\n");</p><p> FIFO( );//輸出結(jié)果</p><p><b> break; </b></p><p> de
83、fault: ;</p><p><b> } </b></p><p> }while(select!=4);//每頁(yè)分配4個(gè)內(nèi)存塊</p><p><b> }</b></p><p><b> }</b></p><p><b>
84、 八:運(yùn)行結(jié)果及分析</b></p><p><b> 九:使用說(shuō)明</b></p><p> 1、首先進(jìn)入程序,在0~320之間隨意挑選一個(gè)數(shù)輸入,按回車鍵。</p><p> 2、程序產(chǎn)生320個(gè)隨機(jī)數(shù)。</p><p> 3、開(kāi)始選擇一種置換算法進(jìn)行頁(yè)面的置換。輸入置換算法前面的數(shù)字,回車。&
85、lt;/p><p> 4、回車,得到置換算法的結(jié)果。</p><p> 5、換做其他的算法,依然回車,得到置換算法的結(jié)果。</p><p> 6、完成后選擇退出。。</p><p><b> 十:總結(jié)</b></p><p> 1、通過(guò)這次操作系統(tǒng)課程設(shè)計(jì)的編寫(xiě),我學(xué)到了很多。剛開(kāi)始見(jiàn)到設(shè)計(jì)
86、要求時(shí),我有點(diǎn)沒(méi)有思路。通過(guò)從網(wǎng)上參考了一些資料以后,我開(kāi)始慢慢的了解了程序設(shè)計(jì)中的一些問(wèn)題。首先:我對(duì)OPT、FIFO和LRU算法三種算法有了一定的了解。其次,在分析題目要求的時(shí)候,對(duì)于如何將作業(yè)中指令的訪問(wèn)次序按一定原則生成的問(wèn)題我沒(méi)有一點(diǎn)思路。最后,在仔細(xì)的看了一些類似的題目代碼以后,我終于有了一定的理解。原來(lái)在實(shí)現(xiàn)的時(shí)候,通過(guò)先順序執(zhí)行一條隨機(jī)指令,譬如該指令為M0,然后開(kāi)始順序執(zhí)行下一條指令M0+1,緊接著通過(guò)跳轉(zhuǎn)函數(shù)跳轉(zhuǎn)到地
87、址部分[0,M-1]中的某條指令處,其序號(hào)記為M1,然后再次順序執(zhí)行下一條指令,即序號(hào)為M1+1的指令,最后通過(guò)跳轉(zhuǎn)函數(shù)跳轉(zhuǎn)到地址部分[M1+2,319]中的某條指令處,其序號(hào)為M2,,然后通過(guò)重復(fù)執(zhí)行跳轉(zhuǎn)到前址,順序執(zhí)行,跳轉(zhuǎn)到后址,順序執(zhí)行的方法實(shí)現(xiàn)了50%的指令是順序執(zhí)行的;25%的指令是均勻分布在前地址部分;25%的指令是均勻分布在后地址部分的目的。其中跳轉(zhuǎn)函數(shù)上我復(fù)習(xí)了以前的rand函數(shù)。</p><p&g
88、t; 2、其次,在實(shí)現(xiàn)設(shè)計(jì)要求功能的時(shí)候,對(duì)于那些頁(yè)面跳轉(zhuǎn),頁(yè)面置換的細(xì)節(jié)內(nèi)容通過(guò)使用</p><p> if((i+1)%10==0) cout<<endl;</p><p> flag=++flag%4;</p><p> 來(lái)實(shí)現(xiàn)。期間的參數(shù)值的返回問(wèn)題也需要考慮,以免弄錯(cuò)了。</p><p> 3、關(guān)于這次程序設(shè)計(jì)
89、,我學(xué)到的還有很多,譬如說(shuō)在先進(jìn)先出(FIFO)算法中,如何通過(guò)“當(dāng)某一頁(yè)面進(jìn)入內(nèi)存時(shí)(包括頁(yè)面置換時(shí)頁(yè)面的置入),物理塊中各頁(yè)面訪問(wèn)標(biāo)記自動(dòng)加一,置換后,將置換頁(yè)面所在的物理塊中訪問(wèn)標(biāo)記減一”的方法來(lái)防止當(dāng)物理塊訪問(wèn)標(biāo)記出現(xiàn)兩個(gè)以上相同的值的錯(cuò)誤執(zhí)行問(wèn)題。還有在最佳置換算法中對(duì)于不將來(lái)不再使用的頁(yè)面,將其訪問(wèn)標(biāo)記設(shè)置為1000的方法。以及一些計(jì)算比如缺頁(yè)率計(jì)算問(wèn)題我也學(xué)習(xí)到了很多。</p><p> 4、由于
90、時(shí)間關(guān)系,對(duì)于一些細(xì)節(jié)問(wèn)題我沒(méi)有能夠考慮好,比如說(shuō)輸入控制,以后一定做好。</p><p> 5、通過(guò)本次的課程設(shè)計(jì),我意識(shí)到了自己的編程能力還很差,以后必須通過(guò)練習(xí)來(lái)提高自己的能力。另外,對(duì)于自己的思路老是打不開(kāi)的問(wèn)題,我認(rèn)識(shí)到,這也是專業(yè)知識(shí)掌握的不夠扎實(shí),缺乏實(shí)際操作的問(wèn)題。以后我一定努力改正。同時(shí),我認(rèn)識(shí)到了,程序設(shè)計(jì),不僅僅要的是編程能力,對(duì)于設(shè)計(jì)全局的把握,整體的思考,以及算法的深入理解分析也是必不
91、可少的,這也是我以后個(gè)人需要特別注意學(xué)習(xí)的地方??傊ㄟ^(guò)這次的設(shè)計(jì)作業(yè),我學(xué)習(xí)到了很多很多。</p><p><b> 課程設(shè)計(jì)二</b></p><p><b> 一:實(shí)驗(yàn)?zāi)康?lt;/b></p><p> 通過(guò)DNS協(xié)議,可實(shí)現(xiàn)IP地址和主機(jī)名之間的轉(zhuǎn)換。通過(guò)該程序可以得到:</p><p>
92、; (1)獲取本機(jī)名(gethostname()函數(shù))//</p><p> (2)獲得給定主機(jī)名的IP地址(gethostbyname()函數(shù))</p><p> (3)獲得給定IP地址的主機(jī)名(gethostbyaddr()函數(shù))</p><p><b> 二:實(shí)驗(yàn)內(nèi)容</b></p><p> 設(shè)計(jì)一個(gè)簡(jiǎn)
93、單的Winsock網(wǎng)絡(luò)程序,模擬UDP數(shù)據(jù)報(bào),加深對(duì)DNS作用的理解。</p><p><b> 三:設(shè)計(jì)思路</b></p><p> 1、啟動(dòng) Visual C++,進(jìn)入集成開(kāi)發(fā)環(huán)境;</p><p> 2、建立一個(gè)“Win32 Console Application"類型的工程,工程名自擬;</p><
94、p> 3、在該工程下,新建一個(gè)源程序文件,即選擇“C++ SourceFile",文件名自擬;</p><p> 4、輸入以下源程序(注釋部分可不必輸入);</p><p> 四:文件系統(tǒng)結(jié)構(gòu)的說(shuō)明</p><p> #include<winsock.h></p><p> #include<std
95、io.h></p><p> #include<string.h> </p><p> #pragma comment(lib,"ws2_32.lib")</p><p><b> 五:源代碼</b></p><p> #include<winsock.h><
96、;/p><p> #include<stdio.h></p><p> #include<string.h> </p><p> #pragma comment(lib,"ws2_32.lib")</p><p><b> //主文件//</b></p>&l
97、t;p> int main()</p><p><b> {</b></p><p> WORD wVersionRequested=MAKEWORD(1,1);</p><p> WSADATA wsaData;//初始化 windows sockets API//</p><p> if(WSASta
98、rtup(wVersionRequested,&wsaData)){</p><p> printf("WSAStartup failed%s\n",WSAGetLastError());</p><p> return -1;</p><p><b> }</b></p><p>
99、char hostname[256];//獲得本主機(jī)名//</p><p> int res=gethostname(hostname,sizeof(hostname));</p><p> if(res!=0){//錯(cuò)誤處理//</p><p> printf("Error:%u\n",WSAGetLastError());</p&
100、gt;<p> return -1;</p><p><b> }</b></p><p> printf("本主機(jī)名為:%s\n",hostname); //打印本主機(jī)名字//</p><p> printf("請(qǐng)輸入一個(gè)主機(jī)域名:"); //輸入一個(gè)主機(jī)的域名//</p
101、><p> scanf("%s",hostname);//利用主機(jī)名獲得主機(jī)的地址//</p><p> hostent* pHostent=gethostbyname(hostname);</p><p> if(pHostent==NULL){//錯(cuò)誤處理//</p><p> printf("Error
102、:%u\n",WSAGetLastError());</p><p> return -1;</p><p><b> }</b></p><p> //解析返回的主機(jī)地址信息:別名、地址類型、地址長(zhǎng)度,并打印//</p><p> hostent& he=*pHostent;</p>
103、;<p> printf("name=%s\naliase=%s\naddrtype=%d\nlength=%d\n",he.h_name,he.h_aliases,he.h_addrtype,he.h_length);</p><p> sockaddr_in sa;//打印主機(jī)每一個(gè)網(wǎng)卡的 IP地址//</p><p> for (int nA
104、dapter=0; he.h_addr_list[nAdapter]; nAdapter++) {</p><p> memcpy(&sa.sin_addr.s_addr,he.h_addr_list[nAdapter],he.h_length);</p><p> printf("Address:%s\n",inet_ntoa(sa.sin_addr));
105、</p><p> }//顯示 lP地址//</p><p> printf("\n");</p><p> unsigned long addr;</p><p> char hostaddr[50];</p><p> printf("請(qǐng)輸人服務(wù)器IP地址:");
106、//輸入一個(gè)服務(wù)器的IP地址//</p><p> scanf("%s",hostaddr);</p><p> addr=inet_addr(hostaddr); //將 lP地址轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)序//</p><p> pHostent=gethostbyaddr((char *)&addr,4,AF_INET);</p&
107、gt;<p> //利用IP地址獲得主機(jī)名人//</p><p> if(pHostent=NULL){//錯(cuò)誤處理//</p><p> printf("Error:%u\n",WSAGetLastError());</p><p> return -1;</p><p><b> }&
108、lt;/b></p><p> hostent& hel=*pHostent;</p><p> printf("主機(jī)名為;%s\naliases=%s\naddrtype=%d\nlength=%d\n",he.h_name,he.h_aliases,he.h_addrtype,he.h_length); //打印返回的主機(jī)信息//</p>
109、;<p> WSACleanup(); //結(jié)束windows sockets API//</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> 六:運(yùn)行結(jié)果及分析</b></p><p>
110、<b> 七:使用說(shuō)明</b></p><p> 打開(kāi)程序,輸入一個(gè)主機(jī)域名,回車,得到主機(jī)IP;然后輸入服務(wù)器IP地址,回車,得到主機(jī)名,完成。</p><p><b> 八:總結(jié)</b></p><p> 通過(guò)這次課程設(shè)計(jì),我對(duì)于DNS協(xié)議有了一定了解,對(duì)于主機(jī)名與IP地址之間的轉(zhuǎn)換有了一定的認(rèn)識(shí)。</p
溫馨提示
- 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)課程設(shè)計(jì)--- 請(qǐng)求調(diào)頁(yè)存儲(chǔ)管理
- 請(qǐng)求調(diào)頁(yè)存儲(chǔ)管理系統(tǒng)的模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)--模擬請(qǐng)求頁(yè)式存儲(chǔ)管理
- 課程設(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)求調(diào)頁(yè)
- 操作系統(tǒng)課程設(shè)計(jì)--模擬請(qǐng)求頁(yè)式管理
- 模擬頁(yè)式存儲(chǔ)管理-操作系統(tǒng)課程設(shè)計(jì)
- 模擬頁(yè)式存儲(chǔ)管理 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---請(qǐng)求頁(yè)式存儲(chǔ)管理的頁(yè)面置換算法
- 模擬頁(yè)式存儲(chǔ)管理-操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--編程演示三種存儲(chǔ)管理方式的地址換算過(guò)程
- 可變分區(qū)存儲(chǔ)管理算法模擬課程設(shè)計(jì)
- 基本分頁(yè)存儲(chǔ)管理的模擬實(shí)現(xiàn) 課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--頁(yè)式存儲(chǔ)管理中頁(yè)面置換(淘汰)的模擬程序
- 操作系統(tǒng)課程設(shè)計(jì)--模擬實(shí)現(xiàn)可變分區(qū)存儲(chǔ)管理
- 課程設(shè)計(jì)---存儲(chǔ)器管理系統(tǒng)設(shè)計(jì)
- 操作系統(tǒng)-請(qǐng)求頁(yè)式存儲(chǔ)管理實(shí)驗(yàn)報(bào)告
評(píng)論
0/150
提交評(píng)論