Nucleus PLUS系統架構和元件

yangzhao0001發表於2015-09-14

(一)元件和軟體元件方法學

1,軟體元件(Software Component)的定義

從一般意義上來說,元件(Component)是系統中可以明確辨識的組成部分,一個不透明的功能實現體。軟體開發中,元件是對資料和方法的簡單封裝,它具有約定式規範的介面。元件具有物件導向的特徵,具有功能獨立性、高度的可重用性、與語言和平臺無關性等特點。軟體元件是軟體系統中具有一定意義的、相對獨立的構成部分,是一個通過規定的介面提供一組服務程式碼的執行單元,這個執行單元的特點是高內聚、低偶合。元件的介面和元件的實現相分離,呼叫者只需要知道介面並訪問介面就可以使用元件。介面相對固定,元件功能和實現的變化不應該引起介面的變化。軟體元件是軟體複用的關鍵技術。

2,軟體元件方法學:

元件技術是90年代初出現的一種軟體開發技術,它是在結構化設計和麵向物件技術的基礎上發展起的,是物件導向技術之後的軟體開發的標準方法系,是物件導向的開發技術的延伸。軟體元件開發主要是開發與維護系統構造過程中用到的元件。將軟體元件作為一個單獨的過程,目的是將元件作為構造軟體的“零部件”。有了元件的概念和元件技術,軟體開發就可以借鑑建築學和現代製造業中成功的例項,先構造出軟體的總體架構,然後根據元件重用技術,在架構上根據需要組裝上所需功能的元件,最後形成應用程式。版本更新只須用新的元件替換舊元件即可實現,而無須改動整個程式,也不需要對整個程式進行重新編譯。

(二)Nucleus PLUS系統架構

Nucleus PLUS系統採用軟體元件的形式構成以增加系統的程式碼清晰性、可靠性和可重用性,使系統模組化、易於維護。Nucleus PLUS由多個軟體元件構成,每個元件都有唯一的用途和特定的外部介面。每個元件的使用通過這些介面的呼叫實現,而元件內部的資料結構絕大多數情況下都不可以被其他元件直接訪問。這種元件架構使得Nucleus PLUS的每個軟體元件可以被輕鬆的替換和重用。

每個軟體元件都由兩個標頭檔案和若干個原始檔組成,其中原始檔大多用C語言寫成,少數用匯編語言寫成。標頭檔案中一個用於資料型別定義和常量宣告,另外一個用於宣告元件的外部介面。下表是每個元件檔案的概述,元件不一定還包含表中所有的檔案,其中XX標示元件名縮寫。

在支援使用者模式和管理模式的處理器架構上,Nucleus PLUS 核心和所有應用任務都執行在管理模式。這種做法實現簡單、任務系統呼叫開銷小,但是每個任務都能訪問任何資源。

所有需要呼叫Nucleus PLUS系統服務或者使用Nucleus資料型別的使用者程式碼原始檔中都要包含標頭檔案“NUCLEUS.h”,該檔案包含資料型別、常量定義以及Nucleus PLUS服務的所有函式宣告。事實上,“NUCLEUS.h”中所有以“NU_”開頭的函式實質上在Nucleus各元件原始碼中是不存在的。絕大多數Nucleus函式都有一個真正執行操作的函式(各元件中定義)和一個呼叫真正執行函式前對使用者呼叫進行錯誤檢查的“殼”函式。錯誤檢查功能是可以停用的,不定義巨集標示“NU_NO_ERROR_CHECKING”即可。NU_NO_ERROR_CHECKING的定義與否決定”NU_“函式真正對映的元件函式。

(三)Nucleus PLUS的元件

Nucleus Plus 系統共16個元件,分別討論如下(主要描述元件的功能):

1,通用服務元件Common Service Component(CS)

所有的Nucleus PLUS元件控制的控制資料結構採用的都是連結串列,CS即負責提供連結結構和連結串列操作函式,包括新增、刪除節點。

2,初始化元件Initialization Component(IN)

負責初始化和啟動Nucleus Plus 系統。初始化和啟動過程包含兩部分:具體硬體目標板依賴部分(處理器相關和板級初始化)先初始化,然後是Nucleus PLUS各元件和使用者程式的初始化。

INT_Initialize 子程式在Nucleus PLUS 系統中是最先執行的,負責所有與目標硬體板相關的初始化。INT_Initialize 完成後將控制權轉移到高階Nucleus PLUS 初始化子程式INC_Initialize上並不再返回。INC_Initialize呼叫所有的Nucleus plus元件初始化函式、呼叫Application_Initialize建立使用者任務等物件,最後將控制權交給排程函式TCT_schedule,系統啟動完畢。初始化具體過程參見博文”Nucleus PLUS的啟動、執行執行緒和中斷處理“。

3,執行緒排程元件Tread Control Component(TC)

負責Nucleus Plus的搶佔式實時任務和HISR的排程管理。每個使用者應用由多個任務組成,一個任務就是具有特定目的的半獨立程式片段,任務處於五種狀態之一--執行、就緒、掛起、終止、完成。任務具有不同的優先順序,高優先順序任務能夠搶佔低優先順序任務,同優先順序任務按照進入”就緒狀態“的順序排程,優先順序從0-255遞減。

Nucleus PLUS每一個任務都有一個控制結構體稱為執行緒控制塊Thread Control Block(TCB)-TC_TCB,任務支援動態的建立和刪除,TC通過一個雙向連結串列TCD_Created_Tasks_List管理所有的任務,全域性變數TCD_Total_Tasks表示已建立的總任務數。

