OS21

OS21 是一個免費、輕量級的多任務實時作業系統,基於 OS20 API 設計,使用 GNU工具進行編譯,gdb 進行調試。目前 OS21主要用於 ST公司的機頂盒主晶片(ST40/ST200)中,與應用程式一道生成單一映象檔案,具有相同的地址空間與名字空間,以及相同的特權模式。OS21 採用了多優先權、占先式的任務調度算法,任務之間使用信號量、互斥鎖、事件標籤進行同步;使用訊息佇列進行通信。實時事件由中斷處理,並使用信號量與任務通信。任務所需的記憶體分配方案由用戶選擇,任務優先權可指定。

概述

提供的主要功能有:

(1)基於 256 級的多優先權、可占先式調度;

(2)信號量(semaphores);

(3)互斥鎖(mutexes);

(4)訊息佇列(message queues);

(5)高精度定時器;

(6)存儲管理;

(7)中斷處理;

(8)節省存儲空間。

從性能上講,OS21提供的任務間切換時間小於2.6us,中斷回響時間最小為1.5us,整個代碼小於30KB,數據小於5KB。

2.OS21與 OS20 的異同點

OS21與OS20 提供的系統服務比較相似,調用的 API 函式名稱也很相似,具體來說包含

下列 API:

(1) Kernel API

(2) Memory and partitions

(3) Tasks and scheduler APIs

(4) Semaphore API

(5) Memory API

(6) Time API

但OS20針對 ST20 CPU 進行開發,OS21 則針對ST40 CPU 進行開發,二者在 BSP 部分存

在較大不同。

核心啟動:OS20提供了兩種方式來啟動核心:手動和自動方式(在編譯時通過添加 -runtime os20實現),OS21通常只使用手動方式來啟動核心。儘管

也可實現自動啟動。

int main(void)

{

kernel_initialize(NULL);

kernel_start();

kernel_timeslice(OS21_TRUE);

...

}

OS21 的時間片功能預設為關閉,要使用時需要手動打開。

任務方面:與 OS20相比,當改變任務的優先權時,該任務在佇列中的位置也發生了變

化。

OS20 使用了兩個預定義的記憶體空間——system_partion與 internal_partion,用戶也可訪問,在 OS21 中則沒有這兩個空間,而需要自行分配。在 OS21 中的堆記憶體既可由 C運行庫函式(malloc 和free)管理,也可由 OS21 自身管理。

通常情況下 OS20 中所有的_init()函式均被_create()所代替,儘管_init()函式的優點在於記憶體分配的靈活性,OS21 採取了一個不同的解決辦法來增加靈活性:除了_create()函式外,還增加了_create_p()函式來定義 partition 指針。這在存儲空間緊張的系統中,可由應用程式自己選擇從哪塊空間中分配。如圖:下列_init()函式都將由_create()或_create_p()函式代替。

message_init_queue()

message_init_queue_timeout()

partition_init_fixed()

partition_init_heap()

partition_init_simple()

semaphore_init_fifo()

semaphore_init_fifo_timeout()

semaphore_init_priority()

semaphore_init_priority_timeout()

task_init()

中斷和快取:OS20的中斷和快取 API 與ST20 的中斷快取體系結構緊密相關,其目的是為了完全使用上硬體的特性。在快取的設計上,OS21 遵循了與 OS20 一樣的設計思想,即根據具體晶片設計,每款晶片都有不同的 API,當然也不同於 OS20。而 OS21 提供的中斷則具有通用性,可在不同晶片間移植,這一點不同於 OS20。二維塊數據移動:由於二維塊數據移動嚴格與 ST20 晶片結構相關,OS21已去掉了這方面內容。

時間管理:在 OS21中,時鐘由 64 位的整型osclock_t 表示,而在 OS20 中則為32位的整型類型 clock_t。

3.OS21 作業系統——kernel

為了實現多優先權的任務調度,OS21 使用了一個很小的調度核心,確保當前運行的任

務總是處於最高調度優先權。

維護信息

1) 當前正在運行的是哪一個任務;

2) 當前準備運行的一個任務佇列。當需要作出調度決策時,該核心被調用,總的來說有下列四種情形:

1)低優先權的任務被高優先權的任務占先;

2)當一個任務停止調度,例如當該任務等待的訊息佇列為空時,此時核心會檢查任務佇列,選擇優先權最高的任務投入運行;

3)調度器會周期性地分時檢查當前執行的任務,如果有與該任務同等優先權的任務,則會選擇處於前列的任務投入運行,而備份當前任務狀態;

4)當一個中斷結束,此時沒有其他低優先權的任務運行,核心被調用。

4.OS21 作業系統-存儲管理

記憶體管理在很多嵌入式系統里都是非常重要的,因為可用記憶體經常很小所以必須被充分利用。OS21提供了三種不同的記憶體管理方式:heap, fixed和 simple,這給用戶提供了靈活的記憶體分配手段,並達到時空上的平衡。

相關詞條

相關搜尋

熱門詞條

聯絡我們