任务就绪问题

 所谓就绪状态是指任务准备运行,但CPU没空,任务等待运行的状态。
   任务就绪算法涉及:

1)任务就绪表OSRdyTbl

2)映射表OSMapTbl

3)优先级判定表OSUnMapTbl

4)变量OSRdyGrp

5)相关的任务优先级prio

其中映射表OSMapTbl优先级判定表OSUnMapTbl是2个常数表,用于查表算法。

一、将优先级为19的任务放入就绪表中

1):初始化
任务就绪算法

2)优先级的3-5位,即010,查映射表,找到对应的值,赋给字节变量OSRdyGrp,这就确定了就绪表中的某一行。
任务就绪算法

3)优先级的0-2位,即011,查映射表,将值赋给前面找到的那一行就绪表值任务就绪算法

4)找到对应的bit,填充为1

任务就绪算法

   总结:由优先级的3-5位查映射表,找到的行对应着变量OSRdyGrp,这个变量中为1的位就是我们要找的就绪表中的行号,即确定了Y轴点位置;由优先级的0-2位查映射表,找到一组值,该值中为1的Bit的序列就是我们要找的X轴点位置,有了X、Y的值,就能唯一的确定一个点。


二、脱离就绪列表

和前面的动作相反,将映射表中的相应行取反后,与就绪表中的相应行相与。

三、优先级判定表

1)

任务就绪算法

2)
任务就绪算法


四、查找就绪表中最高优先级的任务

1)由OSRdyGrp变量中的值69H,在映射表中找到Y轴,即就绪表中的某一行

任务就绪算法

2)根据就绪表中的这一行值,在映射表中找到X轴

任务就绪算法

3)然后Y左移3位加上X就是当前最高优先级的就绪任务

任务就绪算法

原文地址:https://www.cnblogs.com/wgang171412/p/5098295.html