📜  通用实时任务调度器

📅  最后修改于: 2022-05-13 01:56:11.647000             🧑  作者: Mango

通用实时任务调度器

通用实时任务调度器:
用于处理或调度所有三种类型的实时任务,即周期性、偶发性和非周期性任务的调度器,被称为广义任务调度器。它以最熟练的方式安排定期、零星和非定期任务。

为什么是通用任务调度器?
基本上,循环调度器用于适应零星和非周期性任务,但零星和非周期性任务的到达时间是统计说明的。因此,在不显着降低系统整体利用率的情况下,不能将非周期性和零星任务分配给帧。因此,为了有效地调度所有三种类型的任务,在实时系统中引入了广义任务调度器。
它用于克服循环调度器、事件驱动、混合调度器和所有实时任务调度器的局限性。

通用任务调度程序的工作:
通用任务调度器最初只为周期性任务准备计划,即时间框架被分配周期性任务。现在,在调度周期任务后,在帧中可用的松弛时间中调度零星和非周期任务。
松弛时间是在计划的周期性任务完成其执行后一帧中剩余的时间。松弛时间可以为零或非零。当周期性任务的执行时间小于帧大小时,松弛时间不为零。

只有在有足够的空闲时间可用时才能调度零星任务,而在非周期性任务的情况下则不同。零星任务需要在截止日期前完成,为了安排零星任务,执行验收测试以检查可用的松弛时间。
如果松弛时间不够,调度器会拒绝零星任务。在非周期性任务的情况下,不需要验收测试。非周期性任务不需要在截止日期前完成,因此它们被安排在可用的松弛时间。



通用任务调度程序的伪代码:
周期性任务的预计算计划存储在表中。假设零星任务已经通过验收测试,只有符合条件的任务可用。
以下是通用实时任务调度器的伪代码:

cyclic scheduler()
{
current-task T = Schedule-table[i];

i = i + 1;
i = i mod N;

// N is the total number of tasks
// in the schedule table

dispatch-current-task(T);

schedule-sporadic-task();
// Current task T completed early,
// sporadic tasks can be scheduled

schedule-aperiodic tasks;
// At the end, aperiodic tasks
// can be scheduled

idle();
// No task to be scheduled
}