版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 老化算法模擬分頁系統(tǒng)</p><p><b> 摘 要</b></p><p> 設(shè)計(jì)與編寫程序使用老化算法模擬一個(gè)分頁系統(tǒng)。頁面訪問序列從文件(文本文件)中讀取。對(duì)于一個(gè)給定的輸入文件,列出每1000個(gè)內(nèi)存訪問中發(fā)生缺頁中斷的數(shù)目。</p><p><b> 目 錄</b></p&g
2、t;<p> 摘要………………………………………………………………I</p><p> 1總體設(shè)計(jì)………………………………………………………1</p><p> 1.1概要設(shè)計(jì)………………………………………………………1</p><p> 2 詳細(xì)設(shè)計(jì)………………………………………………………2</p><p> 2.
3、1 模塊設(shè)計(jì)……………………………………………………2</p><p> 2.1.1 主函數(shù)模塊………………………………………………2</p><p> 2.1.2 修改R位模塊……………………………………………3</p><p> 2.1.3 讀取文件模塊……………………………………………3</p><p> 2.1.4 判定缺頁中
4、斷模塊………………………………………4</p><p> 2.1.5 讀取R位模塊……………………………………………6</p><p> 2.2 流程圖………………………………………………………7</p><p> 3 調(diào)試與測(cè)試……………………………………………………8</p><p> 3.1調(diào)試過程中的問題……………………………
5、…………………8</p><p> 3.2測(cè)試結(jié)果………………………………………………………9</p><p> 參考文獻(xiàn) ………………………………………………………10</p><p> 心得體會(huì) ………………………………………………………11</p><p> 教師評(píng)語 ………………………………………………………12</p&
6、gt;<p> 附 錄……………………………………………………………13</p><p><b> 1 總體設(shè)計(jì)</b></p><p><b> 1.1概要設(shè)計(jì)</b></p><p> 1.編寫一個(gè)程序,它使用老化算法模擬一個(gè)分頁系統(tǒng)。頁幀的數(shù)量是參數(shù)。頁面的訪問序列從文件中讀取。對(duì)于一個(gè)給定的
7、輸入文件。列出每1000個(gè)內(nèi)存訪問中發(fā)生缺頁中斷的數(shù)目,它是可用頁幀數(shù)的函數(shù)。(教材P141,41題);</p><p> 2.一個(gè)簡(jiǎn)單的典型測(cè)試數(shù)據(jù):</p><p><b> 分配的內(nèi)存幀數(shù):3</b></p><p> 進(jìn)程頁訪問序列:0、1、2、3、4、1、2、0、1、2、3、4、0、1、2、3;</p><p
8、> 3.程序中相對(duì)地址空間為10個(gè)頁。程序設(shè)計(jì)作為參數(shù)輸入,假設(shè)頁幀為3塊,初始均為空;程序設(shè)計(jì)時(shí)作為參數(shù)輸入,時(shí)鐘周期為10個(gè)數(shù);</p><p> 4.按要求設(shè)計(jì)測(cè)試比較更大數(shù)據(jù)量的頁面訪問。</p><p><b> 2 詳細(xì)設(shè)計(jì)</b></p><p><b> 2.1模塊設(shè)計(jì)</b></p&
9、gt;<p> 整個(gè)程序運(yùn)用老化算法并使用Visual Studio2008開發(fā)平臺(tái)。整個(gè)程序中分為讀取文件,修改R位,讀取R位,判斷缺頁中斷和主函數(shù)。</p><p> 2.1.1主函數(shù)模塊</p><p> main()程序流程控制和控制時(shí)鐘周期以及最終的結(jié)果打印。</p><p> void main(){</p><
10、p> char ch[Size];</p><p><b> read(ch);</b></p><p><b> int i=0;</b></p><p> while('0'<=ch[i] && ch[i]<='9'){</p>&
11、lt;p> printf("%c",ch[i]);</p><p> //寫入幀并判斷缺頁中斷</p><p> dauflt(ch[i]);</p><p><b> //修改R位</b></p><p> change(ch[i]);</p><p><
12、;b> i++;</b></p><p> //時(shí)鐘周期為10個(gè)數(shù)</p><p> if(i%10 == 0){</p><p> printf("灬灬灬灬灬灬灬灬灬灬灬灬灬灬\n");</p><p> printf("\n");</p><p>
13、<b> //寫入計(jì)數(shù)器</b></p><p><b> readch();</b></p><p><b> //清空R位</b></p><p> for(int i=0;i<10;i++)</p><p><b> R[i] = 0;</
14、b></p><p><b> }</b></p><p><b> }</b></p><p> printf("\n計(jì)數(shù)器最終情況:\n");</p><p> for(int j=0;j<row;j++)</p><p><
15、b> {</b></p><p> printf("\t\t");</p><p> for(int k=0;k<5;k++)</p><p> printf("%d",count[k][j]);</p><p> printf("\n");<
16、/p><p><b> }</b></p><p> printf("缺頁中斷數(shù):\t%d\n",fault_num);</p><p><b> }</b></p><p> 2.1.2修改R位模塊</p><p> change(char c)將
17、讀入的字符逐一進(jìn)行判斷并修改其對(duì)應(yīng)的R位上的值,當(dāng)R位上為0則改為1,1則無需做任何修改。</p><p><b> //讀取R位</b></p><p> void readch(){</p><p><b> char ch;</b></p><p> for(int i=0;i<
18、;5;i++){</p><p> ch = frame[i];</p><p> //獲取幀對(duì)應(yīng)的R位,并寫入計(jì)數(shù)器</p><p> count[i][row] = R[ch-48];</p><p><b> }</b></p><p><b> row++;</b
19、></p><p><b> }</b></p><p> 2.1.3讀取文件模塊</p><p> read(char ch[])判斷文件是否存在,并將data.txt的內(nèi)容讀取到字符數(shù)組ch[]中。</p><p><b> //讀取文件內(nèi)容</b></p><
20、p> void read(char ch[])</p><p><b> {</b></p><p><b> int i=0;</b></p><p> file=fopen("date.txt","rb");</p><p> if(fi
21、le==NULL)</p><p> printf("can not open the date.txt file");</p><p> while(!(feof(file)))</p><p> {ch[i]=getc(file);</p><p><b> i++; </b></
22、p><p><b> }</b></p><p> fclose(file);</p><p><b> }</b></p><p> 2.1.4判定缺頁中斷模塊</p><p> dauflt(char c)每當(dāng)讀入一個(gè)文件首先在frame[4]判斷是否有空位,有則直
23、接補(bǔ)到空位處并引發(fā)缺頁中斷;無則查看計(jì)數(shù)器,選擇最小計(jì)數(shù)器對(duì)應(yīng)的幀來存放,并同樣引發(fā)缺頁中斷;另外,當(dāng)此數(shù)在幀內(nèi)存在時(shí),無需做任何操作。</p><p><b> //判斷缺頁中斷</b></p><p> void dauflt(char c){</p><p> int h = 0;</p><p> int
24、 min = 0;</p><p> int counts[3] = {0};</p><p><b> //判斷是否有空位</b></p><p> for(h=0;h<3;h++){</p><p> if(frame[h] == c)</p><p><b> br
25、eak;</b></p><p> if(0>frame[h] || frame[h]<9){</p><p> frame[h] = c;</p><p> fault_num ++;</p><p> printf("丨");</p><p><b>
26、 break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> //無空位的情況</b></p><p> if(h == 3){</p><p> //判斷幀內(nèi)是否有
27、這個(gè)數(shù)</p><p> for(int p=0;p<3;p++){</p><p> if(frame[p] == c)</p><p><b> break;</b></p><p><b> }</b></p><p><b> //幀內(nèi)無這個(gè)
28、數(shù)</b></p><p> if(p == 3){</p><p><b> //發(fā)生缺頁中斷</b></p><p> fault_num ++;</p><p> printf("丨");</p><p><b> //統(tǒng)計(jì)計(jì)數(shù)器</
29、b></p><p> for(int k=0;k<3;k++){</p><p> for(int j=0;j<row;j++){</p><p> counts[k] += count[k][j];</p><p><b> }</b></p><p><b&g
30、t; }</b></p><p> //比較計(jì)數(shù)器,選擇最小器</p><p> int minlin = counts[0];</p><p> for(int j=1;j<3;j++){</p><p> if(minlin > counts[j]){</p><p><b
31、> min = j;</b></p><p> minlin = counts[j];</p><p><b> }</b></p><p><b> }</b></p><p> frame[min] = c;</p><p><b>
32、; }</b></p><p><b> }</b></p><p> //輸出當(dāng)前幀內(nèi)情況</p><p> printf("\t幀內(nèi)情況:");</p><p> for(int z=0;z<3;z++){</p><p> printf(&q
33、uot;%c\t",frame[z]);</p><p><b> }</b></p><p> printf("\n");</p><p><b> }</b></p><p> 2.1.5讀取R位模塊</p><p> readch
34、()每當(dāng)時(shí)鐘周期到時(shí),調(diào)用此函數(shù)將幀frame[4]內(nèi)的值寫入計(jì)數(shù)器count[4][row]中,row表示當(dāng)前處于第幾個(gè)時(shí)鐘周期。</p><p><b> //讀取R位</b></p><p> void readch(){</p><p><b> char ch;</b></p><p&
35、gt; for(int i=0;i<3;i++){</p><p> ch = frame[i];</p><p> //獲取幀對(duì)應(yīng)的R位,并寫入計(jì)數(shù)器</p><p> count[i][row] = R[ch-48];</p><p><b> }</b></p><p>&l
36、t;b> row++;</b></p><p><b> }2.2流程圖</b></p><p><b> 不成功</b></p><p><b> 成</b></p><p><b> 功</b></p><
37、;p><b> 3 調(diào)試與測(cè)試</b></p><p> 3.1調(diào)試過程中的問題</p><p> 讀取文件時(shí)候訪問不了數(shù)據(jù),頁面訪問序列存放到文件data.txt中,該文件放入工程目錄下,然后將文件中的序列讀入一個(gè)數(shù)組中。</p><p> 修改R位,每個(gè)頁設(shè)置一個(gè)R位(訪問位),取值為0(表示未訪問),取值為1,當(dāng)在一個(gè)時(shí)鐘
38、滴答內(nèi)訪問該頁時(shí),置為1。每個(gè)時(shí)鐘滴答開始時(shí)置所有頁的R位為0。</p><p><b> 3.2測(cè)試結(jié)果</b></p><p> data.txt中的數(shù)據(jù):</p><p><b> 結(jié)果:</b></p><p><b> 參考文獻(xiàn)</b></p>
39、<p> [1]塔嫰鮑姆:《現(xiàn)代操作系統(tǒng)》[M],機(jī)械工業(yè)出版社2009.7,第99頁。</p><p> 心 得 體 會(huì)</p><p> 每一次課程設(shè)計(jì)度讓我學(xué)到了在平時(shí)課堂不可能學(xué)到的東西。所以我對(duì)每一次課程設(shè)計(jì)的機(jī)會(huì)都非常珍惜。不一定我的課程設(shè)計(jì)能夠完成得有多么完美,但是我總是很投入的去研究去學(xué)習(xí)。一個(gè)多月的實(shí)驗(yàn)就這樣到了尾聲,我想我還學(xué)到了一些東西。學(xué)習(xí)這門
40、課之前不知道上這門課的真正用途在哪里,現(xiàn)在才知道操作系統(tǒng)是那么有用,電腦中一重之重的基礎(chǔ)軟件,當(dāng)然非常復(fù)雜,這次的實(shí)驗(yàn)我是做第三個(gè)題目,而這個(gè)程序題目要求也并非真正的分頁系統(tǒng),而是模擬老化算法的分頁系統(tǒng),所以做起來難度并非很高。</p><p> 教 師 評(píng) 語</p><p> #include <stdio.h></p><p> #in
41、clude <stdlib.h></p><p> #include <string.h></p><p> FILE *file;</p><p> #define Size 1000</p><p> #define Num 10//缺頁中斷數(shù)</p><p> static i
42、nt fault_num = 0;//幀</p><p> staticchar frame[3];//訪問位</p><p> staticint R[10]={0};//計(jì)數(shù)器</p><p> staticint count[3][1000]={0};//計(jì)數(shù)器的列數(shù)</p><p> staticint row
43、=0;</p><p><b> //讀取文件內(nèi)容</b></p><p> void read(char ch[])</p><p><b> {</b></p><p><b> int i=0;</b></p><p> file=fo
44、pen("date.txt","rb");</p><p> if(file==NULL)</p><p> printf("can not open the date.txt file");</p><p> while(!(feof(file)))</p><p> {
45、ch[i]=getc(file);</p><p><b> i++; </b></p><p><b> }</b></p><p> fclose(file);</p><p><b> }</b></p><p><b> //
46、修改R位</b></p><p> void change(char c){</p><p> for(int i=0;i<10;i++){</p><p><b> i+= 48;</b></p><p> if(c == i)</p><p> R[i-48] =
47、1;</p><p><b> i-=48;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> //讀取R位</b></p><p> void readch()
48、{</p><p><b> char ch;</b></p><p> for(int i=0;i<3;i++){</p><p> ch = frame[i];</p><p> //獲取幀對(duì)應(yīng)的R位,并寫入計(jì)數(shù)器</p><p> count[i][row] = R[ch-
49、48];</p><p><b> }</b></p><p><b> row++;</b></p><p><b> }</b></p><p><b> //判斷缺頁中斷</b></p><p> void dauf
50、lt(char c){</p><p> int h = 0;</p><p> int min = 0;</p><p> int counts[3] = {0};</p><p><b> //判斷是否有空位</b></p><p> for(h=0;h<3;h++){<
51、/p><p> if(frame[h] == c)</p><p><b> break;</b></p><p> if(0>frame[h] || frame[h]<9){</p><p> frame[h] = c;</p><p> fault_num ++;</p
52、><p> printf("丨");</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> //無空位的情況</b
53、></p><p> if(h == 3){</p><p> //判斷幀內(nèi)是否有這個(gè)數(shù)</p><p> for(int p=0;p<3;p++){</p><p> if(frame[p] == c)</p><p><b> break;</b></p>
54、<p><b> }</b></p><p><b> //幀內(nèi)無這個(gè)數(shù)</b></p><p> if(p == 3){</p><p><b> //發(fā)生缺頁中斷</b></p><p> fault_num ++;</p><p&g
55、t; printf("丨");</p><p><b> //統(tǒng)計(jì)計(jì)數(shù)器</b></p><p> for(int k=0;k<3;k++){</p><p> for(int j=0;j<row;j++){</p><p> counts[k] += count[k][j];&
56、lt;/p><p><b> }</b></p><p><b> }</b></p><p> //比較計(jì)數(shù)器,選擇最小器</p><p> int minlin = counts[0];</p><p> for(int j=1;j<3;j++){</
57、p><p> if(minlin > counts[j]){</p><p><b> min = j;</b></p><p> minlin = counts[j];</p><p><b> }</b></p><p><b> }</b&
58、gt;</p><p> frame[min] = c;</p><p><b> }</b></p><p><b> }</b></p><p> //輸出當(dāng)前幀內(nèi)情況</p><p> printf("\t幀內(nèi)情況:");</p>
59、;<p> for(int z=0;z<3;z++){</p><p> printf("%c\t",frame[z]);</p><p><b> }</b></p><p> printf("\n");</p><p><b> }<
60、;/b></p><p> void main(){</p><p> char ch[Size];</p><p><b> read(ch);</b></p><p><b> int i=0;</b></p><p> while('0'
61、<=ch[i] && ch[i]<='9'){</p><p> printf("%c",ch[i]);</p><p> //寫入幀并判斷缺頁中斷</p><p> dauflt(ch[i]);</p><p><b> //修改R位</b><
62、;/p><p> change(ch[i]);</p><p><b> i++;</b></p><p> //時(shí)鐘周期為10個(gè)數(shù)</p><p> if(i%10 == 0){</p><p> printf("灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬\n");</p
63、><p> printf("\n");</p><p><b> //寫入計(jì)數(shù)器</b></p><p><b> readch();</b></p><p><b> //清空R位</b></p><p> for(int i
64、=0;i<10;i++)</p><p><b> R[i] = 0;</b></p><p><b> }</b></p><p><b> }</b></p><p> printf("\n計(jì)數(shù)器最終情況:");</p>&l
65、t;p> for(int j=0;j<row;j++)</p><p><b> {</b></p><p> for(int k=0;k<3;k++)</p><p> printf("%d",count[k][j]);</p><p> printf("\n&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)——操作系統(tǒng)課程設(shè)計(jì)模擬操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)——進(jìn)程調(diào)度模擬算法
- 操作系統(tǒng)課程設(shè)計(jì)——進(jìn)程調(diào)度模擬算法
- 模擬操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--模擬操作系統(tǒng)的實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)-模擬銀行家算法-課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)---模擬銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)-- 操作系統(tǒng)
- 操作系統(tǒng)模擬進(jìn)程課程設(shè)計(jì)
- 操作系統(tǒng)程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告-操作系統(tǒng)模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)--動(dòng)態(tài)優(yōu)先權(quán)算法模擬
- 進(jìn)程調(diào)度算法 操作系統(tǒng)課程設(shè)計(jì)
- 動(dòng)態(tài)優(yōu)先權(quán)算法模擬-操作系統(tǒng)課程設(shè)計(jì)
- linux操作系統(tǒng)課程設(shè)計(jì)--頁面置換算法模擬
- 操作系統(tǒng)課程設(shè)計(jì)---頁面置換算法的模擬
- 操作系統(tǒng)課程設(shè)計(jì)---作業(yè)調(diào)度模擬
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度算法
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論