最低松弛度優(yōu)先講解_第1頁
最低松弛度優(yōu)先講解_第2頁
最低松弛度優(yōu)先講解_第3頁
最低松弛度優(yōu)先講解_第4頁
最低松弛度優(yōu)先講解_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、青島理工大學(xué)操作系統(tǒng)課程設(shè)計報告院(系): 計算機工程學(xué)院 專業(yè): 網(wǎng)絡(luò)工程 學(xué)生姓名: 班級: 學(xué)號: 題目:采用最低松弛度優(yōu)先調(diào)度的實時系統(tǒng)調(diào)度程序 起迄日期: 2013.07.082013.07.19 設(shè)計地點: 計算機工程學(xué)院機房 指 導(dǎo) 教 師: 20122013年度 第 2 學(xué)期完成日期: 2013 年 7 月 19 日一、 課程設(shè)計目的由于在實時系統(tǒng)中都存在著若干個實時進程或任務(wù),它們用來反應(yīng)或控制某個外部事件,往往帶有某種程序的緊迫性,因此采用一種新的調(diào)度:實時調(diào)度才能實現(xiàn)合理合法的調(diào)度。而最低松弛度優(yōu)先,是一種搶占式的實時調(diào)度,根據(jù)任務(wù)的松弛程度來確定任務(wù)的優(yōu)先級。任務(wù)的松弛

2、度愈低,愈優(yōu)先執(zhí)行。通過實現(xiàn)利用最低松弛度對作業(yè)進行調(diào)度的模擬,我可以清楚的了解操作系統(tǒng)的相關(guān)任務(wù)調(diào)度原理和操作系統(tǒng)的任務(wù)調(diào)度過程。此次的課程設(shè)計讓我對該調(diào)度算法有了更加深入的理解同時對以編程實現(xiàn)該算法和可視化編程有了更深一步的了解和鞏固。二、 課程設(shè)計內(nèi)容與要求 1、在實時系統(tǒng)中,要保證在指定的時間完成指定的任務(wù),通常會采用搶占式的調(diào)度方式。要求采用指定的調(diào)度算法,使系統(tǒng)中的任務(wù)能夠按時完成,通過觀察中系統(tǒng)中的搶占點,以鞏固和加深對實時系統(tǒng)調(diào)度算法的理解。2、設(shè)計要求:1) 每一個周期性實時任務(wù)必須指定周期長度與執(zhí)行時間。2) 可以在界面安排周期性實時任務(wù)的個數(shù)與相關(guān)的指標(biāo)值,又及要求仿真的

3、時間長度。3) 系統(tǒng)可又對設(shè)定的任務(wù)條件進行檢查,如果無法滿足公式 的要求,則彈出相應(yīng)的錯誤提示,并重新進入任務(wù)安排界面。4) 可讀取樣例數(shù)據(jù)(要求存放在外部文件中)進行周期性實時任務(wù)數(shù)、周期長度、執(zhí)行時間的初始化。5) 采用可視化界面,數(shù)據(jù)載入后按最低松弛度算法進行調(diào)度,可以在運行中動態(tài)顯示各進程的狀態(tài):就緒、執(zhí)行、完成。6) 系統(tǒng)上下文切換時,會暫停調(diào)度,顯示就緒隊列中各任務(wù)的松弛度,按任意鍵后自動運行。7) 具有一定的數(shù)據(jù)容錯性。三、 系統(tǒng)分析與設(shè)計1、系統(tǒng)分析 在系統(tǒng)中,通過界面輸入或文件讀取來向系統(tǒng)錄入數(shù)據(jù),由輸入各個任務(wù)的相關(guān)信息來計算出最低松弛度。對于每一個任務(wù),當(dāng)最低松弛度減小

4、到零時便開始搶占處理機,對于多個任務(wù)最低松弛度相同的情況下,采用先來先服務(wù)的輔助調(diào)度算法。最后動態(tài)顯示運行的實時結(jié)果,從而直觀的表現(xiàn)出采用最低松弛度調(diào)度算法的工作原理和調(diào)度過程。(1) 信息:輸入信息為任務(wù)總數(shù),仿真時間,各任務(wù)編號,周期時間,和運行時間。輸出信息為各任務(wù)的開始時間,結(jié)束時間,運行次數(shù),當(dāng)前狀態(tài),任務(wù)當(dāng)前松弛度,以及當(dāng)前任務(wù)還需運行時間。(2) 行為:系統(tǒng)通過調(diào)用,動態(tài)顯示各個實時任務(wù)的最低松弛度。當(dāng)某個實時任務(wù)的最低松弛度=0的時候,則搶占執(zhí)行。當(dāng)多個實時任務(wù)的最低松弛度各不相等時,則予以該實時任務(wù)正常執(zhí)行,而無需搶占。當(dāng)多個實時任務(wù)的最低松弛度相等時,則采用先來先服務(wù)的方式

5、執(zhí)行。執(zhí)行結(jié)果動態(tài)的顯示在各個表格中,清楚的展現(xiàn)接下來該調(diào)度哪個實時任務(wù),等待調(diào)度的實時任務(wù)有哪些和完成目前周期的實時任務(wù)有哪些。(3) 表示:程序運行期間的顯示布局如下圖所示:選擇數(shù)據(jù)輸入方式,包括文件讀取和界面輸入界面鍵入總?cè)蝿?wù)信息和各任務(wù)詳細信息控制按鈕,包括開始,結(jié)束,暫停,終止,退出系統(tǒng)信息(當(dāng)前時間)和提示上下文切換動態(tài)顯示運行過程,包括就緒,完成,執(zhí)行2、系統(tǒng)設(shè)計:概要設(shè)計:(1)輸入模塊:用戶處方選擇文件讀取和界面輸入,文件讀取僅要求用戶選定相關(guān)文件,前提是編程者事先存儲符合要求的信息。界面輸入要求用戶輸入正確的總?cè)蝿?wù)信息和各個任務(wù)的詳細信息,系統(tǒng)也將檢查信息的合法性才予以調(diào)度

6、。(2)算法模塊:調(diào)度算法模塊主要設(shè)計出根據(jù)最低松弛度進行調(diào)度的算法,以及予以任務(wù)搶占時的條件和調(diào)度過程(3)輸出模塊:用列表控件動態(tài)顯示各個任務(wù)的就緒,執(zhí)行,完成列表的屬性信息。(4)任務(wù)合法性檢查模塊:檢查提交給系統(tǒng)的任務(wù)的周期時間和運行時間是否都大于0,以及周期時間是否都大于運行時間(5)可調(diào)度性檢查模塊:檢查提交給系統(tǒng)的所有任務(wù)是否滿足可調(diào)度性公式。(6)運行控制模塊:程序運行時的功能選擇和相關(guān)控制功能。2.1、模塊設(shè)計:在該系統(tǒng)中,由用戶提交給系統(tǒng)總?cè)蝿?wù)信息和各任務(wù)的信息,系統(tǒng)將就此檢查各任務(wù)的合法性,合法則顯示在就緒隊列,再檢查所有任務(wù)的可調(diào)度性,若可調(diào)度則進行演示。演示的結(jié)果將動

7、態(tài)顯示在就緒,執(zhí)行,完成的三個列表控件上。模塊調(diào)用關(guān)系圖:輸入模塊可調(diào)度性檢查模塊算法模塊任務(wù)合法性檢查模塊輸出模塊控制模塊主模塊2.2、數(shù)據(jù)結(jié)構(gòu)說明: 1、每一個任務(wù)對應(yīng)一個work類型的結(jié)構(gòu)體變量typedef struct workCString job_id;/任務(wù)的ID,唯一標(biāo)志一個任務(wù)intjob_beginTime;/任務(wù)的開始時間intjob_llf;/任務(wù)當(dāng)前低松弛度CStringjob_state;/任務(wù)當(dāng)前狀態(tài)intjob_period;/任務(wù)的周期intjob_runTime;/任務(wù)的運行時間intjob_RneedTime;/任務(wù)完成還需的運行時間intjob_end

