UC/OS-ii任务优先级管理与查找算法
来源:互联网 发布:商业地产it管理系统 编辑:程序博客网 时间:2024/06/04 13:48
今天看了一下UC/OS-ii中的任务调度算法,做了一下整理与总结。 首先,UC/OS-ii中之可以调度64个任务就是因为:(OSRdyGrp)8位*(就绪表OSRdyTbl【】)8位=64; 其中OSRdyTbl【】是一个长度为8个字节的数组,它用于存储各个优先级的任务是否就绪,对应优先级为: 而每个优先级的就绪状态为‘0’-未就绪 ‘1’-就绪表示。 而OSRdyGrp是一个字节,其中的8位就是用来表示数组中哪一组中有无就绪的任务(哪一组有就将对应的置为1,无则为0)。
例如:
OSRdyTbl[0],OSRdyTbl[3],OSRdyTbl[6]中有已就绪的任务,则OSRdyGrp二进制就为:10010010。
理解了以上,我们就可以来看看以下几个对于任务的管理算法:
1)任务的登记
就是将已经就绪的任务根据其优先级(prio)在就绪表(OSRdyTbl【】)里的相对应位置为‘1’。
其算法为:
OSRdyGrp|=OSMapTbl[prio>>3];
OSRdyTbl[prio>>3]|=OSMapTbl[prio&0X07];
**:prio>>3:根据位运算可以得到其所在的组比如:15 : 00001111B>>3=00000001B=1其在OSRdyTbl[1]。
其中:
OSMapTbl[0]=00000001B;
OSMapTbl[1]=00000010B;
OSMapTbl[2]=00000100B;
OSMapTbl[3]=00001000B;
OSMapTbl[4]=00010000B;
OSMapTbl[5]=00100000B;
OSMapTbl[6]=01000000B;
OSMapTbl[7]=10000000B;
2) 任务注销:
任务的需要脱离就绪态时就要将其在就绪表置为‘0’,这就是任务注销。
其算法与登记的思想一样,算法刚好相反:
if((OSRdyTbl[prio>>3]&= -OSMapTbl[prio&0X07])==0)
OSRdyGrp&= -OSMapTbl[prio>>3];//如果此组已无就绪任务将OSRdyGrp相应的位置为‘0’;
3) 最高优先级就绪任务的查找:
这是任务调度的很重要的算法,是要OS每次任务调度时要找到已就绪的任务中优先级最高的任务(prio):
Y=OSUnMapTal[OSRdyGrp];
X=OSUnMapTal[OSRdyTbl[y]];
Prio=(y<<3)+x;
而关于OSUnMapTbl[]数组的定义为:
而这个数组很多书上是不做介绍的,经过本人的研究发现,其实这张表很简单:
因为,优先级越高其所在就绪表的组下表越小,那么在OSRdyGrp中其所在位数也就越低。
那么我们就可以这么说,在OSRdyGrp中其中的8位我们只找为‘1’的最低为就好,那么在8位二进制表示的数中也就是OSRdyGrp的值,所有由最低位为‘1’的所构成的数x,比如:0: 00000000B,2: 00000010B……,我们将其所在的OSUnMapTbl[x]置为1,0: 00000000B,2: 11111110B……,我们将其所在的OSUnMapTbl[x]置为0。。。。所有,由最低位为‘0’,次低位为‘1’的数x,所对应的 OSUnMapTal[x]置为1,以此类推。而所置成的数就是我们要找的
OSRdyTbl【】的下标y。
而x的求法与y的求法一样,只是将OSRdyGrp换成了OSRdyTbl【】;
而y<<3就是将数值向上进一组,然后再加上所在组的位数就是其优先级Prior了;
以上就是我个人对于UC/OS-II中任务调度的认识,如若有误请不吝赐教。
- UC/OS-ii任务优先级管理与查找算法
- uc/os-ii任务与任务管理
- 对uC/OS-II查找最高优先级就绪任务算法的理解
- uC/OS-II互斥信号量与任务优先级反转
- UC/OS II任务管理
- uC/OS-II任务调度之就绪表及最高优先级任务判定算法
- uC/OS-II就绪任务的管理
- uC/OS-II就绪任务的管理
- uC/OS-II中的任务管理
- uC/OS-II的任务优先级的反转现象
- uC/OS-II任务调度中判断最高优先级
- uc/os-II优先级反转
- UC/OS II 任务管理(4)之任务创建
- UC/OS II 任务管理(6)之多任务启动
- uC/OS之任务优先级
- uC/OS-II内核架构解析(4)---uC/OS-II任务管理
- 【专题】uC/OS-II内核架构解析(4)---uC/OS-II任务管理
- uC/OS-II内核架构解析(4)---uC/OS-II任务管理
- UVA 1001 Say Cheese (三维Floyd)
- 中序,前序,后序三种树遍历
- UVa-10361 Automatic Poetry
- 海康、大华IpCamera RTSP地址和格式
- 18、swift开发iOS——结构体
- UC/OS-ii任务优先级管理与查找算法
- 19、swift开发iOS——类
- 图片和视频到系统图库
- 创建基于python 3.4的Anaconda新环境
- Tomcat8.0配置JNDI数据源完整例子
- 85:Pow(x,n)
- 基础练习——数列特征
- 20、swift开发iOS——属性
- ASIC开发设计流程