vxWorks SMP程序调度及亲和性

vxWorks smp环境下,可以同时调度N个最高优先级任务。

1、CPU亲和性

cpu affinity就是分配指定的中断或者任务给指定CPU,分为任务亲和性与中断亲和性。在SMP环境下,任务可以执行在任务一个CPU,这样通常能够很好的平衡各核负荷,但是如果想使用一个核专心处理信号处理任务,就可以把CPU分配为一个核,这样可以保证CACHE不被经常在核间切换时遭到冲刷,提高性能。可以使用如下函数对其进行设置:

中断亲和性是需要通过编程中断控制器实现的,将特定ISR分配为某个核。

2、CPU预留

vxworks还为设置CPU亲和性的任务提供了CPU预留功能,保证预留的CPU不被其它任务抢占,保证任务性能。

3、SMP任务调度算法

调度算法首先判断任务是否有CPU亲和性,如果有则放入指定CPU ready队列,否则放入全局非亲和性队列。对于全局非亲和性ready队列的任务,则要寻找没有为其它任务做预留的CPU,进行任务调度。

下面看几个例子:

没有CPU预留情况1

有ABC三个任务,当A ready后,则从四个核上运行的任务中找到最低优先级的任务为cpu2上的ty,并抢占。当B进入readdy状态后,由于B设置了CPU2的亲和性,但这时A正在cpu2上运行,而B优先级低于A,所以B进入挂起状态。当C变为ready时,C具备CPU3亲和性,而cpu3上的当前运行任务优先级低于C,故C在cpu3上运行。

上面这张图,A变成ready后,因为CPU3上运行的任务优先级最低,做在CPU3上运行。这样,导致具有CPU亲和性的任务C没法抢占CPU3。

下面一张图是CPU预留的情况:

如果CPU2,cpu3被预留后,A变成ready后,A没有亲和性条件只能在CPU0与CPU1上调度,这样A选择了优先级低的CPU1。接下来B与C分别分配到了CPU2与CPU3。

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值