8、Time;/任務(wù)的結(jié)束時間intjob_flag;/本周期內(nèi)首次運行標(biāo)識intjob_doneTimes;/任務(wù)的執(zhí)行次數(shù)intjob_identify;/任務(wù)是否完成的標(biāo)識intjob_MissTimes;/任務(wù)錯過次數(shù)struct work * next;/指向結(jié)構(gòu)體變量work的指針 work,*POINT_work;2、由任務(wù)排成的隊列typedef struct QNodePOINT_work data; /指向結(jié)構(gòu)體類型數(shù)據(jù)的數(shù)據(jù)項指針struct QNode *next;/指向下一個隊列元素的指針QNode, *POINT_QNode;typedef structPOINT_QN

9、ode front;/任務(wù)隊列的對頭指針POINT_QNode rear;/任務(wù)隊列隊尾指針Queue;Queue Qon,Qready,Qdone;/定義三個隊列,其中Qon表示正在執(zhí)行的隊列,該隊列最多只有一個隊列元素,Qready表示就緒的隊列,Qdone表示已經(jīng)執(zhí)行完成的隊列程序中用到的對上述數(shù)據(jù)結(jié)構(gòu)的一些操作:int InitQueue(Queue &Q)/構(gòu)造空隊列,成功返回1,否則返回0void OrderJob(Queue &Q,POINT_work job)/按照低松弛度對進入隊列的任務(wù)進行排序int DeleteHead(Queue &Q,POINT_work job)/若

10、隊列不空,則刪除Q的頭元素,用job保存,操作成功返回1,否則返回0void DestroyQueue(Queue &Q) /銷毀一個隊列int QueueEmpty(Queue Q)/判斷隊列是否為空若為空則返回1,否則返回0int GetHeadElem(Queue Q,POINT_work job)/取隊列的第一個元素的值,成功返回1,否則返回0int DeleteDefineQueue(Queue &Q,CString str,POINT_work job)/刪除指定任務(wù)編號的隊列節(jié)點,用結(jié)構(gòu)體變量job保存,操作成功返回1,否則返回02.3、算法流程圖:(1)控制函數(shù)流程圖:開始界面

11、輸入?輸入任務(wù)總數(shù)輸入仿真時間輸入任務(wù)信息選擇文件可以調(diào)度?進入就緒隊列提示不可調(diào)度重新輸入模擬開始,激活計時器計算松弛度執(zhí)行調(diào)度算法刷新定時器,任務(wù)信息終止運行?新任務(wù)?結(jié)束否 是否是否是否是 (2)檢查函數(shù)流程圖:輸入任務(wù)信息周期T、運行時間R0運行時間1.0 ?可調(diào)度,進入隊列是是輸入任務(wù)非法否否是否是否任務(wù)不可調(diào)度 開始計算任務(wù)松弛度計時開始,flag=0 計時開始 松弛度小的任務(wù)優(yōu)先運行 計數(shù)器更新 搶占變量flag加1是是否設(shè)定松弛度進入就緒隊列,flag-; 模擬結(jié)束?顯示結(jié)果否 否是任務(wù)搶占? 任務(wù)搶占?flag=1?否是(3)調(diào)度函數(shù)流程圖:(4)輸入函數(shù)流程圖:是 否是 否

12、開始文件讀???輸入任務(wù)總數(shù)選擇文件提交后隱藏按鍵輸入仿真時間輸入后隱藏按鍵輸入任務(wù)信息最后的作業(yè)?隱藏點擊提交按鍵進行合法性檢查四、系統(tǒng)測試與調(diào)試分析1、系統(tǒng)測試l 測試方法:黑盒l(wèi) 測試技術(shù):單元測試、功能測試、l 測試數(shù)據(jù):包括正確的輸入及其輸出結(jié)果和含有錯誤的輸入及其輸出結(jié)果。1、 驗證提交任務(wù)的可調(diào)度性測試說明測試名稱采用最低松弛度優(yōu)先調(diào)度的實時系統(tǒng)調(diào)度程序測試目的驗證提交任務(wù)的可調(diào)度性測試技術(shù)單元測試測試方法黑盒測試法測試用例測試內(nèi)容通過文件讀取的方式提交一批任務(wù),測試系統(tǒng)對任務(wù)可調(diào)度性的判斷測試步驟輸入可調(diào)度的一批任務(wù)輸入不可調(diào)度任務(wù)輸入含非法任務(wù)測試數(shù)據(jù)任務(wù)數(shù)目:3任務(wù)編號 NO

13、.1周期時間20 s運行時間 4s任務(wù)編號 NO.2周期時間 30 s運行時間 6s任務(wù)編號 NO.3周期時間 45 s運行時間 8s任務(wù)數(shù)目:3任務(wù)編號 NO.1周期時間20 s運行時間 4s任務(wù)編號 NO.2周期時間 20 s運行時間 6s任務(wù)編號 NO.3周期時間 5 s運行時間3s任務(wù)數(shù)目:3任務(wù)編號 NO.1周期時間20 s運行時間 4s任務(wù)編號 NO.2周期時間 20 s運行時間 6s任務(wù)編號 NO.3周期時間 5 s運行時間8s預(yù)期結(jié)果任務(wù)可調(diào)度,在就緒隊列中排隊顯示任務(wù)不可調(diào)度提示含有非法任務(wù)測試結(jié)果與預(yù)期相符與預(yù)期相符與預(yù)期相符2、 驗證任務(wù)調(diào)度順序的正確性測試說明測試名稱采

14、用最低松弛度優(yōu)先調(diào)度的實時系統(tǒng)調(diào)度程序測試目的任務(wù)調(diào)度順序的正確性驗證測試技術(shù)單元測試測試方法黑盒測試法測試用例測試內(nèi)容通過文件讀取的方式提交一批任務(wù),驗證對任務(wù)的調(diào)度是否正確測試步驟輸入可調(diào)度的一批任務(wù)測試數(shù)據(jù)任務(wù)總數(shù):3仿真時間100s任務(wù)編號 NO.1周期時間 20 s運行時間 6s任務(wù)編號 NO.2周期時間 10 s運行時間 4s任務(wù)編號 NO.3周期時間 5 s運行時間 1s預(yù)期結(jié)果調(diào)度程序先執(zhí)行NO.3任務(wù)1s,然后執(zhí)行NO.2任務(wù)4s,最后執(zhí)行NO.1任務(wù)6s測試結(jié)果與預(yù)期相符3、驗證當(dāng)兩個任務(wù)松弛度同時減為0時的執(zhí)行結(jié)果測試說明測試名稱采用最低松弛度優(yōu)先調(diào)度的實時系統(tǒng)調(diào)度程序測

15、試目的驗證兩個任務(wù)松弛度同時減為0時的執(zhí)行結(jié)果是否正確測試技術(shù)功能測試測試方法黑盒測試法測試用例測試內(nèi)容通過文件讀取的方式提交一批任務(wù),其中同時有兩個任務(wù)的松弛度減為0測試步驟輸入可上述任務(wù)測試數(shù)據(jù)任務(wù)總數(shù):3 仿真時間100s 任務(wù)編號 NO.1周期時間 10 s運行時間 1s任務(wù)編號NO.2周期時間 10 s運行時間 1s任務(wù)編號NO.3周期時間18 s運行時間10s預(yù)期結(jié)果調(diào)度程序先執(zhí)行NO.3任務(wù)9s,后執(zhí)行NO.1任務(wù)1s,任務(wù)NO.2被錯過測試結(jié)果與預(yù)期相符2、調(diào)試分析:在程序的調(diào)試中,遇到了如下的問題:1. 在程序讀取文件的任務(wù)信息時,無法讀入仿真時間,OnRadio1() 在該

16、按鈕中的函數(shù)中一步步用MessageBox輸出每一步讀取的參數(shù)信息的值,發(fā)覺每一步的輸出沒有問題,最終發(fā)覺,在Onshuru()將全局變量SumTime又定義了一遍,在此函數(shù)中相當(dāng)于局部變量在使用,因此無法傳參。最終刪掉該定義,而直接使用,運行成功。2. 在程序的最后性能測試中,如果程序接收到任務(wù)隊列,運行一段時間的后,有兩個任務(wù)的松弛度同時減為零了,程序就會運行出錯,到后來發(fā)現(xiàn)了程序出現(xiàn)這個問題的原因,就是程序始終是在選取松弛度最小的任務(wù)調(diào)入運行隊列,當(dāng)遇到兩個松弛度同時為0的任務(wù)時,程序就不知道怎么調(diào)用了。后來我在算法中添加了先來先服務(wù)的調(diào)度算法來輔助實現(xiàn),當(dāng)出現(xiàn)上述情況時就先調(diào)入第一個任

