实时调度算法之EDF算法

最早截止时间优先即EDF(Earliest Deadline First)算法

该算法是根据任务的开始截止时间来确定任务的优先级。截止时间愈早,其优先级愈高。该算法要求在系统中保持一个实时任务就绪队列,该队列按各任务截止时间的早晚排序;当然,具有最早截止时间的任务排在队列的最前面。调度程序在选择任务时,总是选择就绪队列中的第一个任务,为之分配处理机,使之投入运行。最早截止时间优先算法既可用于抢占式调度,也可用于非抢占式调度方式中。

(1)非抢占式调度方式用于非周期实时任务

下图示出了将该算法用于非抢占式调度方式之例。该例子中具有四个非周期任务,它们先后到达。系统首先调度任务1执行,在任务1执行期间,任务2、3又先后到达。由于任务3的开始截止时间早于任务2,故系统在任务1后将调度任务3执行。在次期间又到达作业4,其开始截止时间仍是早于任务2的,故在任务3执行完后,系统又调度任务4执行,最后才调度任务2执行。
在这里插入图片描述

(2)抢占式调度方式用于周期实时任务

下图示出了将最早截止时间优先算法用于抢占式调度方式之例。在该例中有两个周期性任务,任务A的周期时间为20ms,每个周期的处理时间为10ms;任务B的周期时间为50ms,每个周期的处理时间为25ms。图中的每一行示出了两个任务的到达时间、最后期限和执行时间图。其中任务A的到达时间为0,20,40,···;任务A的最后期限为20,40,60,···;任务B的到达时间为0,50,100,···;任务B的最后期限为50,100,150,···。
在这里插入图片描述
为了说明通常的优先级调度不能适用于实时系统,该图特增加了第二和第三行。在第二行中假定任务A具有较高的优先级,所以在t=0ms 时,先调度A1执行,在A1完成后(t=10ms)才调度B1执行;在t=20ms时,调度A2执行;在t=30ms时,A2完成,又调度B1执行;在t=40ms时,调度A3执行;在t=50ms时,虽然A3已完成,但B1已错过了它的最后期限,这说明了利用通常的优先级调度已经失败,第三行与第二行类似,只是假定任务B具有较高的优先级。
第四行是采用最早截止时间优先算法的时间图。在t=0时,A1和B1同时到达,由于A1的截止时间比B1早,故调度A1执行;在t=10时,A1完成,又调度B1执行;在t=20时,A2到达,由于A2的截止时间比B2早,B1的截止时间要比A3早,仍应让B1继续执行直到完成(t=45),然后再调度A3执行;在t=55时,A3完成,又调度B2执行。在该例中利用最早截止时间优先算法可以满足系统的要求。

### EDF与RMS的区别、实现及使用场景 #### 区别 EDF(Earliest Deadline First)和RMS(Rate Monotonic Scheduling)是两种主要的实时调度算法,它们在任务优先级分配和调度策略上存在显著差异。EDF根据任务的截止时间动态调整优先级,截止时间越早的任务优先级越高[^1]。相比之下,RMS采用静态优先级分配方式,任务的优先级由其周期决定,周期越短的任务优先级越高[^2]。 #### 实现 ##### EDF实现 EDF算法的核心在于维护一个实时任务就绪队列,队列中的任务按照截止时间排序,最早截止时间的任务排在队列最前面。调度器每次选择队列中的第一个任务执行,确保当前具有最早截止时间的任务能够获得处理机资源。以下是EDF的一个简单伪代码实现: ```python def edf_scheduler(tasks): while tasks: # 选择最早截止时间的任务 current_task = min(tasks, key=lambda task: task.deadline) # 分配处理机并运行任务 run_task(current_task) # 更新任务列表 tasks.remove(current_task) ``` ##### RMS实现 RMS算法通过静态优先级分配,在任务初始化时确定每个任务的优先级。调度器根据任务优先级顺序选择任务执行。以下是RMS的一个简单伪代码实现: ```python def rms_scheduler(tasks): # 根据任务周期分配静态优先级 tasks.sort(key=lambda task: task.period) while tasks: # 按照优先级顺序选择任务 current_task = tasks[0] run_task(current_task) ``` #### 使用场景 EDF适用于动态任务集和不可预测的任务到达场景,因为它能够灵活地根据任务的截止时间调整优先级[^1]。例如,在嵌入式系统中,如果任务的截止时间频繁变化或任务集不固定,EDF可能是更好的选择。然而,EDF的实现需要较高的开销,因为它需要不断对任务队列进行排序。 RMS更适合静态任务集和可预测的任务到达场景,因为它的优先级分配在任务初始化时完成,无需动态调整[^2]。例如,在航空航天控制系统中,任务周期通常是固定的,RMS可以提供更高效的调度性能。 #### 性能比较 理论上,所有负载小于等于1的任务集使用EDF都是可调度的。而RMS的可调度性取决于任务集的利用率,通常要求利用率不超过某个特定值(如n个任务的最大利用率为n(2^(1/n) - 1))。因此,在某些情况下,EDF可能比RMS更具优势。 ---
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值