- 相關推薦
實時調度算法
EDF實時調度算
一、基本思想:
在該實驗中有兩個周期性任務A、B,A的周期時間為20ms,每個周期的處理時間為10ms;任務B的周期時間為50ms,每個周期的處理時間為25ms。 在t=0是,A1和B1同時到達,由于A1的截止時間比B1早,故調度A1執行;在t=10時,A1完成,又調度B1執行;在t=20時,A2到達,由于A2的截止時間比B2早,B1被中斷而調度A2執行;在t=30時,A2完成,又重新調度B1執行;在t=40時,A3到達,但B1的截止時間要比A3早,仍執行B1,在t=45時,B1執行完,再調度A3執行;在t=55時,A3完成,調度B2執行。該實驗將最早截止時間優先算法用于搶占調度方式。在該實驗中,定義了兩個開關來判斷兩個任務是中斷還是調度執行。
二、源程序代碼:
#include
int main()
{
int A,B;
int tA,tB,serveA,serveB; //進程的周期時間和處理時間
float m;
int i,j,a=0,b=0,ka=0,kb=0; //ka,kb為開關,i,j,a,b為進程下標
int numa=0,numb=0; //處理累計時間
printf("輸入進程A的周期時間和處理時間:");
scanf("%d%d",&tA,&serveA);
printf("輸入進程B的周期時間和處理時間:");
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) //進程A完成
{
numa=serveA+1;
printf("當T=%d時",T);
printf("進程A%d完成\n",a);
if(numb
{
printf(" 調度進程B%d\n",b);
kb=1;
}
ka=0;
}
if(numb==serveB)
{
numb=serveB+1;
printf("當T=%d時",T);
printf("進程B%d結束\n",b);
if(numa
{
printf(" 調度進程A%d\n",a);
ka=1;
}
kb=0;
}
if(T%tA==0 && T%tB==0)
{
A=B=T;
j=++a;
i=++b;
printf("當T=%d時,進程A%d和進程B%d同時到達,此時,",T,j,i); if(tA<=tB)
{
printf("調度進程A%d,中斷進程B%d\n",j,i);
ka=1;
kb=0;
}
else
{
printf("調度進程B%d,中斷進程A%d\n",i,j);
ka=0;
kb=1;
}
numa=numb=0;
}
if(T%tA==0&&T%tB!=0)
{
A=T;
printf("當T=%d時",T);
printf("進程A%d到達 ",++a); //不可能與進程A競爭處理器 numa=0;
if(numb
if(B+tB>A+tA) //若進程B最早截止時間大于進程A的 {
printf("進程A%d執行。\n",a);
ka=1;
kb=0;
}
else //若進程B最早截止時間小于等于進程A的
printf("進程B%d繼續執行。\n",b);
else //進程B完成
{
printf("進程A%d執行。\n",a);
ka=1;
}
}
if(T%tA!=0&&T%tB==0)
{
B=T;
printf("當T=%d時",T);
printf("進程B%d到達,",++b); //不可能與進程B競爭處理器
numb=0;
if(numa
if(B+tB>=A+tA) //進程A的最早截止時間不小于B printf("進程A%d繼續執行。\n",a);
else
{
printf("進程B%d執行。\n",b);
kb=1;
ka=0;
}
else //進程A完成
{
printf("進程B%d執行。\n",b);
kb=1; 實時調度算法 }
}
if(ka)
numa++;
if(kb)
numb++;
}
return 1;
}
三、實驗結果截圖:
【實時調度算法】相關文章:
動態車間調度算法04-27
基于UKF的測速定軌實時算法04-30
基于A*算法的實時航跡規劃方法研究05-01
車輛調度問題的混合算法04-28
車輛優化調度算法研究初探04-27
多軸液壓聯動實時插補控制算法04-28
靶場彈道跟蹤實時數據平滑算法及實現05-02
雙通道角跟蹤體制實時校相算法研究05-02
光電圖像序列運動弱目標實時檢測算法04-28
基于Memetic算法的飛機著陸調度優化04-27