資源描述:
《最早截止時(shí)間優(yōu)先算法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、實(shí)時(shí)調(diào)度最早截止時(shí)間優(yōu)先算法一、設(shè)計(jì)思路最早截止時(shí)間算法是根據(jù)任務(wù)的開(kāi)始截止時(shí)間來(lái)確定任務(wù)的優(yōu)先級(jí),截止時(shí)間愈早,其優(yōu)先級(jí)愈高,我以書上的搶占式調(diào)度方式用于周期實(shí)時(shí)任務(wù)的例子來(lái)編寫程序,在該例中有兩個(gè)周期性任務(wù),我設(shè)計(jì)的可以輸入這兩個(gè)的周期時(shí)間和服務(wù)時(shí)間,然后比較它們的截止時(shí)間,哪個(gè)截止時(shí)間早就誰(shuí)先執(zhí)行,在單處理機(jī)情況下,必須滿足∑Ci/Pi<=1,我用的是C語(yǔ)言編寫的,只用到了一些簡(jiǎn)單的if語(yǔ)句for循環(huán)語(yǔ)句。二、運(yùn)行結(jié)果和功能1.輸入進(jìn)程A的周期時(shí)間和服務(wù)時(shí)間、B的周期時(shí)間和服務(wù)時(shí)間2.回車后執(zhí)行實(shí)時(shí)調(diào)度最早
2、截止時(shí)間優(yōu)先算法,可得到下列結(jié)果三、源程序代碼#includeintmain(){intA,B;//標(biāo)記進(jìn)程A,進(jìn)程B的到達(dá)時(shí)間intcycA,cycB,serveA,serveB;//進(jìn)程的周期時(shí)間和服務(wù)時(shí)間floatm;inti,j,a=0,b=0,ka=0,kb=0;//ka,kb為開(kāi)關(guān),i,j,a,b為進(jìn)程下標(biāo)intnuma=0,numb=0;//服務(wù)累計(jì)時(shí)間printf("輸入進(jìn)程A的周期時(shí)間,服務(wù)時(shí)間:");scanf("%d%d",&cycA,&serveA);printf("輸入
3、進(jìn)程B的周期時(shí)間,服務(wù)時(shí)間:");scanf("%d%d",&cycB,&serveB);m=(float)serveA/cycA+(float)serveB/cycB;for(intT=0;T<=100;T++){if(m-1>1e-6){printf("超出CPU的處理能力!");return0;}if(numa==serveA)//進(jìn)程A完成{numa=serveA+1;printf("當(dāng)T=%d時(shí)",T);printf("進(jìn)程A%d結(jié)束",a);if(numb4、進(jìn)程b%d",b);kb=1;}ka=0;}if(numb==serveB){numb=serveB+1;printf("當(dāng)T=%d時(shí)",T);printf("進(jìn)程B%d結(jié)束",b);if(numa5、A%d,阻塞進(jìn)程B%d",j,i);ka=1;kb=0;}else{printf("調(diào)用進(jìn)程B%d,阻塞進(jìn)程A%d",i,j);ka=0;kb=1;}numa=numb=0;}if(T%cycA==0&&T%cycB!=0){A=T;printf("當(dāng)T=%d時(shí)",T);printf("進(jìn)程A%d產(chǎn)生",++a);//不可能與進(jìn)程A競(jìng)爭(zhēng)處理器numa=0;if(numbA+cycA)//若進(jìn)程B最早截止時(shí)間大于進(jìn)程A的{printf("進(jìn)程A%d執(zhí)行。
6、",a);ka=1;kb=0;}else//若進(jìn)程B最早截止時(shí)間小于等于進(jìn)程A的printf("進(jìn)程B%d繼續(xù)執(zhí)行。",b);else//進(jìn)程B完成{printf("進(jìn)程A%d執(zhí)行。",a);ka=1;}}if(T%cycA!=0&&T%cycB==0){B=T;printf("當(dāng)T=%d時(shí)",T);printf("進(jìn)程B%d產(chǎn)生,",++b);//不可能與進(jìn)程B競(jìng)爭(zhēng)處理器numb=0;if(numa=A+cycA)//進(jìn)程A的最早截止時(shí)間不小于B
7、printf("進(jìn)程A%d繼續(xù)執(zhí)行。",a);else{printf("進(jìn)程B%d執(zhí)行。",b);kb=1;ka=0;}else//進(jìn)程A完成{printf("進(jìn)程B%d執(zhí)行。",b);kb=1;}}if(ka)numa++;if(kb)numb++;}return1;}