?

一種基于SylixOS的多任務間數據通信方法探究

2021-03-18 06:53
科學與信息化 2021年7期
關鍵詞:多任務數據通信隊列

南京科瑞達電子裝備有限責任公司 江蘇 南京 211100

引言

隨著芯片制造工藝的持續進步和計算機技術的快速發展,嵌入式操作系統作為信息社會很重要的基礎支撐已被廣泛用于各類電子設備中,并發揮了極其重要的作用。嵌入式實時操作系統是一類特殊的嵌入式操作系統,它能夠在外界事件或數據產生時迅速反應,并以足夠快的速度處理事件,以保證系統能夠在確定的時間內對處理結果做出快速響應,同時控制所有實時任務協調一致運行。目前在工業控制、軍事設備、航空航天等對系統響應時間有嚴苛要求的領域中都有著非常廣泛的應用。

在一個中大型嵌入式軟件應用中,通常需要建立一個復雜的多任務環境,系統運行時通過任務間交換消息來實現某些特定的系統功能。在這些任務信息交互過程中,普遍存在一個任務往多個任務發送消息的場景,同時也存在某一個任務會接收來自多個其他任務發送過來的消息的場景。這些任務間數據通信交錯復雜,并且任務間通信的數據長度各不相同。因此需要研究一種高效的、實時的、通信數據可變長的,且無任何中轉機制的多任務間點對點的數據通信方法。

1 嵌入式實時操作系統SylixOS簡介

SylixOS操作系統是一種基于搶占式多任務硬實時操作系統,兼容IEEE1003(ISO/IEC9945)操作系統接口規范,兼容POSIX 1003.1b(ISO/IEC 9945-1)實時編程的標準,具有優秀的實時性能,能夠支持無限多任務,搶占式調度支持256個任務優先級,支持虛擬進程,支持優先級繼承及防止優先級反轉功能。同時支持二進制信號量、計數型信號量、互斥信號量、消息隊列等資源共享方式。由于兼容POSIX標準,同樣一個Linux下的符合POSIX標準的應用程序,無須任何修改可以在SylixOS下完美運行。另外,VxWorks也是一款符合POSIX標準的實時操作系統,因此,SylixOS可以使VxWorks開發者能夠很快地適應SylixOS的程序開發,并提供了VxWorks兼容接口。

SylixOS是一款大型嵌入式實時操作系統,經過多年開發,目前已經成為一個功能完善、性能卓越、可靠穩定的嵌入式系統軟件開發平臺,在設計思路上借鑒了眾多實時操作系統的設計思想,使得SylixOS在功能和具體性能上達到或超過了眾多實時操作系統的水平,成為國內實時操作系統的最優秀代表之一,目前在工業自動化、軍事、通信、民用等領域都有較為廣泛的應用[1]。

2 傳統多任務間通信方式存在的問題

SylixOS作為大型實時操作系統,支持的多任務間通信方式主要有以下幾種:共享內存、信號量和消息隊列。同時為了實現多任務對臨界資源的互斥訪問,SylixOS也提供了很多種方法,主要包括讀寫鎖、條件變量、自旋鎖、原子量及信號量等。

在一個大型的嵌入式軟件應用中,可能同時運行有十幾個甚至幾十個軟件任務,并且任務之間的消息交互非常頻繁,通信的數據長度較大。共享內存的方式需要開辟很大一個內存空間來存儲中間數據,同時需要對共享區域數據的讀寫操作做好互斥。一方面,雖然操作系統內核提供了讀寫鎖、信號量等機制可以在一定條件下解決共享資源的互斥訪問問題,但是在一些任務間通信較為復雜的多任務環境中,勢必會引起數據發送端的任務大量排隊等待的現象,從而降低了系統的運行效率。另一方面,消息隊列機制雖然可以通過異步消息傳送模型來避免由于信號量引起的排隊問題,但是當任務數較多時,需要的消息隊列個數將會非常多,而且消息隊列中單個消息的數據長度將會要求很大,勢必會造成大量的系統內存資源耗費。下面介紹的多任務間通信方法在克服這些問題方面有著一定的優勢。

