UCOS II核心結構

2021-06-01 19:15:11 字數 1629 閱讀 4924

1.1 臨界段可以關中斷來保持獨佔。為什麼可以關中斷來保持獨佔呢?因為能引起排程的有兩個,乙個是呼叫

系統函式,另外乙個是中斷喚醒了乙個事件。而明顯進入臨界段是不會呼叫系統函式的了,因而意外的就是

可能會發生中斷,所以把中斷關掉了,就不會發生排程了。

1.2  任務

ucos的任務可以達64個,但是最高和最低的四個,總共八個優先順序給保留給以後公升級用。優先級數越低

優先順序就越高。

1.3 核心的幾個基本函式

建立任務

任務的自願處理:延時函式

任務的被迫處理:訊號量、郵箱、佇列

中斷處理函式

時鐘處理函式

1.4 任務控制塊

主要的項:堆疊指標,tcb id,優先順序,當前狀態,延時計數

tcb鍊錶指標

訊號量、訊息佇列指標

擴充套件tcb指標

1.5 幾個資料列表

1.5.1 空閒列表

uc是預先把所有的任務tcb空間都分配好了。

剛剛開始的時候,所有任務都鏈結起來,當成雙向鍊錶,由乙個頭指向這個鍊錶。

每次分配空間,都在鍊錶中取乙個出來。

每釋放乙個任務,就把tcb空間放回空閒列表。

1.5.2 就緒列表

就緒列表其實就是放置當前就緒的任務列表。涉及任務放入,任務刪除,和獲取最高優先順序任務

三個操作。

uc是用兩組東西來表示就緒表,乙個8位的變數和乙個由8個8位的整數組成的陣列。

變數的乙個位代表了8個任務是否有至少乙個進入了就緒狀態。

而乙個陣列中乙個數代表了8個任務,每1位代表了乙個任務。

任務放入:就是簡單的設定變數(對應那8個任務中有放進了乙個),然後設定乙個陣列中

的對應的對應的位。

任務刪除:改變變數和陣列中對應的位。

判斷最高優先順序:主要,uc陣列中對應位的位置就是對應了相應的優先順序。8個數8位剛好就是

對應了64個優先順序。

按我的想法:

可以把任務的tcb放到乙個就緒鍊錶中。加入任務,就是把對應tcb的頭指標加入鍊錶,刪除就是

在鍊錶刪除。查詢最高優先順序,就是在鍊錶中獲得tcb指標,從而找到優先順序域,進行比較。

1.6 任務切換

1.6.1 任務切換的時候不允許中斷

1.6.3 先判斷條件,是否在中斷巢狀中呼叫或者是否禁止了任務切換 

1.6.2 任務切換很簡單,就是查詢就緒表,獲得最高優先順序的任務tcb,呼叫彙編的任務切換。

1.6.3 呼叫任務切換鎖的時候,必須執行任務解鎖。呼叫了鎖後,不能呼叫訊號量同步或者佇列,會

使得當前任務掛住的系統函式。

1.7 中斷

1.7.1  中斷要做的事情:

清掉中斷源

儲存暫存器

中斷巢狀計數加1(需要互斥保護,注意,呼叫uc的 osintenter()出來後是開中斷的)

執行中斷處理

判斷中斷巢狀是否為0,是0就表示沒有中斷要處理了,馬上進行就緒表判斷

恢復暫存器

1.7.2 中斷可能要涉及彙編,而且記得清掉中斷源。

1.7.3 中斷是要盡快執行的,盡量通過訊息或者同步把訊號發到任務,給任務去執行。

1.8 時鐘

時鐘主要的工作,乙個是處理各個任務tcb的延時項,還有就是計數系統的執行時間。

Linux核心結構

linux核心主要由五個子系統組成 程序排程,記憶體管理,虛擬檔案系統,網路介面,程序間通訊。1.程序排程 sched 控制程序對cpu的訪問。當需要選擇下乙個程序執行時,由排程程式選擇最值得執行的程序。可執行程序實際上是僅等待cpu資源的程序,如果某個程序在等待其它資源,則該程序是不可執行程序。l...

Linux核心結構

linux核心主要由五個子系統組成 程序排程,記憶體管理,虛擬檔案系統,網路介面,程序間通訊。1.程序排程 sched 控制程序對cpu的訪問。當需要選擇下乙個程序執行時,由排程程式選擇最值得執行的程序。可執行程序實際上是僅等待cpu資源的程序,如果某個程序在等待其它資源,則該程序是不可執行程序。l...

linux核心結構

1.程序排程 sched 控制程序對cpu的訪問。當需要選擇下乙個程序執行時,由排程程式選擇最值得執行的程序。可執行程序實際上是僅等待cpu資源的程序,如果某個程序在等待其它資源,則該程序是不可執行程序。linux使用了比較簡單的基於優先順序的程序排程演算法選擇新的程序。2.記憶體管理 mm 允許多...