實(shí)時(shí)調(diào)度算法

時(shí)間:2023-04-30 23:00:37 資料 我要投稿
  • 相關(guān)推薦

實(shí)時(shí)調(diào)度算法

EDF實(shí)時(shí)調(diào)度算

一、基本思想:

在該實(shí)驗(yàn)中有兩個(gè)周期性任務(wù)A、B,A的周期時(shí)間為20ms,每個(gè)周期的處理時(shí)間為10ms;任務(wù)B的周期時(shí)間為50ms,每個(gè)周期的處理時(shí)間為25ms。 在t=0是,A1和B1同時(shí)到達(dá),由于A1的截止時(shí)間比B1早,故調(diào)度A1執(zhí)行;在t=10時(shí),A1完成,又調(diào)度B1執(zhí)行;在t=20時(shí),A2到達(dá),由于A2的截止時(shí)間比B2早,B1被中斷而調(diào)度A2執(zhí)行;在t=30時(shí),A2完成,又重新調(diào)度B1執(zhí)行;在t=40時(shí),A3到達(dá),但B1的截止時(shí)間要比A3早,仍執(zhí)行B1,在t=45時(shí),B1執(zhí)行完,再調(diào)度A3執(zhí)行;在t=55時(shí),A3完成,調(diào)度B2執(zhí)行。該實(shí)驗(yàn)將最早截止時(shí)間優(yōu)先算法用于搶占調(diào)度方式。在該實(shí)驗(yàn)中,定義了兩個(gè)開關(guān)來判斷兩個(gè)任務(wù)是中斷還是調(diào)度執(zhí)行。

二、源程序代碼:

#include

int main()

{

int A,B;

int tA,tB,serveA,serveB; //進(jìn)程的周期時(shí)間和處理時(shí)間

float m;

int i,j,a=0,b=0,ka=0,kb=0; //ka,kb為開關(guān),i,j,a,b為進(jìn)程下標(biāo)

int numa=0,numb=0; //處理累計(jì)時(shí)間

printf("輸入進(jìn)程A的周期時(shí)間和處理時(shí)間:");

scanf("%d%d",&tA,&serveA);

printf("輸入進(jìn)程B的周期時(shí)間和處理時(shí)間:");

scanf("%d%d",&tB,&serveB);

m=(float)serveA/tA+(float)serveB/tB;

for(int T=0;T<=100;T++)

{

if(m-1>1e-6)

{

printf("超出CPU的處理能力!\n");

return 0;

}

if(numa==serveA) //進(jìn)程A完成

{

numa=serveA+1;

printf("當(dāng)T=%d時(shí)",T);

printf("進(jìn)程A%d完成\n",a);

if(numb

{

printf(" 調(diào)度進(jìn)程B%d\n",b);

kb=1;

}

ka=0;

}

if(numb==serveB)

{

numb=serveB+1;

printf("當(dāng)T=%d時(shí)",T);

printf("進(jìn)程B%d結(jié)束\n",b);

if(numa

{

printf(" 調(diào)度進(jìn)程A%d\n",a);

ka=1;

}

kb=0;

}

if(T%tA==0 && T%tB==0)

{

A=B=T;

j=++a;

i=++b;

printf("當(dāng)T=%d時(shí),進(jìn)程A%d和進(jìn)程B%d同時(shí)到達(dá),此時(shí),",T,j,i); if(tA<=tB)

{

printf("調(diào)度進(jìn)程A%d,中斷進(jìn)程B%d\n",j,i);

ka=1;

kb=0;

}

else

{

printf("調(diào)度進(jìn)程B%d,中斷進(jìn)程A%d\n",i,j);

ka=0;

kb=1;

}

numa=numb=0;

}

if(T%tA==0&&T%tB!=0)

{

A=T;

printf("當(dāng)T=%d時(shí)",T);

printf("進(jìn)程A%d到達(dá) ",++a); //不可能與進(jìn)程A競爭處理器 numa=0;

if(numb

if(B+tB>A+tA) //若進(jìn)程B最早截止時(shí)間大于進(jìn)程A的 {

printf("進(jìn)程A%d執(zhí)行。\n",a);

ka=1;

kb=0;

}

else //若進(jìn)程B最早截止時(shí)間小于等于進(jìn)程A的

printf("進(jìn)程B%d繼續(xù)執(zhí)行。\n",b);

else //進(jìn)程B完成

{

printf("進(jìn)程A%d執(zhí)行。\n",a);

ka=1;

}

}

if(T%tA!=0&&T%tB==0)

{

B=T;

printf("當(dāng)T=%d時(shí)",T);

printf("進(jìn)程B%d到達(dá),",++b); //不可能與進(jìn)程B競爭處理器

numb=0;

if(numa

if(B+tB>=A+tA) //進(jìn)程A的最早截止時(shí)間不小于B printf("進(jìn)程A%d繼續(xù)執(zhí)行。\n",a);

else

{

printf("進(jìn)程B%d執(zhí)行。\n",b);

kb=1;

ka=0;

}

else //進(jìn)程A完成

{

printf("進(jìn)程B%d執(zhí)行。\n",b);

kb=1; 實(shí)時(shí)調(diào)度算法 }

}

if(ka)

numa++;

if(kb)

numb++;

}

return 1;

}

三、實(shí)驗(yàn)結(jié)果截圖:

【實(shí)時(shí)調(diào)度算法】相關(guān)文章:

動態(tài)車間調(diào)度算法04-27

基于UKF的測速定軌實(shí)時(shí)算法04-30

基于A*算法的實(shí)時(shí)航跡規(guī)劃方法研究05-01

車輛調(diào)度問題的混合算法04-28

車輛優(yōu)化調(diào)度算法研究初探04-27

多軸液壓聯(lián)動實(shí)時(shí)插補(bǔ)控制算法04-28

靶場彈道跟蹤實(shí)時(shí)數(shù)據(jù)平滑算法及實(shí)現(xiàn)05-02

雙通道角跟蹤體制實(shí)時(shí)校相算法研究05-02

光電圖像序列運(yùn)動弱目標(biāo)實(shí)時(shí)檢測算法04-28

基于Memetic算法的飛機(jī)著陸調(diào)度優(yōu)化04-27