Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1084277
  • 博文数量: 121
  • 博客积分: 2021
  • 博客等级: 上尉
  • 技术积分: 1467
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-29 21:47
个人简介

简约而不简单。

文章分类

全部博文(121)

文章存档

2017年(1)

2016年(4)

2015年(2)

2014年(24)

2013年(33)

2012年(13)

2011年(25)

2010年(13)

2009年(6)

分类: LINUX

2013-04-26 15:18:26

有256个元素的数组是通过任务就绪表找到就绪任务中优先级最高的任务所用到的数组。代码如下:

y=OSUnMapTal[OSRdyGrp];//获得优先级别的D5、D4、D3位

x=OSUnMapTal[OSRdyTbl[y]]; //获得优先级别的D2、D1 、D0位

prio=(y<<3)+x;

         prio是表示优先级的一个无符号八位数,不过只有低六位有效。prio与就绪任务表的两个数组的关系是这样的:prio高三位表示组数,即OSRdyGrp[]中的哪一位是一。低三位表示这一组中的位数,即OSRdyTbl[]中的哪一位是一。例如,如果prio是00011001,即优先级是25。则OSRdyGrp[]中的第三位是被置一的,OSRdyTbl[]中的第一位是被置一的。

         由于有可能有很多任务是处于就绪状态的,也就是说OSRdyGrp[]和OSRdyTbl[]中均有可能不止一位是被置一的。由于优先级的数字越小,级数越高,所以要从这些就绪的任务中找出优先级最高的任务,就需要找出这两个数组中被置为一的最低位。
        

        OSUnMapTbl[]的作用就是将一个8位2进制数通过数组的形式通过查表的方式知道最低的位置。

阅读(1494) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~