宋 羽,王 琨,張 寶
(中國(guó)兵器工業(yè)第203研究所,西安 710065)
武器系統(tǒng)大多是并發(fā)實(shí)時(shí)系統(tǒng)。武器系統(tǒng)開(kāi)發(fā)中,仿真是一種重要驗(yàn)證手段。文中分析了并發(fā)實(shí)時(shí)系統(tǒng)的一般特性,歸納了仿真的兩種硬件架構(gòu),并提出一種基于串行非實(shí)時(shí)計(jì)算機(jī)的并發(fā)實(shí)時(shí)系統(tǒng)仿真通用框架。
并發(fā)實(shí)時(shí)系統(tǒng)具有并發(fā)性和實(shí)時(shí)性。并發(fā)指的是可以在同一個(gè)芯片上多核、同一個(gè)處理器上的多個(gè)進(jìn)程或在物理分離的多處理器上執(zhí)行。實(shí)時(shí)性具有相對(duì)意義,通常來(lái)說(shuō),當(dāng)不能滿足定時(shí)約束或時(shí)限就被認(rèn)為是致命錯(cuò)誤時(shí),就說(shuō)這個(gè)定時(shí)約束是強(qiáng)的[1],武器系統(tǒng)的時(shí)間約束通常是致命的,因此武器系統(tǒng)一般為強(qiáng)實(shí)時(shí)系統(tǒng)。
一種典型的具有兩個(gè)模塊的并發(fā)實(shí)時(shí)系統(tǒng)如圖1所示。該圖描述了并發(fā)實(shí)時(shí)系統(tǒng)一種復(fù)雜形式,A與B既是數(shù)據(jù)的生產(chǎn)者,也是數(shù)據(jù)的消耗者。在圖中,A或B可以是運(yùn)行在不同處理器上的不同進(jìn)程,也可以是運(yùn)行于同一個(gè)處理器上的不同進(jìn)程。虛線代表控制流,例如時(shí)鐘或是外部事件中斷;實(shí)線代表數(shù)據(jù)流。程序的運(yùn)行由控制流激活。中間的小方框代表數(shù)據(jù)存儲(chǔ)緩沖。由于A或B有各自獨(dú)立的啟動(dòng)時(shí)刻,數(shù)據(jù)計(jì)算后不會(huì)立刻消失,而是放在存儲(chǔ)緩沖區(qū)中。程序與數(shù)據(jù)的存在時(shí)間是不同的。
當(dāng)A和B運(yùn)行時(shí)間發(fā)生交叉時(shí),如果允許在運(yùn)行過(guò)程中間交換數(shù)據(jù),A所使用的數(shù)據(jù)dBA將在tB2時(shí)刻發(fā)生變化(如圖2),當(dāng)A在tB2前后兩次用到dBA,則在一次運(yùn)算過(guò)程中將使用兩個(gè)不同數(shù)據(jù),這有可能導(dǎo)致運(yùn)行錯(cuò)誤,因此設(shè)計(jì)者要采用必要的措施消除這種不確定性,使數(shù)據(jù)僅在進(jìn)程的開(kāi)始時(shí)刻進(jìn)入程序,一旦進(jìn)入,在一次運(yùn)算過(guò)程中不再改變,直至當(dāng)次運(yùn)算結(jié)束,文獻(xiàn)[3]闡述了并發(fā)控制的幾種方法。這些并發(fā)控制方法的數(shù)據(jù)傳輸時(shí)序可以表達(dá)為圖2形式,B在 A的運(yùn)行期間產(chǎn)生新的數(shù)據(jù),而A直到B運(yùn)行結(jié)束后下一個(gè)運(yùn)行周期才會(huì)使用dBA。

圖1 典型的并發(fā)實(shí)時(shí)系統(tǒng)模塊圖

圖2 并發(fā)程序間的數(shù)據(jù)傳輸時(shí)序
按仿真實(shí)驗(yàn)中所取時(shí)間標(biāo)尺t1(模型時(shí)間)與自然時(shí)間標(biāo)尺t2(原型)之間比例關(guān)系可將仿真分為實(shí)時(shí)仿真和非實(shí)時(shí)仿真兩大類(lèi),t1/t2=1為實(shí)時(shí)仿真,否則為非實(shí)時(shí)仿真[2]。一般仿真驗(yàn)證硬件架構(gòu)見(jiàn)圖3,實(shí)時(shí)仿真中仿真程序與被驗(yàn)證對(duì)象同時(shí)運(yùn)行,通過(guò)數(shù)據(jù)采集裝置采集實(shí)際對(duì)象的輸入,產(chǎn)生標(biāo)準(zhǔn)輸出與實(shí)際輸出對(duì)比;非實(shí)時(shí)仿真一般采用數(shù)據(jù)記錄裝置記錄實(shí)際對(duì)象的輸入輸出,實(shí)際對(duì)象運(yùn)行結(jié)束后仿真程序從輸入記錄中讀取輸入數(shù)據(jù),并生成標(biāo)準(zhǔn)輸出與實(shí)際輸出對(duì)比。

圖3 仿真驗(yàn)證硬件架構(gòu)
實(shí)時(shí)仿真對(duì)于仿真程序所運(yùn)行的硬件要求較高,必須滿足實(shí)時(shí)性要求;而非實(shí)時(shí)仿真可以運(yùn)行于通用計(jì)算機(jī)上,具有較低的成本。文中的框架主要用于非實(shí)時(shí)仿真軟件,通過(guò)統(tǒng)一調(diào)度模擬并發(fā)實(shí)時(shí)計(jì)算。
當(dāng)采用通用計(jì)算機(jī)仿真并發(fā)實(shí)時(shí)系統(tǒng)時(shí),有兩個(gè)主要的約束,第一,通用計(jì)算機(jī)的運(yùn)行方式是串行的,一次只能處理一件事;第二,在實(shí)時(shí)系統(tǒng)中,有硬時(shí)鐘保證時(shí)間約束,而通用計(jì)算機(jī)一般沒(méi)有這種資源。需要一種有效的規(guī)范化設(shè)計(jì)方法,將并發(fā)實(shí)時(shí)系統(tǒng)轉(zhuǎn)換為串行非實(shí)時(shí)結(jié)構(gòu)。
對(duì)以上問(wèn)題的一個(gè)解決方案是在仿真中使用單個(gè)調(diào)度程序統(tǒng)一調(diào)度進(jìn)程,所有的進(jìn)程運(yùn)行時(shí)刻放在一個(gè)時(shí)間軸上排列,主控程序按時(shí)間順序依次循環(huán)統(tǒng)一時(shí)間軸上的每個(gè)時(shí)間點(diǎn),根據(jù)每個(gè)時(shí)間點(diǎn)上的程序標(biāo)識(shí)選擇進(jìn)程,將并發(fā)的運(yùn)行轉(zhuǎn)化為串行的邏輯分支。該方法類(lèi)似于數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)中所采用的時(shí)標(biāo)排序并發(fā)控制方法[4],雖然數(shù)據(jù)庫(kù)系統(tǒng)與仿真是兩個(gè)完全不同的領(lǐng)域,但在它們所面臨的并發(fā)問(wèn)題具有相似性。
在實(shí)現(xiàn)該框架前,需先收集以下信息:
1)每個(gè)處理器上運(yùn)行的進(jìn)程,其中數(shù)據(jù)記錄應(yīng)作為運(yùn)行于記錄裝置上的一個(gè)并發(fā)進(jìn)程;
2)每個(gè)進(jìn)程之間交換的數(shù)據(jù);
3)每個(gè)進(jìn)程的運(yùn)行時(shí)間,確認(rèn)是否可忽略,對(duì)于不可忽略時(shí)間的進(jìn)程確定運(yùn)行時(shí)間;
4)每個(gè)進(jìn)程的啟動(dòng)條件。
該框架流程見(jiàn)圖4,圖中流程的詳細(xì)說(shuō)明如下:
1)生成進(jìn)程和數(shù)據(jù)對(duì)應(yīng)的時(shí)間列。
一般有以下幾種方式:
a)采用數(shù)據(jù)記錄中已有的時(shí)間列:該時(shí)間列通常來(lái)自于仿真對(duì)象或記錄裝置的內(nèi)部時(shí)鐘;
b)根據(jù)輸入計(jì)算時(shí)間:適用于由外部輸入觸發(fā)的進(jìn)程,例如在某個(gè)脈沖到來(lái)時(shí)才運(yùn)行的程序;
c)固定的時(shí)間:適用于按照固定規(guī)律運(yùn)行的進(jìn)程,例如以固定周期運(yùn)行的某個(gè)運(yùn)算程序。
對(duì)于運(yùn)行時(shí)間可以忽略不計(jì)的進(jìn)程,僅僅為進(jìn)程的運(yùn)行建立時(shí)間列,對(duì)于運(yùn)行時(shí)間不可忽略的進(jìn)程,需要分解為“運(yùn)行”和“數(shù)據(jù)更新”兩個(gè)進(jìn)程,每個(gè)進(jìn)程的時(shí)間確定方法可以是以下兩種方法之一:
①所有進(jìn)程運(yùn)行時(shí)刻使用實(shí)際進(jìn)程開(kāi)始時(shí)刻,接口數(shù)據(jù)的更新時(shí)刻使用發(fā)送方進(jìn)程的結(jié)束時(shí)刻;
②所有進(jìn)程運(yùn)行時(shí)刻使用實(shí)際進(jìn)程結(jié)束時(shí)刻,接口數(shù)據(jù)的更新時(shí)刻使用接收方進(jìn)程的開(kāi)始時(shí)刻。
2)由于不同硬件時(shí)鐘可能存在誤差,因此時(shí)間列需要同步。
3)按照時(shí)間排列運(yùn)行次序。
有可能出現(xiàn)兩個(gè)進(jìn)程運(yùn)行時(shí)間相同的情況,處理方法如下:

圖4 仿真流程框架
b)位于不同處理器并且時(shí)間相同:這可能是巧合,也可能是因?yàn)橛涗浽O(shè)備的時(shí)間分辨率不夠?qū)е虏荒軈^(qū)分具有細(xì)微時(shí)差的兩個(gè)進(jìn)程。此時(shí)無(wú)法確定進(jìn)程的先后順序,只有以任意順序排列進(jìn)程。這種不確定性可能導(dǎo)致仿真結(jié)果與實(shí)際的偏離,因此仿真者應(yīng)確保記錄設(shè)備有足夠的時(shí)間分辨率或者允許仿真結(jié)果和實(shí)際輸出的偏離。
4)初始化狀態(tài)變量時(shí)要包括所有數(shù)據(jù)接口緩沖和模塊自身狀態(tài)。
5)仿真循環(huán),循環(huán)中判斷當(dāng)前步驟對(duì)應(yīng)的進(jìn)程標(biāo)識(shí),選擇運(yùn)行不同的進(jìn)程。
以下是使用Matlab實(shí)現(xiàn)該框架一個(gè)樣例:
%%================%%
%生成時(shí)間列,并分配標(biāo)識(shí)
發(fā)展戰(zhàn)略是發(fā)展行動(dòng)的先導(dǎo),是發(fā)展思路、發(fā)展方向、發(fā)展著力點(diǎn)的集中體現(xiàn),要深入推進(jìn)“鄉(xiāng)村振興戰(zhàn)略”就必須全面貫徹習(xí)近平新時(shí)代中國(guó)特色社會(huì)主義思想和切實(shí)落實(shí)“五大發(fā)展理念”,不斷拓寬發(fā)展新境界,落實(shí)發(fā)展新舉措。通過(guò)這次研討會(huì)全面深入的研討,必將為我國(guó)鄉(xiāng)村振興和“三農(nóng)”工作提供更多實(shí)踐經(jīng)驗(yàn)和理論鏡鑒。
tIn=aTu;ProcIn=0*ones(size(tIn));
tA=aT0;ProcA=1*ones(size(tA));
tB=aT1;ProcB=2*ones(size(tB));
tRc=0∶0.01∶10;ProcRc=3*ones(size(tRc));
tA=tB-t0AB;%同步A和B
tsSim=sortrows([tA,ProcA;tB,ProcB;tRc;ProcRc],1);% 按時(shí)間排列運(yùn)行次序
%初始化狀態(tài)變量
.....
kIn=1;kOut=1;nCompute=length(tsSim);
%仿真循環(huán)
for k=1:nCompute;
procId=tsSim(k,2);t=tsSim(k,1);
switch procId
case 0;u=inputRec(kIn),kIn=kIn+1;
case 1;ya=fa(u,t);
case 2;yb=fb(ya,t);
case 3;y(kOut)=yb,kOut=kOut+1;
otherwise
end
end
%%================%%
文中的框架結(jié)構(gòu)簡(jiǎn)單、易于擴(kuò)展、適用范圍廣,可以有效加快仿真程序開(kāi)發(fā),提高代碼質(zhì)量;同時(shí)由于人的大腦類(lèi)似低速串行處理器,通過(guò)轉(zhuǎn)化模型,可以提高開(kāi)發(fā)人員對(duì)于軟件行為的清晰理解。
[1]Jane W S Liu.實(shí)時(shí)系統(tǒng)[M].北京:高等教育出版社,2002.
[2]何江華.計(jì)算機(jī)仿真導(dǎo)論[M].北京:科學(xué)出版社,2001.
[3]慕春隸.嵌入式系統(tǒng)的構(gòu)建[M].北京:清華大學(xué)出版社,2004.
[4]George Coulouris,Jean Dollimore,Tim Kindberg.分布式系統(tǒng)概念與設(shè)計(jì)[M].金蓓弘,曹冬磊,譯.北京:機(jī)械工業(yè)出版社,2008.