17、務(wù),然后將第二個任務(wù)的松弛度=1000,在將其壓入就緒隊列中。這樣第二個任務(wù)就被錯過一次,在下個周期中,自動更新該任務(wù)的最低松弛度,然后重新參與任務(wù)的調(diào)度,具體參照Show_Qready()和Job_Qiangdiao()五、用戶手冊1、本程序的開發(fā)平臺是VC 6.0 ,無需下載。2、本程序的運行無需任何安裝。3、運行程序:(1)在工程中找到最低松弛度優(yōu)先.exe 的文件雙擊開始運行程序。 圖 1 程序運行的初始界面2)在選項欄的“選擇數(shù)據(jù)輸入方式”中選擇文件讀取選項,彈出選擇文件的對話框,選定要運行的文件后點擊確定即可。 圖2 點擊界面輸入按鍵后,選定文件(3)如果選定文件的數(shù)據(jù)中含有運行周

18、期小于運行時間的非法任務(wù),系統(tǒng)會通過彈出 MessageBox的方式提示用戶輸入錯誤。 圖 3 輸入含有非法任務(wù)(4) 若用戶輸入的任務(wù)中不含有非法任務(wù),此時系統(tǒng)會先將任務(wù)放入就緒隊列中,然后調(diào)用可調(diào)度性檢測函數(shù)來判斷該批任務(wù)是否可以調(diào)度,若不可調(diào)度則提示用戶,并將就緒隊列記錄清空,再初始化Qready。 圖 4 輸入任務(wù)不可調(diào)度(5) 若輸入任務(wù)可以調(diào)度,系統(tǒng)不會給出任何提示,可直接在就緒隊列的列表中顯示就緒隊列的各任務(wù)信息 圖 5 輸入正確的任務(wù)信息,檢查就緒隊列(6) 點擊開始運行按鍵即開始任務(wù)調(diào)度的模擬,三個動態(tài)顯示控件分別用來顯示運行任務(wù),就緒隊列和完成隊列里面各任務(wù)的屬性信息,上下

19、文切換時,提示用戶按下任意鍵繼續(xù)。 圖 6 動態(tài)顯示任務(wù)的調(diào)度過程(7) 若選擇從當(dāng)前的界面輸入時,系統(tǒng)會在用戶輸入運行任務(wù)總數(shù)和運行時間后,隱藏和鎖定這兩個按鍵,從而不再接受關(guān)于這兩個變量的任何輸入。之后用戶只可依次輸入任務(wù)的信息,非法的輸入數(shù)據(jù)在輸入時將會被自動忽略,以及對任務(wù)編號是否重名的檢查。當(dāng)任務(wù)輸入完成時,隱藏“點擊提交本次任務(wù)”。 圖 7 用戶從界面輸入任務(wù)信息(8) 在運行過程中點擊暫停運行繼續(xù)運行終止運行按鍵依次實現(xiàn)程序運行的暫停運行、繼續(xù)運行、和退出當(dāng)前任務(wù)運行的功能。當(dāng)用戶點擊暫停時,就算沒有上下文切換,系統(tǒng)的運行也會停下來,直到用戶點擊繼續(xù)。 圖 8 運行過程中暫停六、

20、程序清單/-文件讀取-void CMyDlg:OnRadio1() / TODO: Add your control notification handler code hereCString s1,s2,name,period,runtime,stuTime;/總時間int sum_job;/限定文件格式CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,text files|*.txt|);if(IDOK=dlg.DoModal()/正常打開s1=dlg.GetPathName();/獲取文件路徑CSt

21、dioFile file;/C 運行時流式文件if(!file.Open(s1,CFile:modeRead)/只讀的方式打開失敗,參數(shù):獲取路徑,打開方式MessageBox(文件打開失敗 );return ;file.ReadString(s2);/開始文件第一行,總?cè)蝿?wù)數(shù)sum_job=atoi(s2);/轉(zhuǎn)換為整數(shù)file.ReadString(stuTime);/仿真時間SumTime=atoi(stuTime);legal=0;for(int i=0;iSetWindowText();InitQueue(Qon);InitQueue(Qdone);InitQueue(Qready)

22、;n2=0;/n2啟動定時器的標(biāo)識 n=0;/若n為0,則從就緒隊列中取出一個滿足要求的作業(yè)運行return ;CMyDlg:DiaoDu();/-讀取任務(wù)信息-int CMyDlg:DuQu(CString s1, CString s2, CString s3) int i,j;i=atoi(s2);j=atoi(s3);if(i=0|j=0|ijob_beginTime=0; job-job_doneTimes=0; job-job_flag=0; job-job_id=s1; job-job_identify=0; job-job_llf=i-j; job-job_MissTimes=0

23、; job-job_period=i; job-job_RneedTime=j; job-job_runTime=j; job-job_state=就緒; if(SameFileName(Qready,job)/若沒有重名OrderJob(Qready,job);/進入的作業(yè),按照最低松弛度進行排序 CMyDlg:Show_Qready();/讀取成功,作業(yè)顯示在就緒隊列return 1;elseMessageBox(任務(wù)編號有重名,請重新輸入!);return 0;/-任務(wù)調(diào)度性檢查-int CMyDlg:DiaoDu() float judge=0.0;if(!QueueEmpty(Qre

24、ady)POINT_QNode p;p=Qready.front-next;while(p) judge=judge+(float)p-data-job_runTime/(float)p-data-job_period;p=p-next;if(judge1.0)MessageBox(輸入不符合要求,不可調(diào)度!);DestroyQueue(Qready);InitQueue(Qready);m_list2.DeleteAllItems();return 0; else return 1; else return 0;/-正在執(zhí)行的作業(yè)在正常結(jié)束的情況下作業(yè)切換-int CMyDlg:Job_Di

25、ao() POINT_work job; job=new(work);if(!QueueEmpty(Qon)/將已完成的任務(wù)投入完成隊列 DeleteHead(Qon,job); job-job_flag=0; job-job_identify=1; job-job_doneTimes+; job-job_llf=(job-job_doneTimes+1)*job-job_period-count-job-job_runTime; job-job_state=完成; job-job_endTime=count; GetFirstPosition(Qdone,job);/放入完成隊列的首位置if

26、(job-job_MissTimes+job-job_doneTimes)*job-job_period=int(count)/完成隊列的任務(wù)進入下一周期,需投入到就緒隊列 DeleteHead(Qdone,job); job-job_llf=(job-job_MissTimes+job-job_doneTimes+1)*job-job_period-count-job-job_runTime; job-job_state=就緒; OrderJob1(Qready,job);if(!QueueEmpty(Qready)/就緒隊列不空,取隊頭任務(wù) DeleteHead(Qready,job);

27、job-job_state=執(zhí)行; OrderJob(Qon,job); left_Time=job-job_RneedTime;return 1;/-實現(xiàn)搶占時作業(yè)的上下文切換-int CMyDlg:Job_Qiangdiao() POINT_work job;job=new(work);if(!QueueEmpty(Qon)/若隊列不為空,則取出已經(jīng)運行過的作業(yè),再投入就緒隊列等待DeleteHead(Qon,job);job-job_llf=(job-job_MissTimes+job-job_doneTimes+1) * (job-job_period) - count -job-jo

28、b_RneedTime;job-job_state=就緒;job-job_flag=1;job-job_identify=0;OrderJob(Qready,job);if(!QueueEmpty(Qready)/若就緒隊列不空,則取出隊頭作業(yè)運行DeleteHead(Qready,job);job-job_state=執(zhí)行;OrderJob(Qon,job);/left_Time=job-job_RneedTime;return 1;/-顯示就緒隊列-int CMyDlg:Show_Qready() CString period,runtime,llf,rneedtime;CMyDlg:Sh

29、ow_Qdone();/Q.ready的很多作業(yè)是有Q.done傳遞過去的if(!QueueEmpty(Qready)/如果不為空int flag=0;m_list2.DeleteAllItems();/所有的顯示都是靜態(tài)的,要清除顯示POINT_QNode p;loop1:p=Qready.front-next; int i=0;/記錄表的行數(shù) while(p)/p指向第一個有效元素 if(QueueEmpty(Qon) & count!=0)/沒有正在執(zhí)行的且運行時間不為0 都在完成隊列中,沒有進入下一周期n1=0;n0=1;/要進行上下文切換,將n0置為1CMyDlg:Job_Qiang

30、diao();/上下文切換,但Q.ready也沒有作業(yè),所以執(zhí)行了也看不出來goto loop1;if(p-data-job_identify=1)/若果該作業(yè)已經(jīng)完整地運行過,則應(yīng)重新開始運行,將剩余時間變?yōu)樾鑸?zhí)行時間,不屬于切換p-data-job_RneedTime=p-data-job_runTime;if(p-data-job_llf=1000)if(p-data-job_period *(p-data-job_MissTimes+ p-data-job_doneTimes)=int (count)p-data-job_llf=(p-data-job_MissTimes+p-data

31、-job_doneTimes+1)*(p-data-job_period)-count-(p-data-job_RneedTime);p-data-job_llf=(p-data-job_MissTimes+p-data-job_doneTimes+1)*(p-data-job_period)-count-(p-data-job_RneedTime);period.Format(%d,p-data-job_period);runtime.Format(%d,p-data-job_runTime);llf.Format(%d,p-data-job_llf);rneedtime.Format(%d

32、,p-data-job_RneedTime);if(flag=0)if(p-data-job_llf=0)/如果就緒隊列里的一個作業(yè)最低松弛度變?yōu)?,且正在執(zhí)行隊列里的作業(yè)沒執(zhí)行完,則搶斷,否則為正常執(zhí)行POINT_work job;flag=1;job=new(work);/先申請一塊內(nèi)存,使得GetHeadElem(Qon,job);的頭結(jié)點得以保存GetHeadElem(Qon,job);if(job-job_RneedTime!=0)/搶占的情況n1=0;/是否被搶斷的標(biāo)志 此次周期內(nèi)第一次執(zhí)行n0=1;/n0是在上下文切表示,kill時鐘CMyDlg:Job_Qiangdiao();

33、/先來先服務(wù)的上下切換goto loop1;else;if(flag=1)if(p-data-job_llf=0)p-data-job_MissTimes+;p-data-job_llf=1000;OrderQueue(Qready);/放入就緒隊列m_list2.DeleteAllItems();goto loop1;m_list2.InsertItem(i,NULL);m_list2.SetItemText(i,0,p-data-job_id);m_list2.SetItemText(i,1,p-data-job_state);m_list2.SetItemText(i,2,period)

34、;m_list2.SetItemText(i,3,runtime);m_list2.SetItemText(i,4,llf);m_list2.SetItemText(i,5,rneedtime);i+;p=p-next; else m_list2.DeleteAllItems();return 1;七、體會與自我評價這次操作系統(tǒng)課設(shè)題目是采用最低松弛度優(yōu)先調(diào)度的實時系統(tǒng)調(diào)度程序的模擬,剛開始對他的了解僅限于課本上的算法例子,未曾想過用可視化的界面呈現(xiàn)出一個完整的運行過程。由于是大二下做C+的課程設(shè)計才用到過MFC,之后就沒有用過,所以當(dāng)決定用MFC做以呈現(xiàn)可視化時,決定重新溫習(xí)一遍MFC的知識。包括去網(wǎng)上找孫鑫視頻(講MFC部分)以及去圖書館借相關(guān)書籍。由于此次課程設(shè)計要求以動態(tài)結(jié)果顯示各任務(wù)的完成情況,所以免不了要運用到隊列相關(guān)知識。之前學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)不是很強,尤其是對于指針部分。所以這次特別再看了一遍數(shù)據(jù)結(jié)構(gòu)書本和以前的PPT,還有參考了一本數(shù)據(jù)結(jié)構(gòu)與算法(C語言版)。發(fā)覺隊列運用鏈表和指針,確實很方便。通過這次的學(xué)習(xí),更加鞏固了數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識,同時對指針的理解更加深刻,不再向以前望而生畏。課程設(shè)計中雖然知道當(dāng)最低松弛度降為0的時候,會搶占,但是對于如何搶占,被搶占的作業(yè)如何保存當(dāng)

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論