QNX手册学习笔记------同优先级调度算法

QNX作为一个微内核的实时操作系统,其进程没有优先级的概念,只有线程才有优先级的概念。QNX的优先级分为255个等级。每个等级可以有多个同优先级的线程准备执行,不同于UC/OS的每个优先级对应一个任务待执行。为了实现更好地实时调度,针对同一优先级的任务之间哪个先执行哪个后执行,QNX Netrino System Architucture 给出了三种调度算法:FIFO scheduling,round-robin scheduling, sporadic scheduling。FIFO 容易理解,正在执行的任务只有被阻塞或自己放弃CPU的控制权时,才会退出执行。
FIFO会导致后面的任务延时较大。如果考虑同一优先级下执行时间短的任务先执行完毕,即使后来的任务,如果它所耗费的时间短,那么它也可以先执行完毕,这便引入了round-robin。round-robin相对于FIFO多了一个时间片截止的概念,也就是说当前线程在被阻塞或放弃CPU控制权之外,在自己分配的时间片消耗后也需要停止执行。
sporadic是更为精准的且复杂的调度算法。sporadic引入主要是为了去除周期性和非周期性的事件(event)对实时性的影响;相对于round-robin,sporadic可以规定在一个周期内,某个线程执行的时间的长短;线程在一个周期内执行完一个时间片后,可以退到一更低的优先级下。采用了三个新的概念Initial budget, Low priority 和 replenishment period三个概念。
当一个线程被阻塞时,手册中sporadic的调度算法图如下。
QNX手册学习笔记------同优先级调度算法_第1张图片
此线程在第一被阻塞时(1,2,3),下一个周期补偿(4,5,6)时,就会挖去被阻塞那一段时间空隙。这样的方式在保障某线程一个周期(T)内的执行的时间预算(C)是有意义的。假设如果不挖去这个时间空隙。对于周期性的阻塞线程事件,则可能导致虽然一个线程在一个周期内分配的执行开销时间10msec,但实际上可能仅有7msec的执行时间。考虑到整个优先级线程被阻塞,sporadic调度算法能保证每个每个线程的百分比是一定的。

你可能感兴趣的:(【QNX】)