TCD_Priority_List是一個大小為256的TCB指標陣列(陣列大小與Nucleus PLUS優先順序數相同),每個陣列指標是一個表的頭部(某元素為空則表示沒有該優先順序的任務),該表的元素是具有相同優先順序的進入就緒狀態的任務的TCB指標。即Nucleus PLUS維護一個指標陣列來排程不同優先順序的任務連結串列。

任務排程過程見博文”Nucleus PLUS任務排程“。

HISR是中斷處理例程的下半部分,能夠訪問絕大多數Nucleus PLUS任務(不可自動掛起)。HISR也是搶佔式的,其優先順序0-2遞減。HISR由LISR啟用,因此必須事先建立並註冊。

HISR的管理和任務的管理是類似的,每個HISR都有一個控制結構TC_HCB和獨佔的堆疊,TCD_Created_HISRs_List是一個儲存已建立HISR例程的雙向連結串列的表頭,TCD_Total_HISRs表示已建立的HISR總數。另外TC會維護兩個已啟用的HISR表,表項分別是三個優先順序已啟用的HISR雙向連結串列的頭和尾。TC還通過連結串列維護LISR例程,包括中斷向量註冊和LISR入口函式。TC元件提供了HISR的建立、刪除、啟用等函式。

4,時鐘元件Timer Component(TM)

負責管理所有的Nucleus Plus 定時器裝置。Nucleus Plus 的基本定時單元為一個Tick,它相當於一次硬體定時器中斷。系統層面上,定時器用於任務管理-定時睡眠和喚醒等;使用者應用程式層面,定時器用於那些需要有超時處理機制的地方。

定時器支援動態建立/刪除,每個定時器都有一個控制結構TM_TCB、TMD_HISR或TM_APP_TCB,分別用於系統任務定時器、HISR定時器和應用程式專用計時器。TM通過連結串列維護已建立的、已啟用的定時器列表。TM提供一個系統定時器TMD_System_Clock。

定時器函式包括建立、開始、停止、重置、刪除、超時處理等。

5,郵箱元件Mailbox Component(MB)

下述Nucleus PLUS程式間通訊機制郵箱、佇列、管道、訊號量和事件組詳見博文”Nucleus程式間通訊(IPC)方式“。

負責管理Nucleus Plus 所有的郵箱服務,提供一種低開銷的程式間通訊機制。每個郵箱包含一個長度為4個32-bit字的訊息。郵箱可以由使用者動態建立/刪除,支援任務的掛起和恢復。

每個郵箱都有一個控制塊Mailbox Control Block (MCB) MB_MCB,MB通過雙向連結串列維護已建立的郵箱。郵箱的任務掛起/喚醒支援FIFO順序和任務優先順序順序進行,也是通過維護一個雙向連結串列進行,每有一個任務掛起在郵箱上就會建立一個控制塊MB_SUSPEND結構體。

MB提供了郵箱的建立、刪除、訊息傳送/獲取、重置、清空、廣播等函式。

6 佇列元件Queue Component(QM)和7管道元件Pipe Component(PI)

分別負責管理所有的Nucleus Plus 佇列服務,管理所有的Nucleus Plus 管道服務。兩部件的管理與MB是類似的,區別在於:佇列的訊息是一個或者多個32-bit字,管道的訊息是一個或者多個8-bit位元組。

8,訊號量元件Semaphore Component(SM)

負責管理所有的Nucleus Plus 訊號量服務,用於多個任務間的同步。訊號量支援動態建立/刪除,SM可提供的訊號量計數範圍是0-4,294,967,294,其管理與MB類似。

9,事件元件Event Flag Component(EV)

負責管理所有的Nucleus Plus 事件組服務,每個事件組包含32個事件標示(event flag),即32位無符號整型數的每個位即是一個event flag(為1表示事件發生,0表示未發生)。其管理與MB類似。

10,儲存分配元件Partition Memory Component(PM)

負責管理所有的Nucleus Plus 分割槽記憶體,分割槽記憶體的記憶體池指的是由使用者指定的記憶體總數目固定、每個分割槽(partition)的位元組數也確定的記憶體。分割槽記憶體支援動態建立和任務的掛起/喚醒(FIFO或者任務優先順序順序)。

每個分割槽記憶體都需要一個控制塊Partition Memory Control Block (PCB)-PM_PCB(額外佔據記憶體,不包含在分割槽記憶體內),PM通過雙向連結串列維護所有建立的分割槽記憶體。每個分割槽記憶體的可用分割槽由一個null結尾的單連結串列控制,每個可用分割槽由頭結構體PM_HEADER開始。

11,動態記憶體元件Dynamic Memory Component(DM)

負責管理所有的Nucleus Plus 動態記憶體服務,動態記憶體池的起始位置和長度由使用者指定,支援動態建立/刪除和任務掛起/喚醒。動態記憶體的分配按照first fit演算法分配,沒有固定位元組數的分割槽。DM的管理與PM類似。

12,I/O驅動元件Iinput/Output Driver Component(I/O)

負責管理所有的Nucleus Plus 輸入/輸出裝置的驅動服務,提供了一種通用的、相似的s驅動服務介面,包括初始化、分配、釋放、輸入/輸出、裝置狀態獲取和服務申請終止等服務。

13,錯誤處理元件Error Component(ER)

負責管理所有的Nucleus Plus 系統錯誤。

14,歷史元件History Component(HI)

負責Nucleus Plus的歷史裝置管理。

15,許可證元件License Component (LI)

負責Nucleus Plus的許可證管理。

16,版本控制元件Release Component(RL)

負責Nucleus Plus 的版本管理。

相關文章