QNX线程调度

1. 基本概念

优先级范围 0-255
在这里插入图片描述
非特权线程优先级范围 1-63,可通过PROCMGR_AID_PRIORITY 更改特权标志,使其优先级大于63

中断优先级高于任何线程

2.线程调度

(1)调度时机
<1>block 正在运行的线程因为等待某些事件或资源而阻塞
<2>preempted 更高优先级线程就绪,当前运行的低优先级线程被抢占
<3>yield 当前线程通过 sched_yield主动放弃cpu,就绪状态的最高优先级线程将被调度运行,(有可能就是yield线程自身)

(2)调度策略
<1>FIFO
同优先级线程采用FIFO策略调度
在这里插入图片描述

<2>轮转(Round-robin)
同优先级线程采用时间片轮转策略。其中对于高于40MHz主频CPU,轮转时间片默认为1ms。除了加入时间片限制,轮转策略其他部分与FIFO一致。

在这里插入图片描述

<3>Sporadic scheduling
是QNX中比较特殊的调度策略,用于同时处理周期性事件与非周期性事件。该策略下,线程的优先级是动态调整的,如下图:
在这里插入图片描述

在这里插入图片描述
简单说,该策略下,线程其每周期T内,在时间片长度C中,其优先级为正常状态N。超过C后,其优先级被降级为L。而在T周期后,其优先级再次提升为正常优先级N。
因此该策略的主要目的是使得特定线程能周期性处理事件且其每次处理的事件长度固定,使得系统其他线程能够运行。

3.优先级继承与优先级翻转

参考

http://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.neutrino.prog/topic/overview_Priority_range.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章