版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 老化算法模擬分頁系統(tǒng)</p><p><b> 摘 要</b></p><p> 設計與編寫程序使用老化算法模擬一個分頁系統(tǒng)。頁面訪問序列從文件(文本文件)中讀取。對于一個給定的輸入文件,列出每1000個內(nèi)存訪問中發(fā)生缺頁中斷的數(shù)目。</p><p><b> 目 錄</b></p&g
2、t;<p> 摘要………………………………………………………………I</p><p> 1總體設計………………………………………………………1</p><p> 1.1概要設計………………………………………………………1</p><p> 2 詳細設計………………………………………………………2</p><p> 2.
3、1 模塊設計……………………………………………………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)試與測試……………………………………………………8</p><p> 3.1調(diào)試過程中的問題……………………………
5、…………………8</p><p> 3.2測試結果………………………………………………………9</p><p> 參考文獻 ………………………………………………………10</p><p> 心得體會 ………………………………………………………11</p><p> 教師評語 ………………………………………………………12</p&
6、gt;<p> 附 錄……………………………………………………………13</p><p><b> 1 總體設計</b></p><p><b> 1.1概要設計</b></p><p> 1.編寫一個程序,它使用老化算法模擬一個分頁系統(tǒng)。頁幀的數(shù)量是參數(shù)。頁面的訪問序列從文件中讀取。對于一個給定的
7、輸入文件。列出每1000個內(nèi)存訪問中發(fā)生缺頁中斷的數(shù)目,它是可用頁幀數(shù)的函數(shù)。(教材P141,41題);</p><p> 2.一個簡單的典型測試數(shù)據(jù):</p><p><b> 分配的內(nèi)存幀數(shù):3</b></p><p> 進程頁訪問序列:0、1、2、3、4、1、2、0、1、2、3、4、0、1、2、3;</p><p
8、> 3.程序中相對地址空間為10個頁。程序設計作為參數(shù)輸入,假設頁幀為3塊,初始均為空;程序設計時作為參數(shù)輸入,時鐘周期為10個數(shù);</p><p> 4.按要求設計測試比較更大數(shù)據(jù)量的頁面訪問。</p><p><b> 2 詳細設計</b></p><p><b> 2.1模塊設計</b></p&
9、gt;<p> 整個程序運用老化算法并使用Visual Studio2008開發(fā)平臺。整個程序中分為讀取文件,修改R位,讀取R位,判斷缺頁中斷和主函數(shù)。</p><p> 2.1.1主函數(shù)模塊</p><p> main()程序流程控制和控制時鐘周期以及最終的結果打印。</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> //時鐘周期為10個數(shù)</p><p> if(i%10 == 0){</p><p> printf("灬灬灬灬灬灬灬灬灬灬灬灬灬灬\n");</p><p> printf("\n");</p><p>
13、<b> //寫入計數(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計數(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、讀入的字符逐一進行判斷并修改其對應的R位上的值,當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> //獲取幀對應的R位,并寫入計數(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)每當讀入一個文件首先在frame[4]判斷是否有空位,有則直
23、接補到空位處并引發(fā)缺頁中斷;無則查看計數(shù)器,選擇最小計數(shù)器對應的幀來存放,并同樣引發(fā)缺頁中斷;另外,當此數(shù)在幀內(nèi)存在時,無需做任何操作。</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、這個數(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)無這個
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)計計數(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> //比較計數(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> //輸出當前幀內(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、()每當時鐘周期到時,調(diào)用此函數(shù)將幀frame[4]內(nèi)的值寫入計數(shù)器count[4][row]中,row表示當前處于第幾個時鐘周期。</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> //獲取幀對應的R位,并寫入計數(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)試與測試</b></p><p> 3.1調(diào)試過程中的問題</p><p> 讀取文件時候訪問不了數(shù)據(jù),頁面訪問序列存放到文件data.txt中,該文件放入工程目錄下,然后將文件中的序列讀入一個數(shù)組中。</p><p> 修改R位,每個頁設置一個R位(訪問位),取值為0(表示未訪問),取值為1,當在一個時鐘
38、滴答內(nèi)訪問該頁時,置為1。每個時鐘滴答開始時置所有頁的R位為0。</p><p><b> 3.2測試結果</b></p><p> data.txt中的數(shù)據(jù):</p><p><b> 結果:</b></p><p><b> 參考文獻</b></p>
39、<p> [1]塔嫰鮑姆:《現(xiàn)代操作系統(tǒng)》[M],機械工業(yè)出版社2009.7,第99頁。</p><p> 心 得 體 會</p><p> 每一次課程設計度讓我學到了在平時課堂不可能學到的東西。所以我對每一次課程設計的機會都非常珍惜。不一定我的課程設計能夠完成得有多么完美,但是我總是很投入的去研究去學習。一個多月的實驗就這樣到了尾聲,我想我還學到了一些東西。學習這門
40、課之前不知道上這門課的真正用途在哪里,現(xiàn)在才知道操作系統(tǒng)是那么有用,電腦中一重之重的基礎軟件,當然非常復雜,這次的實驗我是做第三個題目,而這個程序題目要求也并非真正的分頁系統(tǒng),而是模擬老化算法的分頁系統(tǒng),所以做起來難度并非很高。</p><p> 教 師 評 語</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};//計數(shù)器</p><p> staticint count[3][1000]={0};//計數(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> //獲取幀對應的R位,并寫入計數(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)是否有這個數(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)無這個數(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)計計數(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> //比較計數(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> //輸出當前幀內(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> //時鐘周期為10個數(shù)</p><p> if(i%10 == 0){</p><p> printf("灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬\n");</p
63、><p> printf("\n");</p><p><b> //寫入計數(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計數(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設計——操作系統(tǒng)課程設計模擬操作系統(tǒng)
- 操作系統(tǒng)課程設計——進程調(diào)度模擬算法
- 操作系統(tǒng)課程設計——進程調(diào)度模擬算法
- 模擬操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計--模擬操作系統(tǒng)的實現(xiàn)
- 操作系統(tǒng)課程設計-模擬銀行家算法-課程設計
- 操作系統(tǒng)課程設計---模擬銀行家算法
- 操作系統(tǒng)課程設計-- 操作系統(tǒng)
- 操作系統(tǒng)模擬進程課程設計
- 操作系統(tǒng)程序設計課程設計報告-操作系統(tǒng)模擬實現(xiàn)
- 操作系統(tǒng)課程設計--動態(tài)優(yōu)先權算法模擬
- 進程調(diào)度算法 操作系統(tǒng)課程設計
- 動態(tài)優(yōu)先權算法模擬-操作系統(tǒng)課程設計
- linux操作系統(tǒng)課程設計--頁面置換算法模擬
- 操作系統(tǒng)課程設計---頁面置換算法的模擬
- 操作系統(tǒng)課程設計---作業(yè)調(diào)度模擬
- 操作系統(tǒng)課程設計--進程調(diào)度算法
- 操作系統(tǒng)課程設計---磁盤調(diào)度算法
- 操作系統(tǒng)課程設計---進程調(diào)度算法
- 進程調(diào)度算法操作系統(tǒng)課程設計
評論
0/150
提交評論