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