优先级位图算法详解 在嵌入式操作系统复习中,我们了解了μC/OS-II的相关基础知识,在任务调度这一节,我们提到了,本文详细介绍该算法的原理和实现。 说明: 本文参考了这篇文章,加入了一些自己的理解,如有侵权,请联系删除:原文链接 1、μC/OS-II任务优先级相关简介:μC/OS-II中共有64个优先级(0~63级,数字越小优先级越高)。因为是实时系统,所以对应每个任务就分配一个优先级。 2、2进制和10进制转换基础 这里先介绍一个数学知识,二进制如何变为十进制,比如十进制26,其8位二进制表示为:。当十进制为0~63时,前两位无作用,所以只看后6位——.怎么计算成十进制呢?很简单:把这个十进制数,分为两个部分,高三位和低三位,这个十进制数的大小就等于高三位的十进制8+低三位的十进制数(其实就是二进制转八进制再转十进制)。高三位的 ,低三位的,所以26=3×8+2=(011)<<3+(010).即将高三位就是8再加上低三位。下面要介绍的算法也是这个数学方法。 3、优先级任务调度过程 创建任务并分配优先级通过算法,操作系统对创建完成的任务(即)进行标记。并通过标记来查找当中任务中优先级最高的任务调用调度函数进行调度,让最高优先级任务运行 优先级创建 μC/OS-II中创建任务的函数原型: ,从这个函数可以看出,最后一个参数就是优先级,所以结论是,在创建任务的同时就要确定任务的优先级,并且是该优先级是8位的(0~2^8-1),这里也可以看出为什么会有64个优先级。 因为用户可以指定任务的优先级,但实时操作系统最大的好处就是高优先级的任务可以抢占低优先级的任务,那怎么实现的呢?当然是通过优先级实现。 既然用户在调用系统函数创建任务的同时指定了任务的优先级,一旦创建了任务,该任务就会立即成为就绪状态,操作系统就会将该任务的优先级,相当于做个记号,操作系统心里就会想,哦,这个优先级的任务已经就绪了,同样创建了其他的任务,操作系统都会在某个地方做好标记表明对应优先级的任务已经就绪,然后在调度函数的调度下进行调度,那么在哪个地方做个标记呢?既然是实时操作系统,操作系统用什么算法去查找优先级最高的任务呢? 任务优先级的标定 什么是优先级的标定:就是操作系统要知道哪个任务已经就绪了,然后就在这些就绪了的任务里面切换调度。所以第一步就是要知道哪些任务就绪了,然后就可以操作了。 这里要先介绍两个数据结构,:,这两个变量协同完成优先级的标定。 :优先级就绪组 这是一个8位的变量。每一个变量对应于OSRdyTbl[]中的一行(实际上是一个素,但也可以理解为一行)。 :优先级就绪表 这是一个数组,有8个成员,每个成员都是8位的变量,所以就可以构成了8*8的矩阵了。所以64个优先级都是标定在这个数组中的。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/81967.html