版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 物理與電子信息工程學(xué)院</p><p> 《操作系統(tǒng)》課程設(shè)計報告</p><p><b> 題目:</b></p><p> 1、 進(jìn)程調(diào)度算法 </p><p> 2、 頁面淘汰算法 </p>&l
2、t;p><b> 小組成員:</b></p><p> 1、 汪振昊 </p><p> 2、 鄭云紅 </p><p><b> 班級信息:</b></p><p> 班級:
3、 10計本 </p><p> 完成日期: </p><p> 指導(dǎo)教師: 曾令華 </p><p><b> 目 錄</b></p><p><b> 操作系統(tǒng)課程設(shè)
4、計</b></p><p> 操作系統(tǒng)課程設(shè)計宗旨</p><p><b> 課程目的</b></p><p><b> 頁面置換算法</b></p><p><b> 目的</b></p><p><b> 背景<
5、/b></p><p><b> 常見的頁面置換算法</b></p><p><b> 設(shè)計思想</b></p><p><b> 頁面置換算法流程圖</b></p><p> 1、頁面置換算法實(shí)現(xiàn)流程圖</p><p> 頁面置換算法代
6、碼運(yùn)行結(jié)果</p><p><b> 采用隨機(jī)數(shù)產(chǎn)生結(jié)果</b></p><p> 采用自定義頁面信息產(chǎn)生結(jié)果</p><p><b> 進(jìn)程調(diào)度算法實(shí)現(xiàn)</b></p><p><b> 目的</b></p><p><b> 設(shè)計
7、思想</b></p><p><b> 可行性分析</b></p><p><b> 進(jìn)程調(diào)度算法流程圖</b></p><p><b> 1、主流程圖</b></p><p> 進(jìn)程調(diào)度算法執(zhí)行結(jié)果</p><p><b>
8、; 先來先服務(wù)算法</b></p><p><b> 優(yōu)先級算法</b></p><p><b> 頁面置換算法源代碼</b></p><p><b> 進(jìn)程調(diào)度算法源代碼</b></p><p> 一、操作系統(tǒng)課程設(shè)計</p><p&
9、gt; 操作系統(tǒng)課程設(shè)計宗旨</p><p> 為了更好的幫助我們同學(xué)進(jìn)一步加深對計算機(jī)操作系統(tǒng)的掌握與理解,學(xué)校給計本班開設(shè)了操作系統(tǒng)這門課程。幫助我們進(jìn)一步了解并鞏固了計算機(jī)操作系統(tǒng)的一些有關(guān)進(jìn)程調(diào)度,頁面置換,文件處理等方面的知識。</p><p><b> 課程目的</b></p><p> 利用簡單的數(shù)據(jù)結(jié)構(gòu),模擬操作系統(tǒng)中的
10、一些有關(guān)文件操作,進(jìn)程調(diào)度,頁面置換。</p><p> 二、頁面置換算法實(shí)現(xiàn)</p><p><b> 目的</b></p><p> 利用簡單的數(shù)據(jù)結(jié)構(gòu),模擬實(shí)現(xiàn)操作系統(tǒng)中的頁面置換機(jī)制</p><p> 1、用C語言編寫OPT、FIFO、LRU三種置換算法。</p><p> 2、
11、熟悉內(nèi)存分頁管理策略。</p><p> 3、了解頁面置換的算法。</p><p> 4、掌握一般常用的調(diào)度算法。</p><p> 5、根據(jù)方案使算法得以模擬實(shí)現(xiàn)。</p><p> 6、鍛煉知識的運(yùn)用能力和實(shí)踐能力。</p><p><b> 背景</b></p>&l
12、t;p> 在操作系統(tǒng)當(dāng)中,在進(jìn)程運(yùn)行過程中,若其訪問的頁面不在內(nèi)存中而需把他們調(diào)入內(nèi)存,但內(nèi)存已無空閑空間時,為了保證該進(jìn)程能夠正常的運(yùn)行,系統(tǒng)必須從內(nèi)存中調(diào)出一頁程序或數(shù)據(jù)送到磁盤的兌換區(qū)中,但是應(yīng)該是哪個頁面被調(diào)出,需根據(jù)一定的算法來確定。通常,我們把這一類的算法稱為“頁面置換算法”,頁面置換算法執(zhí)行效率的高低,往往直接影響到操作系統(tǒng)的性能。</p><p><b> 常見頁面置換算法&l
13、t;/b></p><p> 先進(jìn)先出算法(FIFO)</p><p> 這是最早出現(xiàn)的置換算法,該算法總是淘汰最先進(jìn)入內(nèi)存的頁面,即選擇在內(nèi)存中駐留時間最長的頁面換出,該算法實(shí)現(xiàn)簡單。</p><p> 最近最久未使用(LRU)</p><p> 最近最久未使用的置換算法,是根據(jù)頁面調(diào)入內(nèi)存后的使用情況卻決策的,由于無法預(yù)測個
14、頁面將來的使用情況,只能根據(jù)“最近的過去”作為“最近的將來”的近似,因此,最近最久未使用(LRU)算法是選擇最近的最久未使用的頁面予以淘汰。</p><p> 最佳置換算法(OPT)</p><p> 最佳置換算法是可以說的一種理想的頁面置換算法,其所淘汰的頁面是將來不會被使用的或者是在最長的未來不會被使用的頁面。采用最佳置換算法,可以獲得最小的缺頁率</p><p
15、><b> 設(shè)計思想</b></p><p> 最佳置換算法(OPT)</p><p> 用數(shù)組Temppages[]存儲當(dāng)前物理塊中頁面信息,數(shù)組TimeArry[]存儲當(dāng)前在物理塊中的頁面的獲得內(nèi)存時的時間,當(dāng)頁面不在內(nèi)存中時,根據(jù)當(dāng)前已獲得物理塊數(shù)的頁面在所有的頁面當(dāng)中將來不在請求內(nèi)存或者很少請求內(nèi)存的情況進(jìn)行置換</p><p&
16、gt; 先進(jìn)先出算法(FIFO)</p><p> 用數(shù)組Temppages[]存儲當(dāng)前物理塊中頁面信息,變量temp記錄內(nèi)存中物理塊頁面置換狀態(tài),每進(jìn)行一次置換,頁面置換狀態(tài)變化,便于下一次的置換。</p><p> 最近最久未使用算法(LRU)</p><p> 用數(shù)組Temppages[]存儲當(dāng)前物理塊中頁面信息,數(shù)組TimeArry[]存儲當(dāng)前在物理
17、塊中的頁面的獲得內(nèi)存時的時間,當(dāng)頁面不在內(nèi)存中時,選擇TimeArry[]數(shù)組中值最小并且對應(yīng)物理塊中的頁面進(jìn)行置換。</p><p> 三、頁面置換算法流程圖</p><p> 1、頁面置換算法實(shí)現(xiàn)流程圖</p><p> 四、頁面置換算法代碼運(yùn)行結(jié)果</p><p> 采用隨機(jī)數(shù)產(chǎn)生的結(jié)果</p><p>
18、 2、采用自定義頁面信息產(chǎn)生結(jié)果</p><p> 自定義頁面數(shù)為:20 物理塊數(shù)為:3</p><p> 頁面序列為:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1</p><p> 五、進(jìn)程調(diào)度算法實(shí)現(xiàn)</p><p><b> 1、目的</b></p><
19、;p> 在多道程序運(yùn)行環(huán)境下,進(jìn)程數(shù)目一般多于處理機(jī)數(shù)目,使得進(jìn)程要通過競爭來使用處理機(jī)。這就要求系統(tǒng)能按某種算法,動態(tài)地把處理機(jī)分配給就緒隊列中的一個進(jìn)程,使之運(yùn)行,分配處理機(jī)的任務(wù)是由進(jìn)程調(diào)度程序完成的。一個進(jìn)程被創(chuàng)建后,系統(tǒng)為了便于對進(jìn)程進(jìn)行管理,將系統(tǒng)中的所有進(jìn)程按其狀態(tài),將其組織成不同的進(jìn)程隊列。于是系統(tǒng)中有運(yùn)行進(jìn)程隊列、就緒隊列和各種事件的進(jìn)程等待隊列。進(jìn)程調(diào)度的功能就是從就緒隊列中挑選一個進(jìn)程到處理機(jī)上運(yùn)行。進(jìn)程調(diào)
20、度的算法有多種,常用的有優(yōu)先級調(diào)度算法、先來先服務(wù)算法、時間片輪轉(zhuǎn)算法。這里我們主要實(shí)現(xiàn)的是先來先服務(wù)算法和優(yōu)先級調(diào)度算法。</p><p><b> 設(shè)計思想</b></p><p> 對于先到先服務(wù)算法,只需要給定每個進(jìn)程的進(jìn)程號,然后依次順序執(zhí)行就可以了。</p><p> 對于優(yōu)先度調(diào)度算法,需要先判斷優(yōu)先度的大小,優(yōu)先度最大的先
21、執(zhí)行,進(jìn)程運(yùn)行完畢以后,按照優(yōu)先數(shù)的改變的原則進(jìn)行改變,然后繼續(xù)判斷所有的優(yōu)先數(shù)的大小,依舊是優(yōu)先數(shù)最大的先執(zhí)行,直到執(zhí)行完畢。</p><p><b> 可行性分析</b></p><p> 設(shè)計一個結(jié)構(gòu)體,用于抽象進(jìn)程的各種屬性,其中包括進(jìn)程標(biāo)志符,進(jìn)程優(yōu)先級,cpu時間統(tǒng)計,運(yùn)行所需時間,進(jìn)程狀態(tài)。</p><p> 再設(shè)計一個結(jié)構(gòu)
22、體,用于模擬就緒隊列,其具體方法采用鏈表形式。</p><p> 對于先到先服務(wù)算法,判斷就緒隊列中每個進(jìn)程的進(jìn)程號,根據(jù)進(jìn)程號的順序依次給進(jìn)程分配CPU,直到所有進(jìn)程執(zhí)行完畢為止</p><p> 對于優(yōu)先度調(diào)度算法,首先根據(jù)所有進(jìn)程的有限度,依次按照其優(yōu)先度的大小按照降序排序的方式依次插入就緒隊列,每當(dāng)一個進(jìn)程獲得CPU并執(zhí)行時,優(yōu)先級降低2,每運(yùn)行一次 CPU時間增加4,當(dāng)所獲得
23、的CPU時間大于或者等于其所需的CPU時間時,進(jìn)程執(zhí)行完畢,否則變換就緒隊列中進(jìn)程順序,使之保持進(jìn)程優(yōu)先級按降序排序。</p><p> 每個進(jìn)程獲得CPU時間并執(zhí)行完畢之后,打印出進(jìn)程隊列中的信息,以便查看就緒隊列中的進(jìn)程信息。</p><p> 六、進(jìn)程調(diào)度算法流程圖</p><p><b> 1、主流程圖</b></p>
24、<p> 七、進(jìn)程調(diào)度算法執(zhí)行結(jié)果</p><p><b> 1、先來先服務(wù)算法</b></p><p><b> 優(yōu)先級算法</b></p><p> 八、頁面淘汰算法源代碼</p><p> #include <stdio.h></p><
25、p> #include <stdlib.h></p><p> #include <time.h></p><p> #define M_size 100</p><p> int pageNum = 0;///全局變量頁面數(shù)</p><p> int pages[M_size];///存儲頁號<
26、/p><p> int Temppages[M_size];///輔助數(shù)組</p><p> int TimeArry[M_size];//記錄頁在內(nèi)存中的時間</p><p> int method;///產(chǎn)生結(jié)果的方法</p><p> int AlgorithmStyle; //輔助變量,用于選擇算法類型</p>&l
27、t;p> int Block;//記錄物理塊數(shù)</p><p> int start;//輔助變量</p><p> void Inition()//初始化函數(shù)</p><p><b> {</b></p><p><b> int i;</b></p><p&g
28、t; int t = time(NULL);///產(chǎn)生隨機(jī)數(shù)種子</p><p> srand(t);///用t初始化隨機(jī)數(shù)種子</p><p> pageNum = rand()%10+8;///隨機(jī)產(chǎn)生4-14之內(nèi)的整數(shù),保證頁面數(shù)在4-14之內(nèi)</p><p> for(i = 0 ; i < pageNum ; i++)</p>
29、<p><b> {</b></p><p> pages[i] = rand()%10+1;///初始化頁號,初始值在1-10之內(nèi)</p><p><b> }</b></p><p> Block = 4;//初始化物理塊數(shù)位3</p><p><b> }<
30、/b></p><p> void printDefaltResult()///缺省參數(shù)顯示</p><p><b> {</b></p><p><b> int i;</b></p><p> printf("缺省頁面數(shù)為: %d\n",pageNum);&
31、lt;/p><p> printf("缺省頁號分別為: ");</p><p> for(i = 0 ; i < pageNum ; i++)</p><p><b> {</b></p><p> printf("%d ",pages[i]);</p>
32、;<p><b> }</b></p><p> printf("\n");</p><p> printf("可用物理塊數(shù)為: %d\n",Block);</p><p> printf("按任意鍵繼續(xù):");</p><p> ge
33、tchar();</p><p><b> }</b></p><p> void PrintCustomInfo()//顯示用戶自定義參數(shù)</p><p><b> {</b></p><p><b> int i;</b></p><p>
34、 printf("自定義頁面數(shù)為: %d\n",pageNum);</p><p> printf("自定義頁號分別為: ");</p><p> for(i = 0 ; i < pageNum ; i++)</p><p><b> {</b></p><p&g
35、t; printf("%d ",pages[i]);</p><p><b> }</b></p><p> printf("\n");</p><p> printf("可用物理塊數(shù)為: %d\n",Block);</p><p> printf
36、("按任意鍵繼續(xù):\n");</p><p> getchar();</p><p><b> }</b></p><p> void printUserInfo()///顯示個人信息</p><p><b> {</b></p><p> sy
37、stem("color 0D");</p><p> printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");</p><p> printf("┃ 課程設(shè)計最終稿:頁面置換算法 ┃\n");</p><p> printf("
38、┃ 學(xué)號:10110013347 ┃\n");</p><p> printf("┃ 班級: 10計本 ┃\n");</p><p> printf("┃ 姓名:鄭云紅 <Visu
39、al C++ 6.0> ┃\n");</p><p> printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");</p><p> printf("按任意鍵開始操作:");</p><p> getchar();</p><p> system(&
40、quot;cls");</p><p> system("color 0B");</p><p><b> }</b></p><p> void ChioceDealmethod()//選擇解決問題的方法“1”選擇缺省值,“2”選擇自定義值</p><p><b> {&
41、lt;/b></p><p> printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");</p><p> printf("┃使用默認(rèn)值產(chǎn)生結(jié)果請選擇:1,自定義頁數(shù)和頁號請選擇:2... ┃\n");</p><p> printf("┗━━━━━━━━━━━━━━━━━
42、━━━━━━━━━━━━┛\n");</p><p> scanf("%d",&method);</p><p> system("color 0F");</p><p><b> }</b></p><p> void PrintNotWithoutPa
43、ges()//顯示一定不用換頁的部分</p><p><b> {</b></p><p> start = Block;</p><p> int i,j,k=0,key = 0;</p><p> for(i = 0 ; i < start ; i++)</p><p><
44、b> {</b></p><p> int flag = 0;</p><p> for(j = 0 ; j <= i-1 ; j++)</p><p><b> {</b></p><p> if(Temppages[j] == pages[i])</p><p&g
45、t;<b> {</b></p><p> TimeArry[j] = i;</p><p><b> flag = 1;</b></p><p> start = start+1;</p><p><b> key++;</b></p><p&g
46、t;<b> }</b></p><p><b> }</b></p><p> if(flag == 0)</p><p><b> {</b></p><p> TimeArry[k] = i;</p><p> Temppages[k]
47、 = pages[i];</p><p><b> k++;</b></p><p> for(j = 0 ; j <= i-key ; j++)</p><p><b> {</b></p><p> printf(" %-7d",Temppages[j]);&
48、lt;/p><p><b> }</b></p><p> printf("\n");</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b><
49、;/p><p> void PrintResult()//顯示每次換頁后的結(jié)果</p><p><b> {</b></p><p><b> int i;</b></p><p> for(i = 0 ; i < Block ; i++)</p><p><
50、b> {</b></p><p> printf(" %-7d",Temppages[i]);</p><p><b> }</b></p><p> printf("\n");</p><p><b> }</b></p&
51、gt;<p> void FIFODealQuestion()//先進(jìn)先出算法</p><p><b> {</b></p><p><b> int i,j;</b></p><p> int WithOutPages = 0;//記錄缺頁數(shù)</p><p> printf
52、("FIFO(先進(jìn)先出算法)結(jié)果顯示:\n");</p><p> PrintNotWithoutPages();</p><p> int temp = 0;</p><p> for(i = start ; i < pageNum ; i++)</p><p><b> {</b>&
53、lt;/p><p> if(temp == Block)</p><p><b> {</b></p><p><b> temp = 0;</b></p><p><b> }</b></p><p> int key = 0 ;</p&g
54、t;<p> for(j = 0 ; j < Block ; j++)//判斷該頁是否在物理塊中</p><p><b> {</b></p><p> if(Temppages[j] == pages[i])</p><p><b> {</b></p><p><
55、;b> key = 1;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(key == 0)//如果不在</p><p&g
56、t;<b> {</b></p><p> Temppages[temp] = pages[i];</p><p><b> temp++;</b></p><p> WithOutPages++;</p><p> PrintResult();</p><p>&
57、lt;b> }</b></p><p><b> }</b></p><p> printf("置換次數(shù)為: %d ,頁面總數(shù)為: %d ,置換率為: ",WithOutPages,pageNum);</p><p> double re = ((double)WithOutPages)/
58、((double)pageNum);</p><p> printf("%.2lf\n",re);</p><p> printf("缺頁次數(shù)為: %d ,頁面總數(shù)為: %d ,缺頁率為: ",WithOutPages+Block,pageNum);</p><p> re = ((double)(WithOu
59、tPages+Block))/((double)pageNum);</p><p> printf("%.2lf\n",re);</p><p><b> }</b></p><p> void LRUDealQuestion()//最近最久未使用算法</p><p><b> {&
60、lt;/b></p><p><b> int i,j;</b></p><p> int WithOutPages = 0;//記錄缺頁數(shù)</p><p> printf("LRU(最近最久未使用算法)結(jié)果顯示:\n");</p><p> PrintNotWithoutPages()
61、;</p><p> for(i = start ; i < pageNum; i++)</p><p><b> {</b></p><p> int key = 0;</p><p> for(j = 0 ; j < Block ; j++)//判斷該頁是否在物理塊中</p><
62、;p><b> {</b></p><p> if(Temppages[j] == pages[i])</p><p><b> {</b></p><p><b> key = 1;</b></p><p> TimeArry[j] = i;//更新時間<
63、;/p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(key == 0)//若該頁不在內(nèi)存中</p><p><b> {</b>&
64、lt;/p><p> WithOutPages++;</p><p> int min = TimeArry[0];</p><p> int flag = 0;</p><p> for(j = 1 ; j < Block ; j++)</p><p><b> {</b></
65、p><p> if(min > TimeArry[j])</p><p><b> {</b></p><p> min = TimeArry[j];//找到最久的頁面</p><p><b> flag = j;</b></p><p><b> }&
66、lt;/b></p><p><b> }</b></p><p> TimeArry[flag] = i;//記錄時間</p><p> Temppages[flag] = pages[i];</p><p> PrintResult();</p><p><b> }
67、</b></p><p><b> }</b></p><p> printf("置換次數(shù)為: %d ,頁面總數(shù)為: %d ,置換率為: ",WithOutPages,pageNum);</p><p> double re = ((double)WithOutPages)/((double)pa
68、geNum);</p><p> printf("%.2lf\n",re);</p><p> printf("缺頁次數(shù)為: %d ,頁面總數(shù)為: %d ,缺頁率為: ",WithOutPages+Block,pageNum);</p><p> re = ((double)(WithOutPages+Bloc
69、k))/((double)pageNum);</p><p> printf("%.2lf\n",re);</p><p><b> }</b></p><p> void OPTDealQuestion()</p><p><b> {</b></p>&
70、lt;p> int i,j,l;</p><p> int WithOutPages = 0;//記錄缺頁數(shù)</p><p> printf("OPT(最佳置換算法)結(jié)果顯示:\n");</p><p> PrintNotWithoutPages();</p><p> for(i = start ; i&
71、lt;pageNum ; i++)</p><p><b> {</b></p><p> int key = 0;</p><p> for(j = 0 ; j < Block ; j++ )//判斷該頁是否在內(nèi)存中</p><p><b> {</b></p><
72、;p> if(Temppages[j]==pages[i])</p><p><b> {</b></p><p> TimeArry[j] = i;</p><p><b> key = 1;</b></p><p><b> break;</b></p
73、><p><b> }</b></p><p><b> }</b></p><p> if(key == 0)//如果該頁不在內(nèi)存中</p><p><b> {</b></p><p> WithOutPages++;//缺頁數(shù)加1</p
74、><p> //得到各物理塊下一次訪問的時間</p><p> for(j = 0 ; j < Block ; j++)</p><p><b> {</b></p><p> for(l = i+1; l < pageNum ; l++)</p><p><b> {
75、</b></p><p> if(Temppages[j]==pages[l])</p><p><b> {</b></p><p><b> break;</b></p><p><b> }</b></p><p><b&
76、gt; }</b></p><p> TimeArry[j] = l;</p><p><b> }</b></p><p> //得到下一次訪問時間最長的一個頁面,將當(dāng)前頁與其換掉</p><p> int min = TimeArry[0];</p><p> int
77、flag = 0;</p><p> for(j = 1 ; j < Block ; j++)</p><p><b> {</b></p><p> if(TimeArry[j] > min)</p><p><b> {</b></p><p> m
78、in = TimeArry[j];</p><p><b> flag = j;</b></p><p><b> }</b></p><p><b> }</b></p><p> Temppages[flag] = pages[i];</p><
79、p> TimeArry[flag] = i;</p><p> PrintResult();</p><p><b> }</b></p><p><b> }</b></p><p> printf("置換次數(shù)為: %d ,頁面總數(shù)為: %d ,置換率為: &q
80、uot;,WithOutPages,pageNum);</p><p> double re = ((double)WithOutPages)/((double)pageNum);</p><p> printf("%.2lf\n",re);</p><p> printf("缺頁次數(shù)為: %d ,頁面總數(shù)為: %d ,缺
81、頁率為: ",WithOutPages+Block,pageNum);</p><p> re = ((double)(WithOutPages+Block))/((double)pageNum);</p><p> printf("%.2lf\n",re);</p><p><b> }</b></
82、p><p> void ChioceAlgorithm(int AlgorithmStyle)</p><p><b> {</b></p><p> switch(AlgorithmStyle)</p><p><b> {</b></p><p><b>
83、 case 1:</b></p><p> FIFODealQuestion();//先進(jìn)先出算法解決問題</p><p><b> break;</b></p><p><b> case 2:</b></p><p> LRUDealQuestion();//最近最久未使用算
84、法解決問題</p><p><b> break;</b></p><p><b> case 3:</b></p><p> OPTDealQuestion();//最佳置換算法解決問題</p><p><b> break;</b></p><p
85、><b> case 4:</b></p><p> FIFODealQuestion();//先進(jìn)先出算法解決問題</p><p> LRUDealQuestion();//最近最久未使用算法解決問題</p><p> OPTDealQuestion();//最佳置換算法解決問題</p><p><
86、b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> void DefaltDeal()//默認(rèn)解決</p><p><b> {</b></p><p>
87、 printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");</p><p> printf("┃請選擇算法:1為FIFO(先進(jìn)先出) 2為LRU(最近最久未使用) 3為OPT(最佳置換算法)┃\n");</p><p> printf("┃ 4三種算法一起實(shí)現(xiàn)
88、 ┃\n");</p><p> printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");</p><p> scanf("%d",&AlgorithmStyle);</p><p
89、> ChioceAlgorithm(AlgorithmStyle);</p><p><b> }</b></p><p> void CustomDeal()//自定義解決</p><p><b> {</b></p><p><b> int i;</b>&
90、lt;/p><p> system("cls");</p><p> printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");</p><p> printf("┃ 自定義頁面數(shù)和頁號
91、 ┃\n");</p><p> printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");</p><p> printf("請輸入頁面數(shù):");</p><p> scanf("%d",&pageNum);&l
92、t;/p><p> printf("請輸入頁號:");</p><p> for(i = 0 ; i < pageNum ; i++)</p><p><b> {</b></p><p><b> int a;</b></p><p> s
93、canf("%d",&a);</p><p> pages[i] = a;</p><p><b> }</b></p><p> getchar();</p><p> printf("是否修改物理塊數(shù)? Y/N :");</p><p>
94、 char change;</p><p> scanf("%c",&change);</p><p> if(change == 'Y')</p><p><b> {</b></p><p><b> int a;</b></p>
95、<p> scanf("%d",&a);</p><p> Block = a;</p><p><b> }</b></p><p> PrintCustomInfo();//顯示自定義頁面信息</p><p> DefaltDeal();//使用自定義信息解決問題&
96、lt;/p><p><b> }</b></p><p> void DealQuestions()</p><p><b> {</b></p><p> //判斷解決問題方式</p><p> switch(method)</p><p>&
97、lt;b> {</b></p><p><b> case 1:</b></p><p> DefaltDeal();//默認(rèn)解決問題</p><p><b> break;</b></p><p><b> case 2:</b></p>
98、;<p> CustomDeal();//自定義解決問題</p><p><b> }</b></p><p><b> }</b></p><p> int main()</p><p><b> {</b></p><p>
99、 printUserInfo();//輸出個人信息</p><p> printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");</p><p> printf("┃請按任意鍵進(jìn)行初始化操作... ┃\n");</p><p> printf("
100、┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");</p><p> printf(" >>>");</p><p> getchar();</p><p> Inition();///初始化函數(shù),隨機(jī)產(chǎn)生頁面數(shù)和頁號</p><p> printDefaltResult(
101、);//輸出默認(rèn)信息</p><p> ChioceDealmethod();//選擇產(chǎn)生結(jié)果方式</p><p> DealQuestions();//開始解決問題</p><p><b> return 0;</b></p><p><b> }</b></p><p
102、> 九、進(jìn)程調(diào)度算法源代碼</p><p> #include<stdlib.h></p><p> #include<time.h></p><p> #include<stdio.h></p><p> #include<math.h></p><p>
103、; #include<malloc.h></p><p> typedef struct PROC</p><p><b> {</b></p><p> int pid;//進(jìn)程標(biāo)志符</p><p> int pri;//進(jìn)程優(yōu)先級</p><p>
104、; int cputime;//cpu時間統(tǒng)計</p><p> int alltime;//運(yùn)行所需時間</p><p> int state;//進(jìn)程狀態(tài)</p><p><b> }PROC;</b></p><p><b> //進(jìn)程控制塊結(jié)構(gòu)</b&g
105、t;</p><p> typedef struct Node</p><p><b> {</b></p><p> PROC info;//進(jìn)程控制塊信息</p><p> struct Node* next;//下一個結(jié)點(diǎn)指針</p><p> }Node;
106、//鏈表結(jié)點(diǎn)結(jié)構(gòu)</p><p> typedef Node* LinkList;</p><p> //初始化有序鏈表,返回一個鏈表的頭結(jié)點(diǎn)</p><p> Node* InitSortedList( )</p><p><b> {</b></p><p> Node
107、*head = (Node*)malloc(sizeof(Node));</p><p> head->next = NULL;</p><p> return head;</p><p><b> }</b></p><p> void InsertSortedList(LinkList L,PROC P
108、roc)</p><p><b> {</b></p><p> Node *pre = L;</p><p> Node *p = pre->next;</p><p> Node *NewProc = (Node*)malloc(sizeof(Node));</p><p>
109、NewProc->info = Proc;</p><p> while(p!=NULL&&Proc.pri<=(p->info).pri)</p><p> { //尋找合適的插入點(diǎn)</p><p><b> pre = p;</b></p><p> p = p->
110、;next;</p><p><b> }</b></p><p> if(p == NULL)</p><p><b> {</b></p><p> pre->next = NewProc;</p><p> NewProc->next = NULL
111、;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> NewProc->next = p;</p><p> pre->next = NewPr
112、oc;</p><p><b> }</b></p><p><b> }</b></p><p> //摘取有序鏈表的第一個結(jié)點(diǎn)(這個結(jié)點(diǎn)從鏈表中移出)</p><p> PROC* GetHeadElement(LinkList L)</p><p><b&
113、gt; {</b></p><p><b> PROC *p;</b></p><p> if(L->next == NULL)</p><p><b> {</b></p><p> return NULL;</p><p><b>
114、 }</b></p><p><b> else</b></p><p><b> {</b></p><p> p = &((L->next)->info);</p><p> L->next = (L->next)->next;</
115、p><p><b> return p;</b></p><p><b> }</b></p><p><b> }</b></p><p> //打印有序鏈表內(nèi)容</p><p> void PrintSortedList(LinkList L)
116、</p><p><b> {</b></p><p> Node *p = L->next;</p><p> if(p == NULL)</p><p><b> {</b></p><p> printf("\n這個隊列沒節(jié)點(diǎn)!");
117、</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> printf("\n現(xiàn)實(shí)現(xiàn)在的隊列:");</p><p> while(p!=NU
118、LL)</p><p><b> {</b></p><p> printf( "\n進(jìn)程id: %d", (p->info).pid);</p><p> printf( " 進(jìn)程優(yōu)先級: %d",(p->info).pri);</p><p> pri
119、ntf( " CPU時間: %d",(p->info).cputime);</p><p> printf( " 運(yùn)行時間: %d",(p->info).alltime);</p><p> printf( " 進(jìn)程狀態(tài): %d\n",(p->info).state);</p>
120、<p> p = p->next;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //打印進(jìn)程控制塊信息</p><p> void Pr
121、intPROC(PROC *Proc)</p><p><b> {</b></p><p> if(Proc==NULL)</p><p><b> {</b></p><p> printf("\nProcess Point is NULL!");</p>
122、<p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> printf( "\n進(jìn)程id: %d",Proc->pid);</p><p> printf(
123、 " 進(jìn)程優(yōu)先級: %d",Proc->pri);</p><p> printf( " CPU時間: %d",Proc->cputime);</p><p> printf( " 所需總時間: %d",Proc->alltime);</p><p> printf
124、( " 進(jìn)程狀態(tài): %d\n",Proc->state);</p><p><b> }</b></p><p><b> }</b></p><p> void Display(struct PROC p[],int p_num,int i)//顯示函數(shù)</p><
125、;p><b> {</b></p><p><b> int j;</b></p><p> for(j=i-1;j<p_num;j++)</p><p><b> {</b></p><p> printf( "\n進(jìn)程id: %d"
126、, p[j].pid );</p><p> printf( " 進(jìn)程優(yōu)先級: %d",p[j].pri);</p><p> printf( " 所需總時間: %d",p[j].alltime);</p><p> printf( " 進(jìn)程狀態(tài): %d\n",p[j].state)
127、;</p><p> printf("\n");</p><p><b> }</b></p><p><b> }</b></p><p> int main( )</p><p><b> {</b></p>
128、<p> int i,count,choice;</p><p> int p_num;</p><p> PROC p[100];</p><p><b> PROC *pp;</b></p><p><b> char M;</b></p><p>
129、;<b> time_t t;</b></p><p> srand((unsigned)time(&t));</p><p> printf("選擇1產(chǎn)生新的進(jìn)程調(diào)度/選擇2不產(chǎn)生并結(jié)束(1/2)\n");</p><p> scanf("%d",&M);</p>
130、<p> while(M==1)</p><p><b> {</b></p><p> printf("請輸入所選擇的算法:1:先到先服務(wù)調(diào)度 2:優(yōu)先權(quán)調(diào)度 3: 按0退出\n");</p><p> scanf("%d",&choice);</p><
131、p> switch(choice)//選擇進(jìn)程調(diào)度算法</p><p><b> {</b></p><p><b> case 1:{</b></p><p> printf("*****************************************\n");</p>
132、;<p> printf("* 先到先服務(wù)調(diào)度 *\n");</p><p> printf("* *\n");</p><p> printf("**************************
133、***************\n");</p><p> printf("輸入需要的進(jìn)程數(shù):");</p><p> scanf("%d",&p_num);</p><p> printf("1.手工輸入\n2.自動生成\n");</p><p> int
134、 P_Input;</p><p> scanf("%d",&P_Input);</p><p> LinkList L = InitSortedList( );</p><p> switch(P_Input)</p><p><b> {</b></p><p&
135、gt;<b> case 1:</b></p><p><b> {</b></p><p> int P_Pri,P_AllTime;</p><p> printf("請輸入優(yōu)先級(最高20) 需要的時間\n");</p><p> for (i = 0;i<
136、p_num;i++)</p><p><b> {</b></p><p> scanf("%d",&P_Pri);</p><p> scanf("%d",&P_AllTime); </p><p> p[i].pid = i+1;</p>
137、<p> p[i].cputime = 0;</p><p> p[i].state = 1;</p><p> p[i].pri = P_Pri;</p><p> p[i].alltime = P_AllTime;</p><p><b> }</b></p><p>&l
138、t;b> break;</b></p><p><b> }</b></p><p><b> case 2:</b></p><p><b> {</b></p><p> for(i = 0;i<p_num;i++) </p>
139、<p><b> {</b></p><p> p[i].pid = i+1;</p><p> p[i].pri = rand()%20; </p><p> p[i].cputime = 0; </p><p> p[i].alltime = rand()%20+1;</p>
140、<p> p[i].state = 1;</p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><
141、p> for (i=1;i<=p_num;i++)</p><p><b> {</b></p><p> printf("*******步驟 #%d******************",i);</p><p> Display(p,p_num,i);</p><p> pri
142、ntf("\n進(jìn)程 %d 運(yùn)行完畢,進(jìn)入完成隊列!\n",i);</p><p><b> }</b></p><p> printf("該進(jìn)程調(diào)度完成!\n\n");</p><p><b> break;</b></p><p><b>
143、 }</b></p><p><b> case 2:</b></p><p><b> {</b></p><p> printf("*****************************************\n");</p><p> printf
144、("* 優(yōu)先權(quán)調(diào)度 *\n");</p><p> printf("* *\n");</p><p> printf("*****************************************\n&
145、quot;);</p><p> printf("輸入需要的進(jìn)程數(shù):");</p><p> scanf("%d",&p_num);</p><p> printf("1.手工輸入\n2.自動生成\n");</p><p> int P_Input;</p>
146、;<p> scanf("%d",&P_Input);</p><p> LinkList L = InitSortedList( );</p><p> switch(P_Input)</p><p><b> {</b></p><p><b> case
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計報告
- 課程設(shè)計報告--操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計報告
- 《操作系統(tǒng)》課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計-- 操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計報告2014217151
- 《操作系統(tǒng)原理》課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計報告2
- 操作系統(tǒng)程序設(shè)計課程設(shè)計報告-操作系統(tǒng)模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計---磁盤調(diào)度報告
- 操作系統(tǒng)課程設(shè)計實(shí)驗報告
- 操作系統(tǒng)程序調(diào)度課程設(shè)計報告
評論
0/150
提交評論