[嵌入式操作系统] 优先级位图算法

1. 前提

在ucos系统中,任务调度按照优先级调度算法,从就绪队列中选取优先级最高的任务进行调度。那么首先我们就要解决如何找到最高优先级的任务。

一种方法,我们可以从头到尾遍历就绪队列,找到优先级最高的任务。

另一种方法,我们要维护优先队列的顺序,按照优先级从高到低的顺序排列。

这两种方法效率不高,花费的时间也和当前任务数有关,具有不确定性。优先级位图算法就是一种确定性的就绪任务处理算法。

2. 优先级就绪表

首先我们需要一个二维表来保存各个优先级的任务,在ucos中,每个优先级只允许对应一个任务。

在这里插入图片描述

我们可以看到这个优先级就绪表的特点,越往上优先级越高,越往右优先级越高。我们可以这样我们可以利用位运算提升计算效率,例如35的二进制为00 100 011,我们取3-5位作为列坐标,6-8位作为行坐标,列坐标为100就是4,行坐标011就是3,可以看到正好对应就绪表中的35号窗格。

3. 任务进入就绪态

// OSRdyGrp:优先级就绪组	OSMapTbl:优先级映射表
OSRdyGrp |= OSMapTbl[priority >> 3]; 
// OSRdyTbl:优先级就绪表
OSRdyTbl[priority &
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值