第一章 構建整體系統框圖


我們最終要設計的是一個完成的操作系統,因此我們最開始要做的就是構建整體的系統架構圖,在構建系統框圖之前我們需要先定義下我們操作系統的一些參數,也就是操作系統支持多少個任務,任務的調度方式,以及任務的一些結構體屬性。對於嵌入式操作系統而言,其任務實際上對應着線程的概念,所有的線程都是共享一個硬件資源。為了方便后續的設計,我們這里先給出必要的參數:

任務屬性 支持同優先級和不同優先級
調度方式 同優先級:時間片調度   不同優先級:搶占式調度
同優先級最大數量 8
不同優先級最大數量 8

下面是就緒隊列結構圖:

 

 由於任務有四個狀態,分別是運行狀態,就緒狀態,阻塞狀態和掛起狀態,但是微控制器在任意時刻只能運行一個任務,因此其他的任務就需要我們將其任務保存起來,這樣就需要增加阻塞隊列和掛起隊列。上圖中藍色的箭頭表示時間片切換時使用的指針,黑色的箭頭表示控制塊插入和刪除時使用的指針,每個鏈表的頭部和尾部各有一個無用的控制塊,這個控制塊是保證鏈表至少有兩個控制塊,這樣做的目的是保證鏈表的所有操作都是相同的。

阻塞任務和掛起任務如何管理呢,由於阻塞隊列每個滴答時鍾都要刷新,因此我們也可以用一個雙向鏈表來管理,掛起鏈表也是一樣,唯一不一樣的是掛起鏈表不需要刷新,而是用戶主動去操作,這樣就涉及到一個操作任務的過程,為了方便操作,我們需要記錄每個任務的首地址,這樣句柄就這樣出現了,句柄實際上就是任務的首地址的一個變量。我們操作任務只需要使用其句柄就可以完成隊列的刪除和插入。

下面是操作系統的阻塞隊列:

阻塞隊列的操作有以下幾種情況需要訪問並操作:

1.當任務遇到系統延時

2.當任務的信號量不能得到滿足時

3.系統滴答時鍾

對於掛起隊列而言,可以沒有具體的數據結構對其進行保存,因為我們操作任務的時候需要使用該任務的句柄對其進行操作,但是為了方便查看,我們使用一個雙向鏈表對其進行管理,如下圖所示:

 

 這樣我們的整個大體結構就完成了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM