版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 信息科學與工程學院</b></p><p><b> 課程設(shè)計任務(wù)書</b></p><p> 請求頁式存儲管理的頁面置換算法</p><p> 專 業(yè): 計算機科學與技術(shù) </p><p> 課 程: 計算機操作系
2、統(tǒng) </p><p> 指導教師: 劉彩霞 </p><p> 完成時間: 2012年5月----2012年 6月</p><p> 課程設(shè)計任務(wù)書及成績評定</p><p><b> 目 錄 </b></p><p&
3、gt;<b> 一.設(shè)計目的1</b></p><p><b> 二.設(shè)計內(nèi)容1</b></p><p><b> 三.設(shè)計思路1</b></p><p> 1. 計算隨機數(shù),產(chǎn)生320條指令序列1</p><p> 2. 將指令序列變換成為頁地址流2<
4、;/p><p> 3. 計算不同算法的命中率2</p><p><b> 4.輸出格式2</b></p><p><b> 四.實驗報告2</b></p><p> 1.寫出你編寫的C語言程序。2</p><p> 2.總結(jié)體會請求頁式存儲管理的實現(xiàn)原理。10
5、</p><p> 3. 寫出這三種頁面置換算法的實現(xiàn)思想。10</p><p> 4.對不同算法的性能進行評價。10</p><p><b> 五.總結(jié)10</b></p><p><b> 一.設(shè)計目的</b></p><p> 通過請求頁式存儲管理中頁面
6、置換算法模擬程序,了解虛擬存儲技術(shù)的特點,掌握請求頁式存儲管理的頁面置換算法。</p><p><b> 二.設(shè)計內(nèi)容</b></p><p> 1.通過隨機數(shù)產(chǎn)生一個指令序列,共320條指令,指令的地址按下述原則生產(chǎn):</p><p> 50%的指令是順序執(zhí)行的;</p><p> 25%的指令是均勻分布在前地
7、址部分;</p><p> 25%的指令是均勻分布在后地址部分。</p><p> 2.將指令序列變換成為頁地址流</p><p> 設(shè)頁面大小為1K;用戶內(nèi)存容量為4頁到32頁;用戶虛存容量為32K。</p><p> 在用戶虛存中,按每K存放10條指令排列虛存地址,即320條指令在虛存中的存放方式為:第0條至第9條指令為第0頁;第
8、10條至19條指令為第1頁;…第310條至319條指令為第31頁。</p><p> 3.計算并輸出下述各種算法在不同內(nèi)存容量下的命中率。</p><p> (1) 先進先出算法(FIFO) </p><p> (2) 最近最少使用算法(LRU)</p><p> (3) 最佳使用算(OPT)</p><p>
9、 命中率=1-頁面失效次數(shù)/頁地址流長度</p><p> 本實驗中,頁地址流長度為320,頁面失效次數(shù)為每次訪問相應(yīng)指令時,該指令所對應(yīng)的頁不在內(nèi)存的次數(shù)。</p><p><b> 三.設(shè)計思路 </b></p><p> 1.計算隨機數(shù),產(chǎn)生320條指令序列</p><p> 關(guān)于隨機數(shù)的產(chǎn)生辦法。首先要
10、初始化設(shè)置隨機數(shù),產(chǎn)生序列的開始點,例如,通過下列語句實現(xiàn):</p><p> srand ( 400 ) ;</p><p><b> m=160;</b></p><p> for (i=0;i<80;i++=</p><p><b> {</b></p><p>
11、;<b> j=i﹡4;</b></p><p><b> a[j]=m;</b></p><p> a[j+1]=m+1;</p><p> a[j+2]=a[j] ﹡1.0﹡ rand( )/32767;</p><p> a[j+3]=a[j+2]+1</p><
12、p> m=a[j+3]+(319-a[j+3]) ﹡1.0﹡rand( )/32767;</p><p><b> }</b></p><p> 2.將指令序列變換成為頁地址流</p><p> for ( k=0;k<320;k++)</p><p> { pt=a[k]/10;</p>
13、<p> pd= a[k]%10;</p><p><b> …</b></p><p><b> }</b></p><p> 3.計算不同算法的命中率</p><p> rate=1-1.0﹡U/320 ;</p><p> 其中U為缺頁中斷次數(shù),3
14、20是頁地址流長度。</p><p><b> 4. 輸出格式</b></p><p> k fifo 1ru</p><p> 4 0.23 0.25</p><p><b> …</b></p><p> 32 1.0 1.0</p&g
15、t;<p><b> 四.實驗報告</b></p><p> 1.寫出你編寫的C語言程序。</p><p> #include<conio.h> </p><p> #include<stdio.h></p><p> #include<stdlib.h><
16、;/p><p> #include<string.h></p><p> #define Myprintf printf("|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|\n") /*表格控制*/ </p><p> #define bsiz
17、e 4 //物理塊大小</p><p> #define psize 16 //進程大小</p><p> typedef struct page </p><p><b> { </b></p><p> int num; /*記錄頁面號*/ </p><p> in
18、t time; /*記錄調(diào)入內(nèi)存時間*/ </p><p> }Page; /* 頁面邏輯結(jié)構(gòu),結(jié)構(gòu)為方便算法實現(xiàn)設(shè)計*/ </p><p> Page b[bsize]; /*內(nèi)存單元數(shù)*/ </p><p> int c[bsize][psize]; /*暫保存內(nèi)存當前的狀態(tài):緩沖區(qū)*/ &l
19、t;/p><p> int queue[100]; /*記錄調(diào)入隊列*/ </p><p> int K; /*調(diào)入隊列計數(shù)變量*/ </p><p> int phb[bsize]={0}; //物理塊標號</p><p> int pro[psize]={0}; //進程序列號</p&g
20、t;<p> int flag[bsize] = {0}; //進程等待次數(shù)(存放最久未被使用的進程標志)</p><p> int i = 0, j = 0,k = 0; //i表示進程序列號,j表示物理塊號</p><p> int m = -1, n = -1; //物理塊空閑和進程是否相同判斷標志</p><p> i
21、nt max = -1,maxflag = 0; //標記替換物理塊進程下標</p><p> int count = 0; //統(tǒng)計頁面缺頁次數(shù)</p><p> //**************************************************************//</p><p> //*********
22、*****************************************************//隨機產(chǎn)生序列號函數(shù)</p><p> //**************************************************************</p><p> int* build()</p><p><b> {&
23、lt;/b></p><p> printf("隨機產(chǎn)生一個進程序列號為:\n");</p><p> int i = 0;</p><p> for(i=0; i<psize; i++)</p><p><b> {</b></p><p> pro[i
24、] = 10*rand()/(RAND_MAX+1)+1;</p><p> printf("%d ",pro[i]);</p><p><b> }</b></p><p> printf("\n");</p><p> return(pro);</p>
25、<p><b> }</b></p><p> //**************************************************************//查找空閑物理塊</p><p> //**************************************************************</p
26、><p> int searchpb()</p><p><b> {</b></p><p> for(j=0; j<bsize; j++)</p><p><b> {</b></p><p> if(phb[j] == 0)</p><p
27、><b> {</b></p><p><b> m = j; </b></p><p> return m; </p><p><b> break;</b></p><p><b> }</b></p><
28、p><b> }</b></p><p> return -1;</p><p><b> }</b></p><p> //**************************************************************//查找相同進程</p><p>
29、 //**************************************************************</p><p> int searchpro()</p><p><b> {</b></p><p> for(j = 0; j < bsize; j++)</p><p>&
30、lt;b> {</b></p><p> if(phb[j] == pro[i])</p><p><b> {</b></p><p><b> n = j;</b></p><p><b> return j;</b></p>&l
31、t;p><b> }</b></p><p><b> }</b></p><p> return -1;</p><p><b> }</b></p><p> //***********************************************
32、***************//初始化內(nèi)存</p><p> //**************************************************************</p><p> void empty()</p><p><b> {</b></p><p> for(i=0;i&
33、lt;bsize;i++)</p><p><b> phb[i]=0;</b></p><p> count=0; //計數(shù)器置零</p><p><b> }</b></p><p> //**********************************
34、****************************//先進先出頁面置換算法</p><p> //**************************************************************</p><p> void FIFO()</p><p><b> { </b></p>&
35、lt;p> for(i = 0; i<psize; i++)</p><p><b> { </b></p><p> m=searchpb();</p><p> n=searchpro();</p><p> //找flag值最大的</p><p> for
36、(j = 0; j < bsize;j++)</p><p><b> {</b></p><p> if(flag[j]>maxflag)</p><p><b> {</b></p><p> maxflag = flag[j];</p><p>&l
37、t;b> max = j;</b></p><p><b> }</b></p><p><b> } </b></p><p> if(n == -1) //不存在相同進程</p><p><b> {</b><
38、;/p><p> if(m != -1) //存在空閑物理塊</p><p><b> {</b></p><p> phb[m] = pro[i]; //進程號填入該空閑物理塊</p><p><b> count++;</b></p><p>
39、; flag[m] = 0;</p><p> for(j = 0;j <= m; j++)</p><p><b> {</b></p><p> flag[j]++;</p><p><b> }</b></p><p><b> m = -1
40、;</b></p><p><b> }</b></p><p> else //不存在空閑物理塊</p><p><b> {</b></p><p> phb[max] = pro[i];</p><p> flag[m
41、ax] = 0;</p><p> for(j = 0;j < bsize; j++)</p><p><b> {</b></p><p> flag[j]++;</p><p><b> }</b></p><p><b> max = -1;&
42、lt;/b></p><p> maxflag = 0;</p><p><b> count++;</b></p><p><b> }</b></p><p><b> }</b></p><p> else
43、 //存在相同的進程</p><p><b> {</b></p><p> phb[n] = pro[i];</p><p> for(j = 0;j < bsize; j++)</p><p><b> {</b></p><p> flag[
44、j]++;</p><p><b> }</b></p><p><b> n = -1;</b></p><p><b> }</b></p><p> for(j = 0 ;j < bsize; j++)</p><p><b&g
45、t; {</b></p><p> printf("%d ",phb[j]);</p><p><b> }</b></p><p> printf("\n");</p><p><b> }</b></p><p&
46、gt; printf("缺頁次數(shù)為:%d\n",count);</p><p> printf("\n");</p><p><b> }</b></p><p> //**************************************************************&l
47、t;/p><p> //**************************************************************</p><p> /*初始化內(nèi)存單元、緩沖區(qū)*/ </p><p> void Init(Page *b,int c[bsize][psize]) </p><p><b> {
48、</b></p><p><b> int i,j; </b></p><p> for(i=0;i<psize;i++) </p><p><b> { </b></p><p> b[i].num=-1; </p><p> b[i].time
49、=psize-i-1; </p><p><b> } </b></p><p> for(i=0;i<bsize;i++) </p><p> for(j=0;j<psize;j++) </p><p> c[i][j]=-1; </p><p><b> } &
50、lt;/b></p><p> /*取得在內(nèi)存中停留最久的頁面,默認狀態(tài)下為最早調(diào)入的頁面*/ </p><p> int GetMax(Page *b) </p><p><b> { </b></p><p><b> int i; </b></p><p>
51、; int max=-1;</p><p> int tag=0;</p><p> for(i=0;i<bsize;i++) </p><p><b> { </b></p><p> if(b[i].time>max) </p><p><b> { <
52、/b></p><p> max=b[i].time; </p><p><b> tag=i; </b></p><p><b> } </b></p><p><b> } </b></p><p> return tag; <
53、/p><p><b> }</b></p><p> /*判斷頁面是否已在內(nèi)存中*/ </p><p> int Equation(int fold,Page *b) </p><p><b> { </b></p><p><b> int i; <
54、;/b></p><p> for(i=0;i<bsize;i++) </p><p><b> { </b></p><p> if (fold==b[i].num) </p><p> return i; </p><p><b> } </b>&l
55、t;/p><p> return -1; </p><p><b> } </b></p><p> /*LRU核心部分*/ </p><p> void Lruu(int fold,Page *b) </p><p><b> { </b></p>&l
56、t;p><b> int i; </b></p><p><b> int val; </b></p><p> val=Equation(fold,b); </p><p> if (val>=0) </p><p><b> { </b></p&
57、gt;<p> b[val].time=0; </p><p> for(i=0;i<bsize;i++) </p><p> if (i!=val) </p><p> b[i].time++; </p><p><b> } </b></p><p><b&
58、gt; else </b></p><p><b> { </b></p><p> queue[++K]=fold;/*記錄調(diào)入頁面*/ </p><p> val=GetMax(b); </p><p> b[val].num=fold; </p><p> b[val
59、].time=0; </p><p> for(i=0;i<bsize;i++) </p><p> if (i!=val) </p><p> b[i].time++; </p><p><b> } </b></p><p><b> }</b></
60、p><p> void LRU()</p><p><b> { </b></p><p><b> int i,j; </b></p><p><b> K=-1; </b></p><p> Init(b, c); </p>&l
61、t;p> for(i=0;i<psize;i++) </p><p><b> { </b></p><p> Lruu(pro[i],b); </p><p> c[0][i]=pro[i]; </p><p> /*記錄當前的內(nèi)存單元中的頁面*/ </p><p> f
62、or(j=0;j<bsize;j++) </p><p> c[j][i]=b[j].num; </p><p><b> } </b></p><p><b> /*結(jié)果輸出*/ </b></p><p> printf("內(nèi)存狀態(tài)為:\n"); </p&g
63、t;<p> Myprintf; </p><p> for(j=0;j<psize;j++) </p><p> printf("|%2d ",pro[j]); </p><p> printf("|\n"); </p><p> Myprintf; </p>
64、<p> for(i=0;i<bsize;i++) </p><p> { for(j=0;j<psize;j++) </p><p><b> { </b></p><p> if(c[i][j]==-1) </p><p> printf("|%2c "
65、,32); </p><p><b> else </b></p><p> printf("|%2d ",c[i][j]); </p><p><b> } </b></p><p> printf("|\n"); </p><p
66、><b> } </b></p><p> Myprintf; </p><p> printf("\n調(diào)入隊列為:"); </p><p> for(i=0;i<K+1;i++) </p><p> printf("%3d",queue[i]); </
67、p><p> printf("\n缺頁次數(shù)為:%6d\n缺頁率:%16.6f",K+1,(float)(K+1)/psize); </p><p><b> }</b></p><p> //**************************************************************//主函
68、數(shù)</p><p> //**************************************************************</p><p> void main()</p><p><b> {</b></p><p> int sel ;</p><p>&
69、lt;b> do{</b></p><p> printf("\t\t\t--------------------------------------\t\t\t");</p><p> printf("\t\t\t ☆☆^-^歡迎進入操作系統(tǒng)界面^-^☆☆ \t\t\t");</p><p>
70、printf("\t\t\t--------------------------------------\t\t\t\n");</p><p> printf("\t\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\t\t\t");</p><p> printf("\t\t\t☆ 虛擬內(nèi)存 ☆
71、 \t\t\t");</p><p> printf("\t\t\t☆--------------------------------☆\t\t\t");</p><p> printf("\t\t\t☆ 1、產(chǎn)生隨機序列 ☆ \t\t\t");</p><p> printf(
72、"\t\t\t☆--------------------------------☆\t\t\t");</p><p> printf("\t\t\t☆ 2、最久未使用(LRU) ☆ \t\t\t");</p><p> printf("\t\t\t☆-------------------------------
73、-☆\t\t\t");</p><p> printf("\t\t\t☆ 3、先進先出(FIFO) ☆ \t\t\t");</p><p> printf("\t\t\t☆--------------------------------☆\t\t\t");</p><p> prin
74、tf("\t\t\t☆ 4、最佳置換算法(OPT) ☆ \t\t\t");</p><p> printf("\t\t\t☆--------------------------------☆\t\t\t");</p><p> printf("\t\t\t☆ 5、三種算法的比較() ☆ \t
75、\t\t");</p><p> printf("\t\t\t☆--------------------------------☆\t\t\t");</p><p> printf("\t\t\t☆ 0、退出(Exit) ☆ \t\t\t");</p><p> printf
76、("\t\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\t\t\t\n");</p><p> printf("請選擇所要執(zhí)行的操作(0/1/2/3/4/5):");</p><p> scanf("%d",&sel);</p><p> switch(sel)</p><p
77、><b> {</b></p><p> case0:printf("\t\t\t^-^再見!^-^ \t\t\t\n");system("pause");break;</p><p> case 1:build();break;</p><p> case 2:printf("最
78、久未使用算\n");LRU();empty();printf("\n");break;</p><p> case 3:printf("先進先出算\n");FIFO();empty();printf("\n");break;</p><p> case 5:printf("先進先出算法\n");F
79、IFO();empty();</p><p> printf("最久未使用算法\n");LRU();empty();break;</p><p> default: printf("請輸入正確的選項號!");printf("\n\n");break;</p><p><b> }</b
80、></p><p> }while(sel!=0);</p><p><b> }</b></p><p><b> 產(chǎn)生的隨機序列:</b></p><p> 最近最少使用算法執(zhí)行結(jié)果如下:</p><p> 先進先出FIFO算法執(zhí)行結(jié)果:</p>
81、;<p> 2.總結(jié)體會請求頁式存儲管理的實現(xiàn)原理。</p><p> 請求頁式管理的基本原理是將邏輯地址空間分成大小相同的頁,將存儲地址空間分塊,頁和塊的大小相等,通過頁表進行管理。頁式系統(tǒng)的邏輯地址分為頁號和頁內(nèi)位移量。頁表包括頁號和塊號數(shù)據(jù)項,它們一一對應(yīng)。根據(jù)邏輯空間的頁號,查找頁表對應(yīng)項找到對應(yīng)的塊號,塊號乘以塊長,加上位移量就行成存儲空間的物理地址。每個作業(yè)的邏輯地址空間是連續(xù)的,重
82、定位到內(nèi)存空間后就不一定連續(xù)了。</p><p> 3. 寫出這三種頁面置換算法的實現(xiàn)思想。</p><p> FIFO算法總是淘汰最先調(diào)入主存的頁面,即淘汰在主存中駐留時間最長的頁面,認為駐留時間最長的頁不再使用的可能性較大。</p><p> LRU算法淘汰的頁面是最近一段時間內(nèi)最久未被訪問的那一頁,它是基于程序局部性原理來考慮的,認為那些剛被使用過的頁面
83、可能還要立即被使用,而那些在較長時間內(nèi)未被使用的頁面可能不會立即使用。</p><p> OPT算法,當要調(diào)入一頁而必須淘汰舊頁時,應(yīng)該淘汰以后不再訪問的頁,或距現(xiàn)在最長時間后要訪問的頁面。</p><p> 4.對不同算法的性能進行評價。</p><p> FIFO算法較易實現(xiàn),對具有線性順序特征的程序比較適用,而對具有其他特征的程序則效率不高,此算法還可能
84、出現(xiàn)抖動現(xiàn)象(Belady)異常。LRU算法基于程序的局部性原理,所以適用用大多數(shù)程序,此算實現(xiàn)必須維護一個特殊的隊列——頁面淘汰隊列。OPT算法雖然產(chǎn)生的缺頁數(shù)最少,然而,卻需要預測程序的頁面引用串,這是無法預知的,不可能對程序的運行過程做出精確的斷言,不過此理論算法可用做衡量各種具體算法的標準。</p><p><b> 五.總結(jié)</b></p><p> 經(jīng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 頁面置換算法操作系統(tǒng)課程設(shè)計
- 頁面置換算法操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)常用頁面置換算法課程設(shè)計
- 請求頁式管理的頁面置換算法
- 操作系統(tǒng)課程設(shè)計---頁面置換算法的模擬
- 操作系統(tǒng)課程設(shè)計--請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計--請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計--請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計-頁面置換算法c語言
- linux操作系統(tǒng)課程設(shè)計--頁面置換算法模擬
- 操作系統(tǒng)課程設(shè)計--頁面置換算法的模擬實現(xiàn)_
- 操作系統(tǒng).課程設(shè)計--頁面置換算法模擬設(shè)計
- 煙臺大學操作系統(tǒng)課程設(shè)計頁面置換算法
- 操作系統(tǒng)課程設(shè)計--模擬請求頁式存儲管理
- 操作系統(tǒng)課程設(shè)計--頁式存儲管理中頁面置換(淘汰)的模擬程序
- 操作系統(tǒng)課程設(shè)計--- 請求調(diào)頁存儲管理
- 操作系統(tǒng)課程設(shè)計報告--頁面置換算法模擬程序設(shè)計
- 操作系統(tǒng)課程設(shè)計報告--頁面置換算法模擬程序設(shè)計
- 頁面置換算法課程設(shè)計
- 操作系統(tǒng)課程設(shè)計--模擬請求頁式管理
評論
0/150
提交評論