版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 《網(wǎng)絡(luò)操作系統(tǒng)》</b></p><p> 課 程 設(shè) 計(jì) 報(bào) 告 書</p><p> 題 目:請求調(diào)頁存儲管理方式的模擬 </p><p> 學(xué) 號: </p><p> 學(xué)生姓名: </p>
2、<p> 指導(dǎo)教師: </p><p> 2010 年 12 月 10 日</p><p><b> 目錄</b></p><p> 課程設(shè)計(jì)一:請求調(diào)頁存儲管理方式的模擬</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)的說明</p><p><b> 五、數(shù)據(jù)結(jié)構(gòu)的說明</b></p><p><b> 六、程序流程圖</b><
4、;/p><p><b> 七、源代碼</b></p><p> 八、運(yùn)行結(jié)果以及分析</p><p><b> 九、使用說明</b></p><p><b> 十、總結(jié)</b></p><p> 課程設(shè)計(jì)二:通過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)的說明</p><p><b> 五、源代碼&
6、lt;/b></p><p> 六、運(yùn)行結(jié)果以及分析</p><p><b> 七、使用說明</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.通過模擬實(shí)現(xiàn)請求頁式存儲管理的幾種基本頁面置換算法,了解虛擬儲技術(shù)的特點(diǎn)。</p><p> 2.通過對頁面、頁表、地址轉(zhuǎn)換和頁面置換過程的模擬,加深對請求調(diào)頁系統(tǒng)的原理和實(shí)現(xiàn)過程的理解。</p><p> 3.掌握虛擬存儲請求頁式存儲管理中幾種基本頁面置換算法的基本思想和實(shí)現(xiàn)過程,并比較它們的效率。</p&
8、gt;<p><b> 二:實(shí)驗(yàn)內(nèi)容</b></p><p> 1.假設(shè)每個(gè)頁面中可存放10條指令,分配給一個(gè)作業(yè)的內(nèi)存塊數(shù)為4</p><p> 2.用C語言模擬一作業(yè)的執(zhí)行過程。該作業(yè)共有320條指令,即它的地址空間為32頁,目前它的所有頁都還未調(diào)入內(nèi)存。在模擬過程中,如果訪問的指令已在內(nèi)存,則顯示其物理地址,并轉(zhuǎn)下一條指令。如果所訪問的指令還
9、未裝入內(nèi)存,則發(fā)生缺頁,此時(shí)需記錄缺頁的次數(shù),并將相應(yīng)頁調(diào)入內(nèi)存。如果4個(gè)內(nèi)存塊中均已裝入該作業(yè),則需進(jìn)行頁面轉(zhuǎn)換。最后顯示其物理地址,并轉(zhuǎn)下一條指令。在所有320條指令執(zhí)行完畢后,請計(jì)算并顯示作業(yè)運(yùn)行過程中發(fā)生的缺頁率。</p><p> 3.置換算法:請分別考慮OPT、FIFO和LRU算法。</p><p> 4.作業(yè)中指令的訪問次序按下述原則生成:</p><
10、p> 50%的指令是順序執(zhí)行的</p><p> 25%的指令是均勻分布在前地址部分</p><p> 25%的指令是均勻分布在后地址部分</p><p><b> 具體的實(shí)施辦法:</b></p><p> ①在[0,319]之間隨機(jī)選取一條起始指令,其序號為m</p><p>
11、 ?、陧樞驁?zhí)行下一條指令,即序號為m+1的指令</p><p> ?、弁ㄟ^隨機(jī)數(shù),跳轉(zhuǎn)到前地址部分[0,m-1]中的某條指令處,其序號為m1;</p><p> ?、茼樞驁?zhí)行下一條指令,即序號為m1+1的指令</p><p> ?、萃ㄟ^隨機(jī)數(shù),跳轉(zhuǎn)到后地址部分[m1+2,319]中的某條指令處,其序號為m2;</p><p> ⑥順序執(zhí)行下
12、一條指令,即序號為m2+1的指令</p><p> ⑦重復(fù)跳轉(zhuǎn)到前地址部分、順序執(zhí)行、跳轉(zhuǎn)到后地址部分、順序執(zhí)行的過程,直至執(zhí)行320條指令。</p><p><b> 三:設(shè)計(jì)思路</b></p><p> 因?yàn)樵诔绦蜻\(yùn)行的過程中,當(dāng)我們訪問一個(gè)頁面時(shí),倘若此頁面不在內(nèi)存當(dāng)中,我們就需要將其調(diào)入內(nèi)存。此時(shí)就產(chǎn)生了兩個(gè)問題:內(nèi)存是否有空閑
13、和倘若內(nèi)存有空閑我們要將那個(gè)頁面調(diào)出的問題。這樣的話就需要根據(jù)一定的算法來判斷決定。我們大家都知道,算法的好壞反映在程序執(zhí)行的效率上面,所以我們要根據(jù)不同的情況調(diào)用不同的算法。這里我們有三種置換算法:1最佳置換算法(Optimal) 2、先進(jìn)先出法(First In First Out) 3、最近最久未使用(Least Recently Used)。所謂最佳置換算法,就是其所選擇的被淘汰頁是將來不再被使用,或者是在最遠(yuǎn)的將來才被訪問的頁
14、面。 采用這種頁面置換算法, 保證有最少的缺頁率。但由于目前還無法預(yù)知一個(gè)進(jìn)程在內(nèi)存的若干個(gè)頁面中,哪個(gè)在最長的時(shí)間內(nèi)不會被訪問,因而,現(xiàn)實(shí)中該算法是無法實(shí)現(xiàn)的。因此在該算法的模擬過程中,頁面訪問次序必須是給定的,具體實(shí)現(xiàn)為:對每一個(gè)物理塊設(shè)置一個(gè)整數(shù)型的訪問標(biāo)志位,當(dāng)需要置換物理塊中的某一頁時(shí),將每一個(gè)物理塊中的頁面號與當(dāng)前需調(diào)入頁以后的每一頁面號進(jìn)行比較,若物理塊中的頁面號與所有的頁面號都不同,則該頁即為將來不再使用的頁,</
15、p><p> 四:文件系統(tǒng)結(jié)構(gòu)的說明</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;//頁號</p><p> int accessed;//訪問字
17、段,其值表示多久未被訪問</p><p> }BLOCK; </p><p> int pc;//程序計(jì)數(shù)器,用來記錄指令的序號</p><p> int m;//缺頁計(jì)數(shù)器,用來記錄缺頁的次數(shù) </p><p> static int random[320];//用來存儲320條隨機(jī)數(shù)</p><p&
18、gt; BLOCK block[Bsize]; //定義一大小為4的物理塊數(shù)組</p><p> void init( ); //程序初始化函數(shù)</p><p> int findExist(int curpage);//查找物理塊中是否有該頁面</p><p> int findSpace( );//查找是否有空閑物理塊</p>&l
19、t;p> int findReplace( );//查找應(yīng)予置換的頁面</p><p> void display ( );//顯示</p><p> void suijishu( );//產(chǎn)生320條隨機(jī)數(shù),顯示并存儲到random[320]</p><p> void pagestring( );//顯示調(diào)用的頁面隊(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)的說明</b></p><p> 在本程序中,對于物理塊使用
21、了結(jié)構(gòu)體。最后主函數(shù)通過依次調(diào)用三種算法函數(shù)來實(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;//頁號</p><p> int accessed;//訪問字段,其值表示多久未被訪問</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;//頁號</p><p> int accessed;//訪問字段,其值表示多久未被訪問</p><p>
26、}BLOCK; </p><p> int pc;//程序計(jì)數(shù)器,用來記錄指令的序號</p><p> int m;//缺頁計(jì)數(shù)器,用來記錄缺頁的次數(shù) </p><p> static int random[320];//用來存儲320條隨機(jī)數(shù)</p><p> BLOCK block[Bsize]; //定義一大小為4的
27、物理塊數(shù)組</p><p> void init( ); //程序初始化函數(shù)</p><p> int findExist(int curpage);//查找物理塊中是否有該頁面</p><p> int findSpace( );//查找是否有空閑物理塊</p><p> int findReplace( );//查找應(yīng)予置
28、換的頁面</p><p> void display ( );//顯示</p><p> void suijishu( );//產(chǎn)生320條隨機(jī)數(shù),顯示并存儲到random[320]</p><p> void pagestring( );//顯示調(diào)用的頁面隊(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)//查找物理塊中是否有該頁面</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;//檢測到內(nèi)存中有該頁面,返回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)予置換的頁面</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)予置換頁面,返回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("請輸入一個(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í)行下一條指令,即序號為m+1的指令</p><p> if(flag==1) pc=rand( )% (pc-1);//通過隨機(jī)數(shù),跳轉(zhuǎn)到前地址部分[0,m-1]中的某條指令處,其序號為m1</p><p> if(flag==3) pc=pc+1+(rand( )%(320-
42、(pc+1)));//通過隨機(jī)數(shù),跳轉(zhuǎn)到后地址部分[m1+2,319]中的某條指令處,其序號為m2</p><p> flag=++flag%4;//如果4個(gè)內(nèi)存塊中均已裝入該作業(yè),則需進(jìn)行頁面轉(zhuǎn)換</p><p> printf(" %03d",random[i]);</p><p> if((i+1)%10==0) cout<&l
43、t;endl;//每個(gè)頁面中可存放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);//顯示該頁面</p><p> if((i+1)%10==0) printf("\n");//每個(gè)頁面中可存放10條指令</p&
45、gt;<p><b> }</b></p><p><b> }</b></p><p> void OPT( )/*OPT算法——最佳置換算法.最佳置換算法是Blady在理論上提出的一種算法。其所選擇的被淘汰頁是將來不再被使用,或者是在最遠(yuǎn)的將</p><p> 來才被訪問的頁面.采用這種頁面置換算
46、法, 保證有最少的缺頁率。但由于目前還無法預(yù)知一個(gè)進(jìn)程在內(nèi)存的若干個(gè)頁面中,哪個(gè)在最長的</p><p> 時(shí)間內(nèi)不會被訪問,因而,現(xiàn)實(shí)中該算法是無法實(shí)現(xiàn)的。因此在該算法的模擬過程中,頁面訪問次序必須是給定的,具體實(shí)現(xiàn)為:對每一</p><p> 物理塊設(shè)置一個(gè)整數(shù)型的訪問標(biāo)志位,當(dāng)需要置換物理塊中的某一頁時(shí),將每一個(gè)物理塊中的頁面號與當(dāng)前需調(diào)入頁以后的每一頁面號進(jìn)行</p>
47、;<p> 比較,若物理塊中的頁面號與所有的頁面號都不同,則該頁即為將來不再使用的頁,將訪問標(biāo)記設(shè)置為1000,表示將來不會用,設(shè)置為一個(gè)</p><p> 很大數(shù);若找到頁號相同的則將其訪問次序記入訪問標(biāo)記,比較訪問標(biāo)記,最大的即為最久不會被訪問的,將其換出。</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)//物理塊中的頁面號與所有的頁面號都不同 { </p><p> block[k].
53、accessed = 1000; </p><p> }//將來不會用,設(shè)置為一個(gè)很大數(shù)</p><p> else//找到頁號相同的則將其訪問次序記入訪問標(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("缺頁次數(shù):%d\n",m);</p><p> cout<<"缺頁率:"<<(m/320.0)*100<<"%"<<endl;</p><p><b> }</b></p>
57、<p> void LRU( )/*LRU算法——最近最久未使用算法.該算法以最近的過去作為不久將來的近似, 將過去最長一段時(shí)間里不曾被使用的頁面置換掉。</p><p> 在該算法的模擬過程中,每當(dāng)物理塊中的頁面被訪問時(shí),便將其訪問標(biāo)記置為-1</p><p> 以后每執(zhí)行一條指令,便將物理塊中各頁面的訪問標(biāo)記加一,需置換時(shí)訪問標(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;//每頁十個(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ù)存在的并剛訪問過的BLOCK中頁面accessed為-1</p><p> for(int j=0; j<4; j++)</p>
64、;<p> {block[j].accessed++;}//每執(zhí)行一條指令,便將物理塊中各頁面的訪問標(biāo)記加一</p><p><b> }</b></p><p> printf("缺頁次數(shù):%d\n",m);</p><p> cout<<"缺頁率:"<<(
65、m/320.0)*100<<"%"<<endl;</p><p><b> }</b></p><p> void FIFO( )/*該算法總是淘汰最先進(jìn)入內(nèi)存的頁面,既選擇在內(nèi)存中駐留時(shí)間最久的頁面予以淘汰。</p><p> 在該算法的模擬過程中,每當(dāng)某一頁面進(jìn)入內(nèi)存時(shí)(包括頁面置換時(shí)頁面的
66、置入),物理塊中各頁面訪問標(biāo)記自動(dòng)加一,置換后,將置換頁面</p><p> 所在的物理塊中訪問標(biāo)記減一;這樣能防止當(dāng)物理塊訪問標(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)某一頁面進(jìn)入內(nèi)存時(shí)(包括頁面置換時(shí)頁面的置入),物理塊中各頁面訪問標(biāo)記自動(dòng)加一</p><p><b> }</b></p><
73、p> printf("缺頁次數(shù):%d\n",m);</p><p> cout<<"缺頁率:"<<(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<<"請輸入第一條指令號(0~320):";</p><p> suijishu( );</p><p> cout<<&qu
75、ot;-------對應(yīng)的調(diào)用頁面隊(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<<" 請選擇一種頁面置換算法:\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);//每頁分配4個(gè)內(nèi)存塊</p><p><b> }</b></p><p><b> }</b></p><p><b>
84、 八:運(yùn)行結(jié)果及分析</b></p><p><b> 九:使用說明</b></p><p> 1、首先進(jìn)入程序,在0~320之間隨意挑選一個(gè)數(shù)輸入,按回車鍵。</p><p> 2、程序產(chǎn)生320個(gè)隨機(jī)數(shù)。</p><p> 3、開始選擇一種置換算法進(jìn)行頁面的置換。輸入置換算法前面的數(shù)字,回車。&
85、lt;/p><p> 4、回車,得到置換算法的結(jié)果。</p><p> 5、換做其他的算法,依然回車,得到置換算法的結(jié)果。</p><p> 6、完成后選擇退出。。</p><p><b> 十:總結(jié)</b></p><p> 1、通過這次操作系統(tǒng)課程設(shè)計(jì)的編寫,我學(xué)到了很多。剛開始見到設(shè)計(jì)
86、要求時(shí),我有點(diǎn)沒有思路。通過從網(wǎng)上參考了一些資料以后,我開始慢慢的了解了程序設(shè)計(jì)中的一些問題。首先:我對OPT、FIFO和LRU算法三種算法有了一定的了解。其次,在分析題目要求的時(shí)候,對于如何將作業(yè)中指令的訪問次序按一定原則生成的問題我沒有一點(diǎn)思路。最后,在仔細(xì)的看了一些類似的題目代碼以后,我終于有了一定的理解。原來在實(shí)現(xiàn)的時(shí)候,通過先順序執(zhí)行一條隨機(jī)指令,譬如該指令為M0,然后開始順序執(zhí)行下一條指令M0+1,緊接著通過跳轉(zhuǎn)函數(shù)跳轉(zhuǎn)到地
87、址部分[0,M-1]中的某條指令處,其序號記為M1,然后再次順序執(zhí)行下一條指令,即序號為M1+1的指令,最后通過跳轉(zhuǎn)函數(shù)跳轉(zhuǎn)到地址部分[M1+2,319]中的某條指令處,其序號為M2,,然后通過重復(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í)候,對于那些頁面跳轉(zhuǎn),頁面置換的細(xì)節(jié)內(nèi)容通過使用</p><p> if((i+1)%10==0) cout<<endl;</p><p> flag=++flag%4;</p><p> 來實(shí)現(xiàn)。期間的參數(shù)值的返回問題也需要考慮,以免弄錯(cuò)了。</p><p> 3、關(guān)于這次程序設(shè)計(jì)
89、,我學(xué)到的還有很多,譬如說在先進(jìn)先出(FIFO)算法中,如何通過“當(dāng)某一頁面進(jìn)入內(nèi)存時(shí)(包括頁面置換時(shí)頁面的置入),物理塊中各頁面訪問標(biāo)記自動(dòng)加一,置換后,將置換頁面所在的物理塊中訪問標(biāo)記減一”的方法來防止當(dāng)物理塊訪問標(biāo)記出現(xiàn)兩個(gè)以上相同的值的錯(cuò)誤執(zhí)行問題。還有在最佳置換算法中對于不將來不再使用的頁面,將其訪問標(biāo)記設(shè)置為1000的方法。以及一些計(jì)算比如缺頁率計(jì)算問題我也學(xué)習(xí)到了很多。</p><p> 4、由于
90、時(shí)間關(guān)系,對于一些細(xì)節(jié)問題我沒有能夠考慮好,比如說輸入控制,以后一定做好。</p><p> 5、通過本次的課程設(shè)計(jì),我意識到了自己的編程能力還很差,以后必須通過練習(xí)來提高自己的能力。另外,對于自己的思路老是打不開的問題,我認(rèn)識到,這也是專業(yè)知識掌握的不夠扎實(shí),缺乏實(shí)際操作的問題。以后我一定努力改正。同時(shí),我認(rèn)識到了,程序設(shè)計(jì),不僅僅要的是編程能力,對于設(shè)計(jì)全局的把握,整體的思考,以及算法的深入理解分析也是必不
91、可少的,這也是我以后個(gè)人需要特別注意學(xué)習(xí)的地方??傊?,通過這次的設(shè)計(jì)作業(yè),我學(xué)習(xí)到了很多很多。</p><p><b> 課程設(shè)計(jì)二</b></p><p><b> 一:實(shí)驗(yàn)?zāi)康?lt;/b></p><p> 通過DNS協(xié)議,可實(shí)現(xiàn)IP地址和主機(jī)名之間的轉(zhuǎn)換。通過該程序可以得到:</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è)簡
93、單的Winsock網(wǎng)絡(luò)程序,模擬UDP數(shù)據(jù)報(bào),加深對DNS作用的理解。</p><p><b> 三:設(shè)計(jì)思路</b></p><p> 1、啟動(dòng) Visual C++,進(jìn)入集成開發(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)的說明</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("請輸入一個(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ī)地址信息:別名、地址類型、地址長度,并打印//</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("請輸人服務(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> 七:使用說明</b></p><p> 打開程序,輸入一個(gè)主機(jī)域名,回車,得到主機(jī)IP;然后輸入服務(wù)器IP地址,回車,得到主機(jī)名,完成。</p><p><b> 八:總結(jié)</b></p><p> 通過這次課程設(shè)計(jì),我對于DNS協(xié)議有了一定了解,對于主機(jī)名與IP地址之間的轉(zhuǎn)換有了一定的認(rèn)識。</p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)--- 請求調(diào)頁存儲管理
- 請求調(diào)頁存儲管理系統(tǒng)的模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)--模擬請求頁式存儲管理
- 課程設(shè)計(jì)--請求頁式存儲器管理
- 操作系統(tǒng)課程設(shè)計(jì)--請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計(jì)--請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計(jì)--請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計(jì)--請求調(diào)頁
- 操作系統(tǒng)課程設(shè)計(jì)--模擬請求頁式管理
- 模擬頁式存儲管理-操作系統(tǒng)課程設(shè)計(jì)
- 模擬頁式存儲管理 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---請求頁式存儲管理的頁面置換算法
- 模擬頁式存儲管理-操作系統(tǒng)課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)--編程演示三種存儲管理方式的地址換算過程
- 可變分區(qū)存儲管理算法模擬課程設(shè)計(jì)
- 基本分頁存儲管理的模擬實(shí)現(xiàn) 課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--頁式存儲管理中頁面置換(淘汰)的模擬程序
- 操作系統(tǒng)課程設(shè)計(jì)--模擬實(shí)現(xiàn)可變分區(qū)存儲管理
- 課程設(shè)計(jì)---存儲器管理系統(tǒng)設(shè)計(jì)
- 操作系統(tǒng)-請求頁式存儲管理實(shí)驗(yàn)報(bào)告
評論
0/150
提交評論