3 基于SylixOS的多任務間數據通信設計

在SylixOS操作系統環境下,每一項系統功能的完成往往由多個任務或者多個任務與中斷服務程序共同完成。鑒于此,本文設計了一種新的任務間數據交互方式,采用的是點對點的消息機制,每個任務都有一個類似地址的代號(ID),發送的數據被封裝為一個消息,發送消息的任務(信源)指定接收消息任務(信宿)的代號后將消息發出,可以直接通過互斥信號量保護機制將數據壓入到信宿的環形隊列中,再計數信號量同步機制由消息接收任務進行數據處理。

第一步,由于任務間通信的消息長度和內容都是用戶自己定義,可以是數據、指令或指針等,因此,我們在創建每一個任務時,需要創建一個與之關聯的用于存儲消息的環形隊列,環形隊列緩沖區總大小由用戶根據實際任務交互的消息大小和數量來確定,環形隊列的結構如下圖 1所示。同時為保證任務間通信時的同步與互斥,需要分別創建一個與任務相關聯的二進制信號量與計數信號量[2]。

圖1 任務的環形隊列示意圖

每個任務的環形隊列和信號量的創建過程如下:

以上程序段在系統中創建并啟動Task1、Task2、Task3,Task1建立一個緩存大小為RNG_SIZE1的環形隊列,同時創建一個二進制信號量和一個計數信號量,名稱分別為“semB1”和“semC1”。Task2建立一個緩存大小為RNG_SIZE2的環形隊列,同時創建一個二進制信號量和一個計數信號量,名稱分別為“semB2”和“semC2”。Task3建立一個緩存大小為RNG_SIZE3的環形隊列,同時創建一個二進制信號量和一個計數信號量,名稱分別為“semB3”和“semC3”。

第二步,需要發送消息的任務將消息送入接收任務的消息環形隊列中。消息發送任務對需要發送的數據進行消息頭封裝,消息結構如下表 1所示。在發送數據時,根據接收方ID獲取接收任務ID,然后發送任務直接將數據消息壓入接收任務的環形隊列中,同時釋放同步信號量[3]。任務消息發送處理流程圖如下圖 2所示:

表1 任務間通信消息結構表

表2 消息控制字定義表

圖2 任務消息發送處理流程圖

第三步,消息接收任務獲取同步信號量之后首先讀取消息長度,然后根據消息長度讀取環形隊列緩沖區的消息內容進行相對應的處理[4]。任務消息接收處理流程圖如下圖3所示:

圖3 任務消息接收處理流程圖

4 實驗證明

在CSP2020雙核處理器上,創建一個基于SylixOS的軟件應用。按照上述任務間數據通信的方法,應用中分別創建并激活三個軟件任務,任務名分別為Task1、Task2、Task3。測試三個任務之間互相發送和接收不同數據長度(128字節、1K字節、4K字節)的消息(消息格式按照上述表1進行封裝),分別測試1000次,最后計算得到數據從發送到成功接收的最大時間、最小時間和平均時間[5]。測試結果如下所示:

5 結束語

上述基于SylixOS的多任務間數據通信方法,解決了大型復雜嵌入式系統中任務間一對多、多對一的數據通信問題,滿足其對于嵌入式實時操作系統中多任務間通信效率高、實時性強、通信數據可變長等要求,目前該方法已經在某型電子對抗裝備應用軟件中得到了成功的應用。

猜你喜歡
多任務數據通信隊列
數字時代的注意困境:媒體多任務的視角*
結合自監督學習的多任務文本語義匹配方法
面向多任務的無人系統通信及控制系統設計與實現
隊列隊形體育教案
隊列里的小秘密
基于多隊列切換的SDN擁塞控制*
在隊列里
數據通信網絡維護與網絡安全問題探討
基于EDA技術的通用異步收發器設計
基于Reworks操作系統的信息交互軟件設計
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合