uCOS-Ⅱ的调度算法和系统中用户进程的数目无关。uCOS-Ⅱ共64个进程,数目是固定的。
1. 系统中进程的优先级是唯一的,所以优先级也是进程的标示符pid。正是因为系统中进程的数目有最大值,并且最大值不大只有64。所以在任务控制块的管理上就可以进行简单的设计。使用两个链表进行维护,不用进行动态的申请。linux中进程描述符struct task_struct结构非常庞大,并且系统中所支持的进程的最大数目远远大于64。同时又要保证进程能够尽快的创建,struct task_struc申请空间时能够快速地返回。在这方面linux内核的设计者想出来很多方法。相比之下uCOS-Ⅱ的就要显得简单许多了。
uCOS-Ⅱ中的就绪列表使用bitmap的方式进行管理,就绪时对应的bit位置1。
优先级prio的高3位作为组号,低3位作为组内的编号。bitmap的形象如上图所示。
给出优先级prio将相应的bit位置位的代码如下
OSRdyGrp |=OSMapTbl[prio>>3];
OSRdyTbl[prio>>3] |=OSMapTbl[prio & 0x07];
RdyTbl[i] != 0 RdyGrp的相应位就要置位。MapTbl就是一个便于进行操作的掩码表,如下图所示。
清除对应位的代码如下:
if((OSRdyTbl[prio>