SylixOS任務調度分析

  1. 任務調度相關鏈表
    SylixOS將任務控制塊加入到不同的任務調度鏈表進行管理,創建一個任務就會把新創建的任務加入到優先級就緒表,等待被調度執行。根據不同的任務阻塞原因會被加入到不同的阻塞表中。
    1.1 優先級就緒表
    SylixOS任務調度分析
    圖 1.1 任務優先級就緒表
    SylixOS系統啓動的過程會初始化一個任務優先級就緒表,當創建新任務時,根據任務的優先級加入到對應的優先級就緒表中,如圖 1.1所示。系統啓動過程創建一個優先級最低的IDLE任務。
    1.2 任務控制塊地址表
    SylixOS任務調度分析
    圖 1.2 任務TCB地址表
    創建新任務添加到就緒表的同時加入到任務控制塊地址表。當調用任務掛起函數API_ThreadSuspend時,把任務控制塊從優先級隊列中取出,更新TCB地址表中的任務狀態。當調用任務恢複函數API_ThreadResume時,從TCB地址表中獲取到任務控制塊更新到優先級就緒表,等待執行。
    1.3 延時阻塞表
    SylixOS任務調度分析
    圖 1.3 任務延時阻塞表
    調用任務休眠函數API_TimeSleep時,任務被加入到延時阻塞表,等待任務延時時間到,從延時阻塞表中取出加入到就緒表中。
    1.4 事件阻塞表
    SylixOS任務調度分析
    圖 1.4 事件阻塞表
    如圖 1.4所示,以信號量阻塞爲例,創建信號量時獲取一個事件控制塊,當獲取信號量被阻塞就被加入到事件控制塊的阻塞表中,如果設置了等待時間同時會被加入到延時阻塞表。當獲取到信號量或是等待超時,任務會被重新加入到就緒表中。
  2. 任務調度
    引起任務調度的主要原因有以下幾個:
    1) 時間片耗盡、任務執行完畢。
    2) 任務進入睡眠等待。
    3) 獲取資源被阻塞。
    4) 任務主動掛起。
    2.1 任務調度流程分析
    SylixOS任務調度分析
    圖 2.1 任務調度流程
    SylixOS任務調度流程如圖 2.1所示,創建的任務加入優先級就緒表,等待被調度執行。在任務運行過程中,如果調用延時函數,任務被調出加入到延時阻塞表,等待延時時間到;如果因獲取信號量等資源被阻塞,任務被調出加入到事件阻塞表,等待事件到來或超時時間到;如果任務被掛起加入任務控制塊地址表,等待被喚醒。每個任務都有佔用CPU執行的時間片,當時間片耗盡時,系統會重新調度高優先級任務執行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章