資源描述:
《最早期限優(yōu)先調(diào)度算法(EDF)實驗報告.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、實驗報告實驗名稱:最早期限優(yōu)先調(diào)度算法(EDF)實驗一、實驗?zāi)康?)了解實時調(diào)度,了解最早截止期優(yōu)先算法(EDF算法);2)使用C語言實現(xiàn)最早截止期優(yōu)先算法(EDF算法);3)計算多個任務(wù)的調(diào)度順序。二、實驗原理最早截止期優(yōu)先算法(EDF),也稱為最早死限調(diào)度算法(DDS),是一種采用動態(tài)調(diào)度的優(yōu)先級調(diào)度算法,任務(wù)的優(yōu)先級根據(jù)任務(wù)的截止時間來確定。任務(wù)的截止時間越近,任務(wù)的優(yōu)先級越高;任務(wù)的截止時間越遠,任務(wù)額優(yōu)先級越低。當有新的任務(wù)處于就緒狀態(tài)時,任務(wù)的優(yōu)先級就有可能需要進行調(diào)整。EDF算法的測試如果所有的任務(wù)都是周
2、期性的,并且對應(yīng)的時間限等于它們的周期,對任務(wù)集的調(diào)度性的測試是非常簡單的:如果任務(wù)集的總利用率不大于1,那么任務(wù)集就可以由EDF算法在一個單處理器上進行合理的調(diào)度。對于那些任務(wù)的時間限并不全等于其周期的情況,沒有簡答的調(diào)度性測試。在這樣的情況下,需要使用EDF算法生成一個時間表,來判斷是不是在一個給定的時間區(qū)間內(nèi)所有的時間限都被滿足。在這種情況下EDF的一個可調(diào)度性測試如下:定義,以及_D_Dd__________?┬?〖_/()┬()?〖__〗〗___________________________________
3、或存在某個使得(其中n為任務(wù)集中任務(wù)的數(shù)量;為任務(wù)的執(zhí)行時間;為周期任務(wù)的周期;為任務(wù)的相對時間限;為在絕對時間不遲于t的任務(wù)集合T中,所有重復(fù)的任務(wù)執(zhí)行時間和。)一、實驗儀器硬件:PC機;軟件:Windows7,VisualStudio2010集成開發(fā)環(huán)境二、實驗步驟1)理解EDF調(diào)度算法的原理并通過實例用EDF算法判斷多任務(wù)的調(diào)度順序。2)新建EDF.h頭文件,在其中定義變量,結(jié)構(gòu)體,函數(shù)。3)新建input.c文件,用input函數(shù)從鍵盤獲取多個任務(wù)的名稱、執(zhí)行時間、周期和釋放時間,將任務(wù)分成一個個時間片存在數(shù)組
4、中,并輸出數(shù)組和各時間片屬性。4)新建edf.c文件,用EDF函數(shù)將數(shù)組中的時間片根據(jù)截止時間的大小從小到大進行排序,輸出它們的截止時間排序,再判斷是否可調(diào)度,若是不可調(diào)度輸出“不可調(diào)度!”,若是可調(diào)度輸出調(diào)度順序。5)新建main.c文件,在其中調(diào)用input函數(shù)和EDF函數(shù)。6)編譯運行程序,輸入多個任務(wù)調(diào)試程序至結(jié)果無誤。1)對實驗進行分析、反思,與同學討論。一、實驗結(jié)果程序完成后,輸入了多種情況進行驗證,運行結(jié)果正確,符合按照最早截止期優(yōu)先算法得出的結(jié)果。1)不可調(diào)度當五個任務(wù)的執(zhí)行時間和周期都為1時,是不可調(diào)
5、度的。(由EDF算法的測試可知)2)可調(diào)度當五個任務(wù)的執(zhí)行時間和周期分別為1、3,2、12,1、6,1、4,3、20,釋放時間分別為0,1,0,1,0時,是可調(diào)度的。結(jié)果如下:一、實驗分析與討論1)編程前要理解清楚算法。對算法理解不清就編寫代碼實現(xiàn),那么寫出來的程序與計算出來的結(jié)果會不一致、運行不正確。重新理解算法,調(diào)試程序,會造成不必要的時間浪費。2)實驗前一定要做好實驗設(shè)計。如變量設(shè)置,功能語句設(shè)計等。否則在編寫程序的過程中容易出現(xiàn)思維邏輯不清晰,無法繼續(xù)實現(xiàn)必需功能的問題。這樣仍然會造成不必要的時間浪費。附:源代
6、碼//EDF.h#include#include#definen5intnumber;intschedule[1000][2];intFS[1000][2];structProgram{intname;intrun;intperiod;intrelease;}A[1000];voidInput();voidEDF();//input.c/*************輸入*************/#include"EDF.h"voidInput(){//programA[n];ch
7、ars;inti,j,k;intname,run,period,release;number=0;for(i=0;i<5;i++)/*i是任務(wù)個數(shù)*/{????????????????printf("Program'sname,Executiontime,Period(=Deadline),Releasetime:");????????????????scanf("%d%d%d%d",&name,&run,&period,&release);????????????????k=0;????????????????whi
8、le(k<5)/*k是周期數(shù)*/????????????????{????????????????????????????????for(j=0;j