tag 标签: 就绪表

相关博文
  • 热度 12
    2011-12-6 19:27
    2619 次阅读|
    0 个评论
        就绪表中有两个变量:OSRdyGrp 和 OSRdyTbl 中任何一位是1时, OSRdyGrp  的第n 位 是1。相当于OSRdyGrp  是OSRdyTbl 按位来算的话正好是64个位---64个优先级。接下来我们再分析一下任务优先级变量: prio。由上图可知优先级变量的低三位 :在OSRdyTbl 中 “位”的位置; 次高三位: 在OSRdyGrp 中 “位”的位置。    数值m 换算成“位”的位置(OSMapTbl ;   低三位可以确定OSRdyTbl   |=  OSMapTbl ;   2. 使脱离就绪态的方法:  if((OSRdyTbl = ~OSMapTbl ) = = 0) OSRdyGrp  =  ~OSMapTbl ;     由就绪表找出优先级最高的任务:上面的反运算,须查表   y = OSUnMapTbl ; x = OSUnMapTbl ];   Prio = y3+x;   OK,那我们看看这个OSUnMapTbl 中查找,如果OSRdyTbl =0xE4 ,即二进制 1110 0100 ,可知 bit2 优先级最高。 于是乎Prio = 33+2=26           当OSRdyGrp= = 0bxxxx xxx1 时,最高优先级在OSRdyTbl 中 ,即OSUnMapTbl = 0 同理 当OSRdyGrp= = 0bxxxx xx10 时,最高优先级在OSRdyTbl 中 ,即OSUnMapTbl = 1  , 以此类推   OK,接下来我们画一个表格来总结一下   table border="1" cellpadding="0" cellspacing="0" tbody tr td style="width:142px;" OSRdyGrp /td td style="width:142px;" OSUnMapTbl /td td style="width:142px;"  个数 /td /tr tr td style="width:142px;" 0b xxxx xxx1 /td td style="width:142px;" 0 /td td style="width:142px;" 2^7 /td /tr tr td style="width:142px;" 0b xxxx xx10 /td td style="width:142px;" 1 /td td style="width:142px;" 2^6 /td /tr tr td style="width:142px;" 0b xxxx x100 /td td style="width:142px;" 2 /td td style="width:142px;" 2^5 /td /tr tr td style="width:142px;" 0b xxxx 1000 /td td style="width:142px;" 3 /td td style="width:142px;" 2^4 /td /tr tr td style="width:142px;" 0b xxx1 0000 /td td style="width:142px;" 4 /td td style="width:142px;" 2^3 /td /tr tr td style="width:142px;" 0b xx10 0000 /td td style="width:142px;" 5 /td td style="width:142px;" 2^2 /td /tr tr td style="width:142px;" 0b x100 0000 /td td style="width:142px;" 6 /td td style="width:142px;" 2^1 /td /tr tr td style="width:142px;" 0b 1000 0000 /td td style="width:142px;" 7 /td td style="width:142px;" 2^0 /td /tr /tbody /table   个数总和为255个 ,另外加上无法计算的OSUnMapTbl   ,一共256个。       //下面是生成OSUnMapTbl 的代码   #include stdio.h void main(void) {     int i,t;     int tab ={0};     for(i=0;i8;i++)         for(t=1;(ti)256;t++)       //算法有重复的部分         {             tab =i;         } }