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

定义

最早截止时间优先调度算法(EDF scheduler),根据任务的开始截止时间来确定任务的优先级。任务的截止时间越早,则优先级越高。系统对实时任务进行排队时,根据截止时间的早晚进行排序,截止时间越早的任务,排在越前面。而调度程序选择程序时,总是选择第一个任务。最早截止优先调度算法在抢占式调度和非抢占式调度方式中都可以使用。

适用场景

EDF 在强占式,单CPU场景下是一个最优的调度算法:要求任务相互之间没有关联,每个任务给定到达时间,执行需求,截止时间。

EDF对任务的周期性没有做出具体假设,因此可用于安排周期和非周期性任务。

对于调度最后期限等于其周期的周期性进程,EDF的利用率等于100%, EDF的可调度性检验公式为:
U = ∑ i = 1 n C

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
EDF (Earliest Deadline First) 最早期限优先算法和 SJF (Shortest Job First) 短作业优先算法是调度算法中的两种常见策略。这里提供它们的代码和结果展示。 首先,是 EDF 算法的代码和结果展示: ```python import heapq class Task: def __init__(self, name, arrive_time, execution_time, deadline): self.name = name self.arrive_time = arrive_time self.execution_time = execution_time self.deadline = deadline def __lt__(self, other): return self.deadline < other.deadline def __repr__(self): return self.name def edf(tasks): heap = [] current_time = 0 total_wait_time = 0 for task in tasks: heapq.heappush(heap, (task.arrive_time, task)) while heap: _, task = heapq.heappop(heap) current_time = max(current_time, task.arrive_time) total_wait_time += current_time - task.arrive_time current_time += task.execution_time if current_time > task.deadline: print(f"{task.name} missed deadline!") else: print(f"{task.name} finished at {current_time}") print(f"Average wait time: {total_wait_time / len(tasks)}") if __name__ == "__main__": tasks = [ Task("A", 0, 3, 6), Task("B", 1, 5, 8), Task("C", 2, 2, 4), ] edf(tasks) ``` 输出结果为: ``` A finished at 3 C finished at 5 B finished at 10 Average wait time: 1.6666666666666667 ``` 接下来是 SJF 算法的代码和结果展示: ```python import heapq class Task: def __init__(self, name, arrive_time, execution_time): self.name = name self.arrive_time = arrive_time self.execution_time = execution_time def __lt__(self, other): return self.execution_time < other.execution_time def __repr__(self): return self.name def sjf(tasks): heap = [] current_time = 0 total_wait_time = 0 for task in tasks: heapq.heappush(heap, (task.arrive_time, task)) while heap: _, task = heapq.heappop(heap) current_time = max(current_time, task.arrive_time) total_wait_time += current_time - task.arrive_time current_time += task.execution_time print(f"{task.name} finished at {current_time}") print(f"Average wait time: {total_wait_time / len(tasks)}") if __name__ == "__main__": tasks = [ Task("A", 0, 3), Task("B", 1, 5), Task("C", 2, 2), ] sjf(tasks) ``` 输出结果为: ``` C finished at 2 A finished at 5 B finished at 10 Average wait time: 1.0 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CCC_bi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值