版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 課 程 設 計 報 告</p><p> 課程名稱 操作系統(tǒng) </p><p> 課題名稱 作業(yè)調度模擬 </p><p> 專 業(yè) 通信工程 </p><p> 班 級
2、 </p><p> 學 號 </p><p> 姓 名 </p><p> 指導教師 </p><p> 2012年
3、 6月 29 日</p><p> 課 程 設 計 任 務 書</p><p> 課程名稱 操作系統(tǒng) </p><p> 課 題 作業(yè)調度模擬 </p><p> 任務書下達日期 2012 年 6 月 24 日</p><p> 任務完成日期 2012 年 6 月 2
4、9 日</p><p> 《操作系統(tǒng)》課程設計任務書</p><p> 一、課程設計的性質與目的</p><p> 操作系統(tǒng)課程設計是集中實踐性環(huán)節(jié)之一,是學習完《操作系統(tǒng)》課程后進行的一次全面的綜合練習。要求學生達到熟練掌握操作系統(tǒng)的基本理論知識;掌握不同的調度算法;能夠利用所學的基本編程知識,實現課程章節(jié)中涉及到的一些基本算法,從而加深理論知識的理解。&l
5、t;/p><p><b> 二、 設計要求</b></p><p> 1 要求利用高級程序設計語言編程完成相關算法;</p><p> 2 程序具有清晰易懂的界面,有圖形界面更佳;</p><p> 3 程序具備要求的基本功能模塊;</p><p> 4 最終結果是能夠運行的完整程序;<
6、;/p><p> 5 最后給出課程設計報告</p><p> 三、課程設計報告要求</p><p> 1 統(tǒng)一封面(本任務書附帶)、設計題目、設計要求以及系統(tǒng)功能需求分析;</p><p> 2 總體設計:包括系統(tǒng)總體設計框架和系統(tǒng)功能模塊圖;</p><p> 3 詳細設計。包括主要功能模塊的算法設計思路以及對
7、應的工作流程圖;</p><p> 4 主要源程序代碼,并附有注釋;</p><p> 5 總結。包括課程設計過程中的學習體會與收獲、對操作系統(tǒng)和本次課程設計的認 </p><p><b> 識等內容。</b></p><p> 6 附錄(完整源程序清單):可以是手寫或打印稿(注意:不能和其他同學一樣)<
8、;/p><p> 7 報告最后附上評分表(見任務書末頁)</p><p><b> 四、檢查要求:</b></p><p> 1 每個人至少選作一題,學號末尾2位對5取余,余數對應的題號就是每個人必做題。必須有可運行的程序,每個人要通過答辯;</p><p> 2 每個人必須交《操作系統(tǒng)課程設計報告》(打印稿)<
9、;/p><p><b> 五、評分</b></p><p> 1 根據平時上機考勤,且每個人必須自己動手編寫程序,不得抄襲;</p><p> 2 根據程序運行結果;</p><p> 3 學生能熟練地解釋清楚指導老師對自己程序的提問;</p><p> 4 課程設計報告完成的質量和規(guī)范;&
10、lt;/p><p><b> 六、時間、地點安排</b></p><p><b> 七、課程設計題目</b></p><p> 0. 進程調度算法的設計</p><p><b> 設計要求:</b></p><p> A.設計進程控制塊PCB表結構
11、,分別適用于優(yōu)先數調度算法和循環(huán)輪轉調度算法。</p><p> B.建立進程就緒隊列。對兩種不同算法編制入鏈子程序。</p><p> C.編制兩種進程調度算法:1)優(yōu)先數調度;2)循環(huán)輪轉調度</p><p> 1. 銀行家算法設計</p><p><b> 設計要求:</b></p><
12、p> 編制銀行家算法通用程序,并檢測所給狀態(tài)的系統(tǒng)安全性。</p><p> 2.題目:頁面置換算法模擬設計</p><p><b> 設計要求:</b></p><p> 計算并輸出下述各種算法在不同內存容量下的命中率。</p><p> A.FIFO先進先出的算法</p><p&g
13、t; B.LRR最近最少使用算法</p><p> C.OPT最佳淘汰算法(先淘汰最不常用的頁地址)</p><p> D.LFR最少訪問頁面算法</p><p> E.NUR最近最不經常使用算法</p><p> 3.題目:可變內存管理模擬</p><p><b> 設計要求:</b>
14、;</p><p> A.功能:內存初始化;分配作業(yè)內存;回收內存;顯示作業(yè)列表;顯示空閑內存。</p><p> B.編制兩種內存分配算法:1)最佳適應算法;2)最壞適應算法。</p><p> 4.題目:作業(yè)調度模擬</p><p><b> 設計要求:</b></p><p> A
15、.加深對作業(yè)概念地理解。 </p><p> B.掌握短作業(yè)優(yōu)先調度算法。</p><p> C.深入了解批處理系統(tǒng)如何組織作業(yè)、管理作業(yè)和調度作業(yè)。</p><p> D.了解作業(yè)控制塊的作用,以及作業(yè)控制塊的內容和組織方式。</p><p><b> 目錄</b></p><p>
16、一、系統(tǒng)功能需求分析6</p><p> 二、系統(tǒng)總體設計7</p><p> 1、設計的基本原理7</p><p> 2、系統(tǒng)的總體框架設計7</p><p> 3、系統(tǒng)功能模塊圖7</p><p> 三、系統(tǒng)詳細設計8</p><p> 1、系統(tǒng)總體詳細設計8<
17、;/p><p> 2、系統(tǒng)各模塊詳細設計9</p><p> (1)主函數模塊9</p><p> ?。?)創(chuàng)建JCB作業(yè)控制塊11</p><p> (3)信息輸入模塊11</p><p> ?。?)隨機產生作業(yè)到達時間和服務時間模塊12</p><p> (5) 計算模塊12
18、</p><p> (6)對比模塊13</p><p> ?。?) 信息輸出模塊14</p><p> 四、運行結果及結果分析15</p><p><b> 1、運行結果15</b></p><p> 2、運行結果分析17</p><p><b>
19、; 五、總結17</b></p><p><b> 六、附錄18</b></p><p><b> 七、評分表22</b></p><p> 一、系統(tǒng)功能需求分析</p><p> 作業(yè)調度是對成批進入系統(tǒng)的用戶作業(yè),根據作業(yè)控制塊的信息,按一定的策略選取若干個作業(yè)使它們
20、可以去獲得處理器運行的一項工作。而對每個用戶來說總希望自己的作業(yè)的周轉時間是最小的,短作業(yè)優(yōu)先(SJF)便是其中一種調度方法。</p><p> 本設計是為了加深對作業(yè)概念的理解,掌握短作業(yè)優(yōu)先(SJF)調度算法,深入了解批處理系統(tǒng)如何組織作業(yè)、管理作業(yè)和調度作業(yè),了解作業(yè)控制塊的作用,以及作業(yè)控制塊的內容和組織方式。</p><p> 為了將系統(tǒng)中的作業(yè)組織起來,需要為每個進入系統(tǒng)的
21、作業(yè)建立檔案以記錄和作業(yè)相關的信息,例如作業(yè)名、作業(yè)所需資源、作業(yè)執(zhí)行時間、作業(yè)進入系統(tǒng)的時間、作業(yè)信息在存儲器中的位置、指向下一個作業(yè)控制塊的指針等信息。這個記錄作業(yè)相關信息的數據塊稱為作業(yè)控制塊(JCB),并將系統(tǒng)中等待作業(yè)調度的作業(yè)控制塊組織成一個隊列,這個隊列稱為后備隊列。一個作業(yè)全部信息進入系統(tǒng)后,就為其建立作業(yè)控制塊,并掛入后備隊列。當進行作業(yè)調度時,從后備隊列中查找選擇作業(yè)。在從后備隊列中查找選擇作業(yè)是,先根據作業(yè)控制塊中
22、的信息,選中一個短作業(yè),也就是執(zhí)行時間最短的作業(yè),將它們調入內存運行。</p><p><b> 二、系統(tǒng)總體設計</b></p><p><b> 1、設計的基本原理</b></p><p> 在多道程序環(huán)境下,將系統(tǒng)中的作業(yè)組織起來,為每個進入系統(tǒng)的作業(yè)建立檔案以記錄和作業(yè)相關的信息,建立作業(yè)控制塊(JCB)掛入
23、后備隊列。進行作業(yè)調度時,在其后計算出各個作業(yè)的開始執(zhí)行時間、完成時間、周轉時間和平均周轉時間,根據作業(yè)控制塊中的信息,審查系統(tǒng)能否滿足用戶作業(yè)的資源需求,利用短作業(yè)優(yōu)先算法進行作業(yè)調度,從外存的后備隊列中選取某些作業(yè)調入內存,為它們創(chuàng)建進程、分配必要的資源并按照由小到大的順序顯示出來。</p><p> 短作業(yè)優(yōu)先的調度算法是從后備隊列中選擇一個或者若干個估計運行時間最短的作業(yè),將它們調入內存運行。</
24、p><p> 2、系統(tǒng)的總體框架設計</p><p> 編寫程序完成批處理系統(tǒng)中的作業(yè)調度,要求采用短作業(yè)優(yōu)先的作業(yè)調度算法,其包括:首先確定作業(yè)控制塊的內容和組成方式,然后完成作業(yè)調度,最后編寫主函數對所作工作進程測試。具體包括以下模塊:信息輸入模塊,隨機產生作業(yè)到達時間和服務時間模塊,計算模塊,比較模塊,輸出模塊。</p><p><b> 3、系統(tǒng)
25、功能模塊圖</b></p><p> 系統(tǒng)功能模塊圖如下所示:</p><p><b> 三、系統(tǒng)詳細設計</b></p><p> 1、系統(tǒng)總體詳細設計</p><p> 系統(tǒng)設計流程圖如下:</p><p> 2、系統(tǒng)各模塊詳細設計</p><p>
26、;<b> (1)主函數模塊</b></p><p> 主函數模塊調用各子模塊,包括信息輸入模塊,隨機產生作業(yè)到達時間和服務時間模塊,計算模塊,比較模塊,輸出模塊,進而完成作業(yè)調度模擬功能。</p><p> 其函數代碼如下所示:</p><p> int main()</p><p><b> {&
27、lt;/b></p><p><b> while(1){</b></p><p> system("CLS");</p><p><b> int N;</b></p><p> printf("\t\t\t*******歡迎使用作業(yè)調度模擬系統(tǒng)****
28、*****\n");</p><p> printf("\t\t\t****************************************\n");</p><p> printf("\t\t\t**********短作業(yè)優(yōu)先調度算法************\n");</p><p> printf(
29、"\t\t\t****************************************\n");</p><p> printf("\t\t\t********非常感謝您的使用,謝謝!********\n");</p><p> printf("請輸入作業(yè)數目:");</p><p> sca
30、nf("%d",&N);</p><p><b> char ch;</b></p><p> if(N>MAX){</p><p> printf("\t!!輸入的作業(yè)數目太大,請輸入不大于%d的整數\n",MAX);</p><p> printf(&qu
31、ot;按Q或者q退出程序,按其他任意鍵繼續(xù)測試...");</p><p> ch = getch();</p><p> if(ch=='Q'||ch=='q'){</p><p><b> break;</b></p><p><b> }</b>
32、;</p><p> else continue;</p><p><b> }</b></p><p> input(a,N);</p><p><b> jcb *b=a;</b></p><p> jcbf(b,N); </p>&
33、lt;p> printf("按Q或者q退出程序,按其他任意鍵繼續(xù)測試...");</p><p> ch = getch();</p><p> if(ch=='Q'||ch=='q'){</p><p><b> break;</b></p><p>&
34、lt;b> }</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> ?。?)創(chuàng)建JCB作業(yè)控制塊</p><p> 創(chuàng)建作
35、業(yè)控制塊JCB,定義為結構體,為進入系統(tǒng)的作業(yè)建立檔案,其中定義了作業(yè)名,作業(yè)到達時間,作業(yè)服務時間,作業(yè)開始執(zhí)行時間,作業(yè)完成時間,作業(yè)周轉時間,作業(yè)平均周轉時間,實現對作業(yè)的存儲和管理。</p><p> 結構體定義如下所示:</p><p> struct jcb </p><p><b> { </b></p>
36、<p> char name[10]; //作業(yè)名</p><p> float arrivetime; //作業(yè)到達時間</p><p> float servicetime;//作業(yè)服務時間</p><p> float starttime; //作業(yè)開始執(zhí)行時間</p><p> float finish
37、time; //作業(yè)完成時間</p><p> float cyctime; //作業(yè)周轉時間</p><p> float avecyctime; //作業(yè)平均周轉時間</p><p><b> };</b></p><p><b> (3)信息輸入模塊</b></p&g
38、t;<p> 定義一定范圍內可變輸入數,用戶只需輸入可變范圍內的數據即可進行作業(yè)信息的輸入,如果輸入的作業(yè)數超出其可變范圍,則需重新輸入。</p><p><b> 其流程如下:</b></p><p> (4)隨機產生作業(yè)到達時間和服務時間模塊</p><p> 此模塊主要是利用隨機函數srand()和rand(),以時
39、間作為種子,隨機產生作業(yè)到達時間和作業(yè)服務時間,這樣便充分符合了短作業(yè)優(yōu)先調度算法的特點。</p><p><b> ?。?) 計算模塊</b></p><p> 此模塊是利用函數來實現對作業(yè)數據的計算,包括:計算各個作業(yè)的作業(yè)開始執(zhí)行時間,作業(yè)完成時間,作業(yè)周轉時間,作業(yè)平均周轉時間。其中作業(yè)執(zhí)行時間為上個作業(yè)的完成時間,作業(yè)完成時間為作業(yè)執(zhí)行時間加上作業(yè)服務時間
40、,作業(yè)周轉時間為作業(yè)被提交給系統(tǒng)開始,到作業(yè)完成為止的這段時間間隔,作業(yè)平均周轉時間為作業(yè)周轉時間除以服務時間。</p><p> 其函數代碼如下所示:</p><p> void deal(jcb *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,floa
41、t &avecyctime,int N)</p><p><b> {</b></p><p><b> int k;</b></p><p> for(k=0;k<=N-1;k++)</p><p><b> {</b></p><p
42、><b> if(k==0)</b></p><p><b> {</b></p><p> p[k].starttime=p[k].arrivetime; </p><p> p[k].finishtime=p[k].arrivetime+p[k].servicetime;
43、 </p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> p[k].starttime=p[k-1].finishtime; </p><p&
44、gt; p[k].finishtime=p[k-1].finishtime+p[k].servicetime;</p><p><b> }</b></p><p><b> }</b></p><p> for(k=0;k<=N-1;k++)</p><p><b> {
45、</b></p><p> p[k].cyctime=p[k].finishtime-p[k].arrivetime; </p><p> p[k].avecyctime=p[k].cyctime/p[k].servicetime;</p><p><b> }</b></p><p>&l
46、t;b> }</b></p><p><b> ?。?)對比模塊</b></p><p> 此模塊主要是利用函數將不同用戶在計算模塊得到的數據(完成時間)進行比較,以便由小到大輸出作業(yè)名,作業(yè)到達時間,作業(yè)服務時間,作業(yè)開始執(zhí)行時間,作業(yè)周期時間,作業(yè)平均周轉時間。</p><p> 其函數代碼如下所示:</p&g
47、t;<p> void jcbf(jcb *p,int N)</p><p><b> {</b></p><p> float arrivetime=0,servicetime=0,starttime=0,finishtime=0,cyctime=0,avecyctime=0;</p><p> sort(p,N);&l
48、t;/p><p> for(int m=0;m<N-1;m++)</p><p><b> {</b></p><p><b> if(m==0)</b></p><p> p[m].finishtime=p[m].arrivetime+p[m].servicetime;</p>
49、;<p><b> else</b></p><p> p[m].finishtime=p[m-1].finishtime+p[m].servicetime;</p><p><b> int i=0;</b></p><p> for(int n=m+1;n<=N-1;n++)</p&g
50、t;<p><b> {</b></p><p> if(p[n].arrivetime<=p[m].finishtime)</p><p><b> i++;</b></p><p><b> }</b></p><p> float min=p
51、[m+1].servicetime; </p><p> int next=m+1;//m+1=n</p><p> for(int k=m+1;k<m+i;k++) </p><p><b> {</b></p><p> if(p[k+1].servicetime<min)</p>
52、<p><b> {</b></p><p> min=p[k+1].servicetime;</p><p><b> next=k+1;</b></p><p><b> }</b></p><p><b> }</b></p
53、><p><b> jcb temp;</b></p><p> temp=p[m+1];</p><p> p[m+1]=p[next];</p><p> p[next]=temp;</p><p><b> } </b></p><p>
54、 deal(p,arrivetime,servicetime,starttime,finishtime,cyctime,avecyctime,N); Print(p,arrivetime,servicetime,starttime,finishtime,cyctime,avecyctime,N);</p><p><b> }</b></p><p> ?。?)
55、信息輸出模塊</p><p> 按照調度順序依次輸出各作業(yè)的作業(yè)達到時間,作業(yè)服務時間,作業(yè)開始執(zhí)行時間,作業(yè)完成時間,作業(yè)周轉時間,作業(yè)平均周轉時間。</p><p> 其函數代碼如下所示:</p><p> void Print(jcb *p,float arrivetime,float servicetime,float starttime,float
56、finishtime,float cyctime,float avecyctime,int N)</p><p><b> {</b></p><p><b> int k;</b></p><p> printf("調度順序:");</p><p> printf(&q
57、uot;%s",p[0].name);</p><p> for(k=1;k<N;k++)</p><p><b> {</b></p><p> printf("-->%s",p[k].name);</p><p><b> }</b></p
58、><p> printf("\n\n");</p><p> printf("\t\t\t則作業(yè)信息如下:\n");</p><p> printf("\nname\tarrive\tservice\tstart\tfinish\tcyc\tavecyc\n");</p><p>
59、 for(k=0;k<=N-1;k++)</p><p><b> {</b></p><p> printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k]
60、.finishtime,p[k].cyctime,p[k].avecyctime);</p><p><b> }</b></p><p><b> }</b></p><p> 四、運行結果及結果分析</p><p><b> 1、運行結果</b></p>
61、<p><b> 主界面如下所示:</b></p><p> 因為程序設定輸入最大作業(yè)數目為100,若輸入作業(yè)數目大于100(本例輸入作業(yè)數目為120)則顯示以下界面:</p><p> 若輸入數目不大于100(本例輸入作業(yè)數目為6),則顯示以下界面:</p><p> 按界面提示信息輸入作業(yè)信息(本例輸入6個作業(yè)信息)并
62、鍵入后則顯示以下界面:</p><p><b> 2、運行結果分析</b></p><p> 由上圖運行結果顯示界面可知調度順序為:JOB2-->JOB6-->JOB3-->JOB4-->JOB1-->JOB5</p><p><b> 運行結果如表所示:</b></p>
63、<p> 分析可知:短作業(yè)優(yōu)先法先由到達時間排序,執(zhí)行作業(yè),然后對后來進入系統(tǒng)的作業(yè)和系統(tǒng)中等待執(zhí)行的作業(yè)進行計算、比較,以服務時間由小到大排序,并按此順序進行調度。</p><p><b> 五、總結</b></p><p> 操作系統(tǒng)課程設計是集中實踐性環(huán)節(jié)之一,是學習完《操作系統(tǒng)》課程后進行的一次全面綜合練習。在當今社會,計算機不斷普及,操作系統(tǒng)
64、作為計算機軟件與硬件結合處的系統(tǒng)軟件起到了不可替代的作用。因此,學習和了解操作系統(tǒng)的原理及應用也變得十分重要。在這次操作系統(tǒng)的課程設計中我們進一步掌握了操作系統(tǒng)的基本理論知識、短作業(yè)優(yōu)先調度算法,在實踐中學會了利用所學的基本編程知識,實現課程章節(jié)中涉及到的一些基本算法,從而加深理論知識的理解。</p><p> 在本次課程設計中我做的是作業(yè)調度模擬系統(tǒng),在課設中我不斷鞏固課堂所學的理論知識,加深了對作業(yè)概念地理
65、解,掌握了短作業(yè)優(yōu)先調度算法,深入學習了批處理系統(tǒng)如何組織作業(yè)、管理作業(yè)和調度作業(yè)并了解了作業(yè)控制塊的作用以及其內容和組織方式。課設中我綜合運用了所學知識,不斷發(fā)現、提出、分析和解決實際問題,鍛煉了自己的實踐能力,這對我們培養(yǎng)實際工作能力起到了很好的訓練作用。除此之外,課設還鍛煉了我的自學能力。在開始做課設時我對操作系統(tǒng)如何用高級語言來實現很不了解。最后不得不自己查閱相關資料,在經過了翻閱資料、網上查詢并和同學討論后我最終決定用c++來
66、實現課設所要求的功能。但由于C語言、C++和數據結構都有很長一段時間沒有實際運用了,最后不得不邊寫邊溫習。當然由于這種生疏導致課設做的很慢,不過隨著編程意識的不斷復蘇,課設也漸漸上了軌道。另外,對于作業(yè)算法我也先溫習了一下課本,這對我的課設有著莫大的助益。通過溫習理論知識,我了解了短作業(yè)優(yōu)先調度算法的原理是從后備隊列中選擇一個或者若干估計運行時間最短的作業(yè),將它們調入內存運行。同時對該算法的優(yōu)缺點也有了更深層次的理解。短作業(yè)優(yōu)先調度算法
67、易于實現,并且效率很</p><p> 通過本次課程設計,我對計算機操作系統(tǒng)中的作業(yè)調度模擬和短作業(yè)優(yōu)先算法有了更深層次的認識。在課設中培養(yǎng)的自學及鉆研能力在以后的工作中將幫助我很好的克服困難,順利完成工作任務。同時,我也體會到實踐來源于理論而又深于理論,我們只有學好理論知識才能更加順利的完成實踐,只有通過實踐才能強化理論知識,體現理論知識的價值。在以后的學習中我一定會培養(yǎng)自己溫故而知新的習慣,不斷學習,不斷進
68、步,希望在以后的學習中取得更好的表現。</p><p><b> 六、附錄</b></p><p> 源程序代碼如下所示:</p><p> #include<stdio.h></p><p> #include<conio.h></p><p> #includ
69、e<windows.h></p><p> #include<stdlib.h></p><p> #include<time.h></p><p> #define MAX 100 //最多能管理的作業(yè)數目</p><p> struct jcb //作業(yè)控制塊JCB,定義為結構體<
70、/p><p><b> { </b></p><p> char name[10]; //作業(yè)名</p><p> float arrivetime; //作業(yè)到達時間</p><p> float servicetime;//作業(yè)服務時間</p><p> float startt
71、ime; //作業(yè)開始執(zhí)行時間</p><p> float finishtime; //作業(yè)完成時間</p><p> float cyctime; //作業(yè)周轉時間</p><p> float avecyctime; //作業(yè)平均周轉時間</p><p><b> };</b></p&g
72、t;<p> jcb a[MAX]; </p><p> void input(jcb *p,int N)</p><p><b> {</b></p><p><b> int i;</b></p><p> printf("請分別輸入:\t作業(yè)名(如:JOB1
73、)\n\n");</p><p> for(i=0;i<=N-1;i++)</p><p><b> {</b></p><p> printf("請輸入第%d個作業(yè)信息:",i+1);</p><p> scanf("%s",&p[i].name)
74、;</p><p> srand((unsigned)time(NULL)); </p><p> p[i].arrivetime = rand()%99+1;</p><p> srand((unsigned)time(NULL)); </p><p> p[i].servicetime= rand()%99+1; </p
75、><p> printf("\n");</p><p><b> }</b></p><p><b> }</b></p><p> void Print(jcb *p,float arrivetime,float servicetime,float starttime,fl
76、oat finishtime,float cyctime,float avecyctime,int N)</p><p><b> {</b></p><p><b> int k;</b></p><p> printf("調度順序:");</p><p> print
77、f("%s",p[0].name);</p><p> for(k=1;k<N;k++)</p><p><b> {</b></p><p> printf("-->%s",p[k].name);</p><p><b> }</b>&l
78、t;/p><p> printf("\n\n");</p><p> printf("\t\t\t則作業(yè)信息如下:\n");</p><p> printf("\nname\tarrive\tservice\tstart\tfinish\tcyc\tavecyc\n");</p><p
79、> for(k=0;k<=N-1;k++)</p><p><b> {</b></p><p> printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,
80、p[k].finishtime,p[k].cyctime,p[k].avecyctime);</p><p><b> }</b></p><p><b> }</b></p><p> void sort(jcb *p,int N)</p><p><b> {</b>
81、;</p><p> for(int i=0;i<=N-1;i++)</p><p> for(int j=0;j<=i;j++)</p><p> if(p[i].arrivetime<p[j].arrivetime)</p><p><b> {</b></p><p&g
82、t;<b> jcb temp;</b></p><p> temp=p[i];</p><p> p[i]=p[j];</p><p> p[j]=temp;</p><p><b> }</b></p><p><b> }</b><
83、;/p><p> void deal(jcb *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &avecyctime,int N)</p><p><b> {</b></p><p><
84、b> int k;</b></p><p> for(k=0;k<=N-1;k++)</p><p><b> {</b></p><p><b> if(k==0)</b></p><p><b> {</b></p><
85、p> p[k].starttime=p[k].arrivetime; </p><p> p[k].finishtime=p[k].arrivetime+p[k].servicetime; </p><p><b> }</b></p><p><b> else</b>&
86、lt;/p><p><b> {</b></p><p> p[k].starttime=p[k-1].finishtime; </p><p> p[k].finishtime=p[k-1].finishtime+p[k].servicetime;</p><p><b> }<
87、;/b></p><p><b> }</b></p><p> for(k=0;k<=N-1;k++)</p><p><b> {</b></p><p> p[k].cyctime=p[k].finishtime-p[k].arrivetime; </p&
88、gt;<p> p[k].avecyctime=p[k].cyctime/p[k].servicetime;</p><p><b> }</b></p><p><b> }</b></p><p> void jcbf(jcb *p,int N)</p><p><b
89、> {</b></p><p> float arrivetime=0,servicetime=0,starttime=0,finishtime=0,cyctime=0,avecyctime=0;</p><p> sort(p,N);</p><p> for(int m=0;m<N-1;m++)</p><p&
90、gt;<b> {</b></p><p><b> if(m==0)</b></p><p> p[m].finishtime=p[m].arrivetime+p[m].servicetime;</p><p><b> else</b></p><p> p[m]
91、.finishtime=p[m-1].finishtime+p[m].servicetime;</p><p><b> int i=0;</b></p><p> for(int n=m+1;n<=N-1;n++)</p><p><b> {</b></p><p> if(p[n
92、].arrivetime<=p[m].finishtime)</p><p><b> i++;</b></p><p><b> }</b></p><p> float min=p[m+1].servicetime; </p><p> int next=m+1;//m+1=n&l
93、t;/p><p> for(int k=m+1;k<m+i;k++) </p><p><b> {</b></p><p> if(p[k+1].servicetime<min)</p><p><b> {</b></p><p> min=p[k+1]
94、.servicetime;</p><p><b> next=k+1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> jcb temp;</b></p><p&g
95、t; temp=p[m+1];</p><p> p[m+1]=p[next];</p><p> p[next]=temp;</p><p><b> } </b></p><p> deal(p,arrivetime,servicetime,starttime,finishtime,cyctime,avec
96、yctime,N);</p><p> Print(p,arrivetime,servicetime,starttime,finishtime,cyctime,avecyctime,N);</p><p><b> }</b></p><p> int main()</p><p><b> {<
97、/b></p><p><b> while(1){</b></p><p> system("CLS");</p><p><b> int N;</b></p><p> printf("\t\t\t*******歡迎使用作業(yè)調度模擬系統(tǒng)*******
98、**\n");</p><p> printf("\t\t\t****************************************\n");</p><p> printf("\t\t\t**********短作業(yè)優(yōu)先調度算法************\n");</p><p> printf(&qu
99、ot;\t\t\t****************************************\n");</p><p> printf("\t\t\t********非常感謝您的使用,謝謝!********\n");</p><p> printf("請輸入作業(yè)數目:");</p><p> scanf(
100、"%d",&N);</p><p><b> char ch;</b></p><p> if(N>MAX){</p><p> printf("\t!!輸入的作業(yè)數目太大,請輸入不大于%d的整數\n",MAX);</p><p> printf("
101、按Q或者q退出程序,按其他任意鍵繼續(xù)測試...");</p><p> ch = getch();</p><p> if(ch=='Q'||ch=='q'){</p><p><b> break;</b></p><p><b> }</b>&l
102、t;/p><p> else continue;</p><p><b> }</b></p><p> input(a,N);</p><p><b> jcb *b=a;</b></p><p> jcbf(b,N); </p><
103、p> printf("按Q或者q退出程序,按其他任意鍵繼續(xù)測試...");</p><p> ch = getch();</p><p> if(ch=='Q'||ch=='q'){</p><p><b> break;</b></p><p><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設計--作業(yè)調度
- 操作系統(tǒng)課程設計-進程調度模擬
- 操作系統(tǒng)課程設計——操作系統(tǒng)課程設計模擬操作系統(tǒng)
- 操作系統(tǒng)課程設計——進程調度模擬算法
- 操作系統(tǒng)課程設計-磁盤調度模擬法
- 操作系統(tǒng)課程設計——進程調度模擬算法
- 短作業(yè)優(yōu)先的作業(yè)調度-操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計---進程調度模擬設計
- 操作系統(tǒng)進程調度課程設計
- 操作系統(tǒng)課程設計---進程調度子系統(tǒng)模擬實現
- 操作系統(tǒng)進程調度課程設計
- 模擬操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計報告---進程調度的模擬實現
- 操作系統(tǒng)課程設計---磁盤調度報告
- 進程調度算法 操作系統(tǒng)課程設計
- 操作系統(tǒng)課程設計--模擬操作系統(tǒng)的實現
- 操作系統(tǒng)課程設計報告--驅動調度
- 操作系統(tǒng)程序調度課程設計報告
- 操作系統(tǒng)進程調度課程設計報告
- 操作系統(tǒng)課程設計--進程調度算法
評論
0/150
提交評論