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<stdio.h>
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 的处理能力!");
return 0;
}
if(numa==serveA) //进程 A 完成
{
numa=serveA+1;
printf("当 T=%d 时",T);
printf("进程 A%d 完成",a);
if(numb<serveB)
{
printf(" 调度进程 B%d",b);
kb=1;