一个简单的问题,欢迎大家指教,多谢。

wangtengfei   2009-3-19 23:41 楼主
(1)在vxworks下单CPU下,当前运行任务发消息通知其它任务或释放信号量,触发队列操作,把阻塞态任务放入就绪队列中,同时内核进行任务调度,
这时是取就绪队列中的排在的第一任务还是取就绪队列中的最高任务与当前运行任务比较?优先级高的任务得到运行?

(2)谁能详细解释下在任务里面调用taskdelay(0)后的过程吗?

回复评论 (1)

问题1:在信号量或者消息队列建立时,有一个参数是可以设置“阻塞任务队列排序方式”的,一般有“先进先出”和“基于优先级”两种,不过后者增加了排序的开销。
问题2:taskDelay(n)表示当前任务放弃CPU,在第n个ticks到来时重新申请CPU。下面具体分析:
       一般来说,任务获取CPU是按照“时间片”来获取的,比如时间片为20ticks,那么一旦一个任务获得了CPU,就会使用完这20个ticks,除非当前任务自己放弃CPU,比如taskDelay()。如果调用taskDelay(0),那么当前任务放弃CPU,系统调度将该任务放入就绪的任务队列(是按照优先级的高低),如果该任务仍然是最高优先级的就绪任务,那么立刻会被再次分配CPU,不过这一次调度也是有开销的。
      关于任务调度的问题,可以看一下相关的资料。
      另外,taskDelay()中的参数ticks是系统来维护的,就算任务一直未被调度,ticks也是被计算的。
点赞  2009-3-20 13:08
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复