FOS调度算法

来源:互联网 发布:哪个驱动软件好用知乎 编辑:程序博客网 时间:2024/06/05 12:00

FOS调度算法是基于优先级任务调度的,对于优先级任务支持FIFO策略。应该说所有真实时的操作系统都支持基于优先级任务调度。

调度算法的作用是找出可调度优先级最高的的任务。

FOS 采用一个unsignedint类型的变量task_prio_map,来维护各任务的优先级情况。任务数有大,优先级越低。在系统初始化时,建立起每个优先级链表头,每当有任务创建的时候,根据该任务的优先级把该任务插入相对应的优先级链表后面。同等优先级支持FIFO调度方式。


函数是提TCB*bit_first_one_search(U32 num),取出可以调度最高优先级任务。

TCB *bit_first_one_search(U32 num){U8 i = 0;LIST*prio_list_head;TCB *tmp;while(i < 32) {if ((num >>i) & 0x01) {prio_list_head = &task_prio_queue[i].list;tmp =list_entry( prio_list_head->next, TCB, list);if(tmp->state == 0) {;} else {returntmp;}}i++;}if (old_task->state== 0)        return idle_task;return old_task;}

算法描述,检查numbit上是否为1,是查看该对应优先级链表上的任务是否可以运行。总是先提取该链表的头部后面一个,在其他处理中,同等优先级不可运行的任务,总是拍到链表后面。

如果该链表上所有的任务不可以运行,就继续向下查找num中下一个bit1,重复上面操作。到最后,确实没有可以运行的任务,那就运行旧任务,旧任务也不可以运行,那就运行空闲任务。


0 0
原创粉丝点击