FOS調度算法

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,重複上面操作。到最後,確實沒有可以運行的任務,那就運行舊任務,舊任務也不可以運行,那就運行空閒任務。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章