文章目录
实时调度的基本条件
1. 硬实时性
硬实时性意味着任务必须在其截止时间之前完成。如果任务未能在规定的时间内完成,系统可能会产生严重的后果。这种情况通常出现在飞行控制系统等对时间要求极高的领域。
2. 软实时性
软实时性要求任务在截止时间之前完成,但允许偶尔的错过截止时间,只要这种情况不会导致系统严重故障。例如,视频流处理应用可以容忍偶尔的帧丢失。
3. 周期性
任务通常按照固定的时间间隔运行,这些时间间隔被称为任务周期。这有助于规划和调度任务,确保它们按时执行。
4. 预测性
实时系统需要能够准确地预测任务的执行时间,以便有效地分配资源和调度任务。
实时调度算法分类
实时调度算法可以分为两类:抢占式调度算法和非抢占式调度算法。
1. 抢占式调度算法
1.1 优先级调度
优先级调度是一种基于任务优先级的算法,具有较高优先级的任务将在具有较低优先级的任务之前执行。这种算法适用于需要严格控制任务优先级的系统。
while True:
task = select_highest_priority_task()
execute_task(task)
1.2 最早截止时间优先(EDF)
最早截止时间优先算法会选择具有最早截止时间的任务来执行。这种算法通常用于软实时系统。
while True:
task = select_earliest_deadline_task()
execute_task(task)
2. 非抢占式调度算法
2.1 固定优先级调度
固定优先级调度算法中,每个任务被分配一个固定的优先级,不会在运行时改变。这种算法适用于简单的实时系统。
while True:
for task in tasks:
if task.is_ready():
execute_task(task)
2.2 周期性调度
周期性调度算法是一种按照任务的周期性执行任务的方法。任务按照其周期性被逐一执行。
while True:
for task in tasks:
if task.is_ready():
execute_task(task)
task.reset()