实时调度最早截止时间优先算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实时调度最早截止时间优先算法

一、设计思路

最早截止时间算法是根据任务的开始截止时间来确定任务的优先级,截止时间愈早,其优先级愈高,我以书上的抢占式调度方式用于周期实时任务的例子来编写程序,在该例中有两个周期性任务,我设计的可以输入这两个的周期时间和服务时间,然后比较它们的截止时间,哪个截止时间早就谁先执行,在单处理机情况下,必须满足∑Ci/Pi<=1,我用的是C语言编写的,只用到了一些简单的if语句for循环语句。

二、运行结果和功能

1.输入进程A的周期时间和服务时间、B的周期时间和服务时间

2.回车后执行实时调度最早截止时间优先算法,可得到下列结果

三、源程序代码

#include

int main()

{

int A,B; //标记进程A,进程B的到达时间

int cycA,cycB,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",&cycA,&serveA);

printf("输入进程B的周期时间,服务时间:");

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

m=(float)serveA/cycA+(float)serveB/cycB;

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%cycA==0 && T%cycB==0)

{

A=B=T;

j=++a;

i=++b;

printf("当T=%d时,进程A%d和进程B%d同时产生,此时,",T,j,i);

if(cycA<=cycB)

{

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%cycA==0&&T%cycB!=0)

{

A=T;

printf("当T=%d时",T);

printf("进程A%d产生",++a); //不可能与进程A竞争处理器

numa=0;

if(numb

if(B+cycB>A+cycA) //若进程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%cycA!=0&&T%cycB==0)

{

B=T;

printf("当T=%d时",T);

printf("进程B%d产生,",++b); //不可能与进程B竞争处理器numb=0;

if(numa

if(B+cycB>=A+cycA) //进程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;

}

相关文档
最新文档