本文介绍RTOS常用任务调度策略。
RTOS考虑到任务的实时性,通常会有2种调度策略,基于优先级的抢占式调度和基于时间片的轮转调度策略,本文简要介绍其原理和适用场景。
1.基于优先级的抢占式调度
1)原理
每个任务都分配一个优先级,RTOS保证任何时候处于最高优先级的任务处于运行状态。涉及如下场合:
a)高优先级任务时间片耗尽。如在高优先级任务中存在sleep(2),其时间片耗尽后,调度器重新调度,选择高优先级任务运行。
b)低优先级任务唤醒高优先级任务。如低优先级任务给高优先级任务发信号量,消息等或高优先级任务获得临界资源,调度器重新调度,选择高优先级任务运行。
c)中断中唤醒高优先级任务。如在中断服务程序中给高优先级任务发信号量,消息等,在退出中断服务程序时,调度器重新调度,选择高优先级任务运行。
注意:调度器只能选择处于就绪状态的任务进行调度,因此,低优先级或中断唤醒高优先级任务时,高优先级任务先进入就绪状态,再由调度器进行调度。
2)适用场景
对实时性要求比较高的场合。
2.基于时间片的轮转调度
1)原理
每个或几个任务分配相同优先级,并设置一个时间片。RTOS按先进先出的方式,选择任务并执行一个时间片,将此任务放入队列的末尾(不管此任务是否执行完成),再选择另外一个任务并执行其时间片,如此循环。
2)适用场景
全部或某几个任务对实时性要求不高的场合。可以和基于优先级的抢占式调度混合使用,如任务1分配高优先级,任务2,任务3分配相同优先级,那么任务1可以抢占任务2和任务3,而任务2和任务3则采用基于时间片的轮转调度。
总结,本文介绍了RTOS常用任务调度策略。