在《Task之调度策略》里介绍了VxWorks的主要调度策略,而有了RTP之后,系统又是如何调度的呢?其实非常非常简单:RTP不参与调度,VxWorks还是使用之前的调度策略,即所有Task基于优先级抢占,以及默认关闭的时间片轮转。这确保在任何给定的时刻,系统中准备运行的最高优先级Task都将执行,而不管该Task是在内核中还是在任何进程中。相比之下,非实时系统主要使用分时调度策略,以及动态调整进程优先级,以确保没有进程会长期无法使用CPU,并且没有进程独占CPU。VxWorks的时间片轮转也是一种分时策略,但它不会干扰优先级的抢占,因此它具有确定性,保证了实时性。
如果你不打算使用pthread,现在就可以跳到文末点赞了
----------分割线---------
不过,为了更好的支持POSIX标准,VxWorks在RTP里引入了POSIX的Thread调度策略。事实上,要想在RTP里使用POSIX的Thread,必须要包含这种调度策略:INCLUDE_POSIX_PTHREAD_SCHEDULER
从名字上就可以看出来,这种策略只对RTP里的Thread有效。而Kernel里的Task和Thread,以及RTP里的Task,用的都是VxWorks的传统策略
POSIX定义的几种调度策略在VxWorks的RTP中的实现方式:
需要注意的地方: