?

基于Windows平臺的實時信息處理方法

2020-06-29 12:14段紅亮劉天博邵春收朱元元
計算機測量與控制 2020年6期
關鍵詞:實時性線程串口

段紅亮,2,劉天博,邵春收,王 鵬,朱元元

(1.北京航天長征飛行器研究所,北京 100076;2.西北工業大學 機電學院,西安 710072)

0 引言

大部分武器系統設備都是強實時性的,設備之間信息交互都有嚴格的時間限制,要求毫秒級或微秒級,甚至是納秒級,所以主流的彈上設備均基于DSP、FPGA、單片機等架構或者是組合架構實現,也有少部分采用實時操作系統平臺。地面測試設備用于武器設備的開發測試、出廠測試、上彈總裝前后或者年度定檢等等一系列測試工作,是所有武器必配設備,地面測試設備是武器設備的“診斷醫生”,只有經過地面測試設備認證為“健康”的彈上設備才允許使用,地面測試設備的研制開發甚至要早于彈上設備。

地面測試設備與彈上設備進行通信和指令交互,完成功能測試等。微軟的Windows操作系統由于具備良好通用性、圖形用戶界面以及眾多的技術支持基礎而成為武器地面測試設備的首選解決方案。目前絕大部分型號的地面測試設備為了兼顧成本和開發難度等因素,采用Windows+x86架構實現。但基于搶占式多任務調度策略就決定了Windows系統的非實時性屬性,作為通用高性能操作系統而設計的操作系統,不能保證中斷響應時間的確定性,也沒有提供讓線程獲得確定執行時間的機制。在測試時地面測試軟件上偶爾會出現某條指令超時的現象,這時就很難判斷是彈上設備指令確實超時,還是由于地面測試設備非實時性而造成的時間誤判。

針對Windows平臺的非實時性問題,工業控制上一般采用RTX硬實時解決方案[1-2],RTX(Real-Time eXtension)是由美國IntervalZero公司開發的基于Windows平臺擴展的實時控制解決方案,但需要單獨購買RTX軟件擴展包,且RTX信息處理軟件獨立于Windows平臺需求單獨開發,而武器地面測試設備由于生產量少、需求變化快等特點,成本與周期上不適于采用RTX[3]。文獻[4]中提出了一種循環緩存處理方法來提高Windows系統的實時性,這種用空間換時間的方法在操作系統負載較小時一定程度上提高了實時性,但由于對緩存讀寫線程仍為操作系統的一個普通線程,在操作系統負載較大時,循環緩存處理方法的實時性不能得到保證。

文獻[5]提出了一種Windows操作系統中的排他性線程獨占技術,使用該線程可以獨占一個CPU邏輯核,而不再受Windows任務管理器的調度,物理上將該邏輯核等效DSP使用,保證了信息處理的實時性?;谖墨I[5-7]的研究成果,面向武器地面測試設備,本文提出了一種實用的實時信息處理方法,可以實時處理以太網、串口等有線或無線I/O信息,該方法開發難度低、周期短且不增加設備成本。

論文結構如下:第1部分簡要分析了Windows非實時性機理,第2部分詳細闡述高精度軟時鐘技術及實現方法,第3部分地面測試軟件的實時測試方法,第4部分介紹對本方法的有效性試驗分析,最后一部分對全文進行了總結。

1 Windows非實時性機理

1.1 x86的指令集

x86的GPP架構本身不能實現納秒級強實時性要求,這是通用CPU的CISC指令集決定的,有兩個層次原因,首先是CISC指令集長短不一,所以占用CPU時鐘周期不一;二是Intel在指令集中有很多優化算法,同一條匯編指令在同一個CPU的不同負載下可能會被編譯成不同的匯編指令,目前Intel的CPU的時鐘周期都是亞納秒級,所以x86 CPU難以實現納秒級的高精度定時,用于十納秒級定時精度是普遍可以接受的。從目前的彈上設備所要求的毫秒級或微秒級實時性要求來看,x86 CPU架構本身的定時精度是可以忽略不計。

1.2 調度原理

Windows操作系統調度及響應時延的不確定性。以串口通信為例(并口、以太網口類似),地面測試設備與彈上設備的信息交互流程如圖1所示,忽略彈上設備處理時延(或者假定為一個確定值)。

圖1 信息流示意圖

例如,有條指令要求彈上設備在100 ms內回復指令,那么處理過程如下:

1)測試軟件打開某個串口,或在軟件初始化時即打開這個串口,并配置串口參數;

