HarmonyOS内核进程调度

一、位图管理 BitMap

内核很多模块都使用了位图,我们将具体分析进程调度相关的位图管理。我们知道鸿蒙内核进程和线程都是32个优先级,而之所以是32个优先级,主要就是因为他们的优先级是由位图管理的,BitMap是UINT32的变量,所以进程和线程都是32个优先级,一个位一个级别,最高位优先级最低。

    UINT32          priBitMap;          /**< BitMap for recording the change of task priority,
                                             the priority can not be greater than 31 */

进程和线程在执行过程中优先级会经常变化,变量priBitMap就是用来记录所有曾经变化过的优先级(曾经有过的所有优先级历史记录),例如 0x0000004B = 0b0000 0000 0000 0000 0000 0000 0100 1011就代表该Task曾经有过 0,1,3,6 这几种优先级(0代表最高优先级)。我们还可以通过位图管理器函数,得到该Task有过的最高优先级(1出现的最低位置)和最低优先级(1出现的最高位置)。

    UINT32      queueBitmap;  //位图调度器,每一位对应一个优先级,用于标识对应优先级的就绪队列是否有就绪任务

除此之外,还可用位图表示任务状态,Lite_OS定义了六种任务状态。用每一位来表示一种不同的状态,1表示是,0表示不是。

#define OS_TASK_STATUS_INIT 0x0001U //初始化状态 
#define OS_TASK_STATUS_READY 0x0002U //就绪状态的任务都将插入就绪队列,注意就绪队列 的本质是个双向链表 
#define OS_TASK_STATUS_RUNNING 0x0004U //运行状态 
#define OS_TASK_STATUS_SUSPENDED 0x0008U
#define OS_TASK_STATUS_PENDING 0x0010U //阻塞状态 
#define OS_TASK_STATUS_PEND_TIME 0x0080U
#define OS_TASK_STATUS_DELAY 0x0020U //延期状态 
#define OS_TASK_STATUS_TIMEOUT 0x0040U 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值