最高优先数优先的调度算法_优先级位图算法

本文详细介绍了μC/OS-II实时操作系统中的最高优先数优先调度算法,包括任务优先级的标定、优先级位图算法的原理及其实现。通过创建任务、优先级映射表、优先级就绪组和就绪表等概念,阐述了如何在多任务环境中确定并调度最高优先级的任务。
摘要由CSDN通过智能技术生成

在嵌入式操作系统复习中,我们了解了μC/OS-II的相关基础知识,在任务调度这一节,我们提到了优先级位图算法,本文详细介绍该算法的原理和实现。说明:本文参考了这篇文章,加入了一些自己的理解,如有侵权,请联系删除:原文链接

1、μC/OS-II任务优先级相关简介:μC/OS-II中共有64个优先级(0~63级,数字越小优先级越高)。因为是实时系统,所以对应每个任务就分配一个优先级。

2、2进制和10进制转换基础这里先介绍一个数学知识,二进制如何变为十进制,比如十进制26,其8位二进制表示为:00 011 010。当十进制为0~63时,前两位无作用,所以只看后6位——011 010.怎么计算成十进制呢?很简单:把这个十进制数,分为两个部分,高三位和低三位,这个十进制数的大小就等于高三位的十进制8+低三位的十进制数(其实就是二进制转八进制再转十进制)。高三位的011=3 ,低三位的010=2,所以26=3x8+2=(011)<<3+(010).即将高三位左移三位就是8再加上低三位。下面要介绍的算法也是这个数学方法。

3、优先级任务调度过程

  1. 创建任务并分配优先级
  2. 通过算法,操作系统对创建完成的任务(即就绪任务)进行标记。并通过标记来查找当中任务中优先级最高的任务
  3. 调用调度函数进行调度,让最高优先级任务运行

优先级创建μC/OS-II中创建任务的函数原型:INT8U OSTASKCeate(void (*task)(void *pd),void *pdata,os_stk *ptos,INT8U prio),从这个函数可以看出,最后一个参数就是优先级,所以结论是,在创建任务的同时就要确定任务的优先级,并且是该优先级是8位的(0~2^8-1),这里也可以看出为什么会有64个优先级。

因为用户可以指定任务的优先级,但实时操作系统最大的好处就是高优先级的任务可以抢占低优先级的任务,那怎么实现的呢?当然是通过优先级实现。既然用户在调用系统函数创建任务的同时指定了任务的优先级,一旦创建了任务,该任务就会立即成为就绪状态,操作系统就会将该任务的优先级标志位置位为1,相当于做个记号,操作系统心里就会想,哦,这个优先级的任务已经就绪了,同样创建了其他的任务,操作系统都会在某个地方做好标记表明对应优先级的任务已经就绪,然后在调度函数的调度下进行调度,那么在哪个地方做个标记呢?既然是实时操作系统࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值