2)當有個指令發送時,測試軟件調用WinAPI串口函數,發送該指令,同時啟動計時器,設置100 ms的超時值;

3)數據由用戶態進入內核態,操作系統調度器需要將串口發送API指令調入到CPU任務隊列中,當占用CPU當前時間片時,CPU執行該指令;

4)CPU將發送數據寫入到串口Tx寄存器中,同時通知串口有數據到達,請發送;

5)串口通過物理層鏈路發送給DS設備,DS設備響應該指令后發送回令給串口;

6)串口接收回令數據,放入到Rx寄存器中,同時通知操作系統有數據到達,通知消息本身是放入到操作系統的消息隊列中;

7)操作系統調度器在消息隊列中讀到串口的通知后,需要將串口接收API指令調入到CPU任務隊列中,當占用CPU當前時間片時,CPU執行該指令;

8)CPU從串口Rx寄存器讀取數據,交給測試軟件,由內核態進入用戶態;

9)測試軟件根據數據協議解析該數據,確認為當前指令的有效回令后,停止計時器,同時判斷計時器是否超100 ms。至此一個完整的信息交互結束。

Windows是基于消息響應機制的多線程的非實時性操作系統,盡管微軟沒有公開Windows操作系統內核,當通過一些公開資料和微軟的技術文檔可知,一個線程一旦調入到CPU中,那么最少占有一個時間片的時間長度才會有可能被調出,而一個時間片長為1/16 s。

在Windows的任務管理器的進程欄可以看到,假如用戶未打開任何一個應用程序,操作系統都會有約100個進程在運行,地面測試軟件運行時,也只是其中之一個進程。這些進程都有不同的優先級,所以當一個進程從進入CPU調度隊列到占用CPU時間片,這個時間是不可預知的,這是Windows非實時性的最主要根源所在。具體到我們的串口收發數據流程中,第3)步和第7)步是時延不確定的最主要環節。

1.3 試驗驗證

本文進行了一項測試,當地面測試設備只運行測試軟件,其他所有應用軟件都停止(包括殺毒軟件),程序循環發送指令,等待100 ms,若超時未收到回令則停止循環并報錯,若正常則繼續循環。測試6個小時左右,發生2次超時。

作為對比測試,在運行測試軟件循環測試的同時,打開殺毒軟件,進行全盤查殺病毒,測試1個小時左右,發生了12次超時。主要原因是殺毒時頻繁的磁盤IO操作占用CPU資源,殺毒軟件進程也需要大量占用CPU時間片,從而提高了與地面測試軟件的碰撞沖突概率,造成了大量的超時現象。

2 高精度軟時鐘

高精度時鐘源是實現信息實時處理的前提和基準。例如通信設備上多采用外部時鐘源或衛星授時方法,而在地面測試設備上外掛時鐘源或增加衛星授時模塊的方法會顯著增加復雜度和成本,不易實現。

為了使各種實時處理任務能在Windows平臺上正確地執行,利用操作系統API函數實現軟時鐘是可行的。然而Windows目前提供的延時函數最小時間粒度都是ms級,且理想情況下精度僅能達到百ms級,所以直接調用API函數也不能保證時間精度。

對于單核CPU,Intel匯編指令RDTSC可以獲得納秒級的精度[8]。然而,這項技術不再適用于多核環境[9]。為了構造高精度的軟件時鐘,本文采用了文獻[5]所提出的排他性線程獨占技術,它為輸出實時行為的特定任務分配一個獨占的處理器內核。一個線程被創建并專用于在一個獨占的CPU邏輯核上執行。該線程所做的一切就是調用RDTSC來計算當前系統時間。由于線程是不可中斷的,這種方法為內核模式的實時過程獲得了一個高精度的時鐘實用程序。圖2為構造這種時鐘的偽代碼。

圖2 高精度時鐘源偽代碼

通過設置軟件時鐘,可以在每一個閾值時間段中執行一次TIME_OUT事件。例如,將閾值定義為1 ms或1 μs,在主頻為2.8 GHz頻率的CPU上,觀察到實際的超時時間周期比閾值大幾納秒,這是合理的,因為在CPU中執行單個匯編指令所需的時間為納秒級。所以本方法所生成的軟時鐘可以達到十納秒級精度。

3 測試軟件實時信息處理方法

3.1 測試軟件實時性設計

為保證地面測試軟件實時性,信息交互線程也采用排他性線程獨占技術,獨占一個CPU邏輯核,由于Intel的i5系列之后都是至少包含了4個物理核(單核雙線程技術,等效為8個邏輯核),所以地面測試設備中被獨占2~3個邏輯核后并不會顯著操作系統的其他功能,如圖3所示。

由圖3可以看到,邏輯核3、5、7分別被3個線程獨占,在運行中被獨占的邏輯核的CPU使用率始終為100%,不會被操作系統任務管理器中斷,從而保證了實時性。

信息交互線程在與彈上設備發生信息交互時,使用本文第2章所設計的高精度時鐘源來作為時鐘基準,可以精確計算出彈上設備回令是否超時。

3.2 測試軟件高速計算設計

地面測試軟件與彈上設備接口分為有線和無線接口兩類,其中有線接口多為串口、并口、1553B接口和以太網口等,無線接口多為各類專用無線通信接口,如遙測系統無線接口等。

一般來說,有線接口的計算量不大,若地面測試軟件與彈上設備接口為無線接口,無線通信協議的計算量是非常巨大的,尤其是物理層,包含了信道編碼與解調、FFT等。一般來說,GPP的運算能力是不能勝任基帶數字信號處理計算的,這也是為什么到目前為止商用無線通信都是用專用基帶芯片的原因。為了突破這個計算瓶頸,可充分借鑒FPGA的原理,地面測試軟件可將所有輸入與輸出結果映射為一個查找表(LUT),然后將LUT裝載到CPU的二級緩存中。一方面節省了計算的時間開銷,另一方面減少了查找的時間[10-14]。在通用CPU中,不同存儲器的典型容量和訪問時間如圖4所示。

圖4 通用存儲器容量及訪問時間

3.3 測試軟件低時延傳輸設計

由圖1可以看到串口在Windows平臺下的信息流,是包含了多個環節。

在信息流中,每一個環節意味著數據的轉移和傳遞,為了避免程度中內存拷貝所引入的處理時延,要在地面測試軟件設計開發時盡可能多地采用數據“零”拷貝,即利用MDL(memory descriptor list)來進行內存操作,這樣可顯著減小信息傳輸時延,避免造成地面測試設備向彈上設備回令時超時。

4 實驗結果與分析

用兩臺地面測試設備搭建試驗場景。為不失一般性,測試設備之間采用串口(RS422)通信,兩臺測試設備均是Windows平臺,安裝了采用了本文所述實時信息處理方法的軟件。試驗方法如下:

1)測試設備1通過串口向測試設備2發送一個串口數據幀1,同時記錄時間戳T1;

2)測試設備2收到數據幀1后,立即向測試設備1返回一個數據幀2;

3)測試設備1收到數據幀2后,記錄時間戳T2,計算出時間差ΔT=T2-T1;

4)重復上述步驟1)~ 3),記錄1 000次時間差數據;

5)打開測試設備1上殺毒軟件,執行全盤掃描,重復上述步驟1)~4),記錄1 000次時間差數據;

6)關閉測試設備1上殺毒軟件,打開測試設備2上殺毒軟件,執行全盤掃描,重復上述步驟1)~4),記錄1 000次時間差數據;

7)同時打開測試設備1和測試設備2上殺毒軟件,執行全盤掃描,重復上述步驟1)~4),記錄1 000次時間差數據。

4次測試結果分別如圖5所示。

圖5 測試結果及對比

由測試結果分析,4次測試均值依次為12.2 μs,12.5 μs,12.1 μs,12.0 μs,相差不大。由圖5可見,4次結果均方差也分布在2~4之間,數據一致性較好,從而證明了本方法的有效性。

5 結束語

面向Windows平臺下的地面測試設備,本文提出了一種基于排他性線程獨占技術和高精度軟時鐘技術的實時信息處理方法,可以實時處理以太網、串口等有線或無線I/O信息,該方法開發難度低、周期短且不增加設備成本。首先簡要分析了Windows非實時性機理,進而詳細闡述高精度軟時鐘技術和地面測試軟件的實時信息處理方法,最后對本方法的有效性試驗驗證分析,測試數據一致性較好。

猜你喜歡
實時性線程串口
5G終端模擬系統隨機接入過程的設計與實現
實時操作系統mbedOS 互斥量調度機制剖析
淺析體育賽事售票系統錯票問題的對策研究
基于EM9000工控板高性能雙串口通信模型設計與實現
MCS—51單片機中的多串口通訊技術的應用
計算機控制系統實時性的提高策略
可編程控制器的實時處理器的研究
基于B/S的實時用戶行為檢測管理系統設計與實現
微機串口的測試診斷
基于VC串口通信的實現
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合