陳香蘭,李 曦,汪 超,周學(xué)海
(中國科學(xué)技術(shù)大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,安徽 合肥 230027)
航空航天、汽車電子和軌道交通等硬實時HRT(Hard Real-Time)系統(tǒng)需要嚴(yán)格的時域控制,要求系統(tǒng)設(shè)計滿足時間可預(yù)測性,以保證時序行為確定性和安全隔離。所謂“時間可預(yù)測性”一般指靜態(tài)地計算程序執(zhí)行時間(Execution Time)的安全和精確上界的能力,與計算機(jī)體系結(jié)構(gòu)和任務(wù)執(zhí)行機(jī)制密切相關(guān)?,F(xiàn)代的計算機(jī)系統(tǒng)通過在各個層次引入計算并行化和訪存緩存化等優(yōu)化機(jī)制,雖然有效提升了系統(tǒng)的平均性能,卻也帶來了嚴(yán)重的時序不確定性問題。另一方面,傳統(tǒng)實時系統(tǒng)設(shè)計采用優(yōu)先級調(diào)度策略,依賴定時器盡力而為地滿足任務(wù)執(zhí)行的時間約束,但定時器為處理器外設(shè),與指令執(zhí)行異步,且優(yōu)先級調(diào)度可能存在時序異常等問題。這兩方面的原因?qū)е鲁绦驁?zhí)行時間在設(shè)計階段難以緊致確定,且平臺依賴,難以驗證。因此,現(xiàn)有設(shè)計方法只能基于保守設(shè)計思想,以最壞情況執(zhí)行時間WCET(Worst-Case Execution Time)分析理論為基礎(chǔ),采用時序相對簡單的系統(tǒng)架構(gòu)或過量資源預(yù)留策略,導(dǎo)致實際應(yīng)用中的資源利用率甚至不足30%。即便如此,在設(shè)計時仍然無法保證可預(yù)測性,操作的正確性只能事后驗證。
未來的實時系統(tǒng)具有混合關(guān)鍵系統(tǒng)MCS(Mixed Critical System)特征,要求為時序關(guān)鍵(Timing Critical)應(yīng)用提供實時性保證,為安全關(guān)鍵(Safety Critical)應(yīng)用提供時空隔離能力,為其他應(yīng)用提供高性能算力。因此,需要構(gòu)建嚴(yán)格的緊致時間MTTT(Multi-Tier Tight Timing)設(shè)計方法,需要突破現(xiàn)有計算機(jī)體系結(jié)構(gòu)理論和方法的局限,建立軟硬件混合系統(tǒng)的建模方法。
自20世紀(jì)90年代起,實時系統(tǒng)研究者認(rèn)識到時間可預(yù)測性對硬實時系統(tǒng)設(shè)計的重要性,以構(gòu)造時間行為可預(yù)測的實時系統(tǒng)為目標(biāo),從計算機(jī)系統(tǒng)結(jié)構(gòu)、處理器微結(jié)構(gòu)、編程模型和編程語言等方面展開了廣泛而深入的研究。研究表明,采用構(gòu)件化軟件體系結(jié)構(gòu)、基于時間觸發(fā)執(zhí)行機(jī)制和LET(Logical Execution Time)編程模型[1]構(gòu)建時序關(guān)鍵系統(tǒng)是實現(xiàn)MCS系統(tǒng)時序隔離、可預(yù)測、可組合和可擴(kuò)展(Extensibility)的可行技術(shù)路線。
但是,受上述體系結(jié)構(gòu)和任務(wù)執(zhí)行機(jī)制限制,LET模型系統(tǒng)執(zhí)行效率低下。為此,本文認(rèn)為必須解決2個關(guān)鍵問題:(1)建立操作的時間語義模型,明確其時間行為、時間屬性和時間約束等要求;(2)突破現(xiàn)有計算機(jī)系統(tǒng)結(jié)構(gòu)限制,提出具有時間語義的實時計算基礎(chǔ)架構(gòu)模型(處理器體系結(jié)構(gòu)、編程語言、分布式通信)和編程范式。目前廣泛應(yīng)用的建模方法只提供了描述時序約束的語法糖,缺少時間語義,無法在設(shè)計時進(jìn)行時序驗證和組合。
本文提出一種具有時間語義的處理器體系結(jié)構(gòu)模型——實時機(jī)RTM(Real-Time Machine),和時間觸發(fā)指令集TTI(Time-Triggered Instruction set)[2],作為構(gòu)建多層次協(xié)同的緊致時間MTTT設(shè)計方法的重要基礎(chǔ)。
本節(jié)對當(dāng)前支持實時計算的處理器體系結(jié)構(gòu)和高級編程語言的研究現(xiàn)狀進(jìn)行梳理。
實時處理器研究工作可分為3類:時間可預(yù)測處理器TPP(Time/Temporal/Timing Predictable Processor)、RTOS(Real-Time Operating System)加速器和反應(yīng)式處理器。
LEOPARD(LEOn-based Probabilictically Analyzable processor Design)[3]基于通用處理器LEO,增加低開銷機(jī)制,支持基于測量的時序分析MBTA(Measurement-Based Timing Analysis)WCET時捕捉抖動(延時變化)資源的影響。在計算核級,分別控制Cache、TLB和延時可變的浮點計算單元的抖動。在芯片級,控制競爭,保證時間可組合。
DMT(Dominant Meta Thread)[4]為同步多線程SMT(Simultaneous MultiTreading)處理器。處理器中存在多個硬實時(HRT)和軟實時SRT(Soft Real-Time)或非實時線程。主線程DMT以看起來是處理器中的唯一線程的方式執(zhí)行,因此可以采用單線程WCET分析技術(shù)。通過主時間共享技術(shù)DTS(Dominant Time Sharing),多個HRT線程共享DMT的執(zhí)行時間。各線程的時間片長度和周期可以在運(yùn)行時調(diào)整。
FlexPRET[5]處理器為SMT處理器,采用特殊前推通路避免數(shù)據(jù)依賴,采用細(xì)粒度多線程技術(shù)通過并發(fā)降低不使用動態(tài)分支預(yù)測和Cache所導(dǎo)致的性能損失,達(dá)到WCET計算的復(fù)雜度與平均計算性能之間的平衡。同時執(zhí)行HRT任務(wù)和SRT任務(wù)。流水線使用線程隔離技術(shù)(HRT線程時分多址)消除線程間干擾。指令調(diào)度對SRT任務(wù)透明,不影響HRT任務(wù)。
同時,F(xiàn)lexPRET以所謂PRET(PREcision-Timed)機(jī)模型[6]——一種提供可重復(fù)和可控制時序的處理器微結(jié)構(gòu)模型——為基礎(chǔ),針對時序可重復(fù)性問題進(jìn)行指令集擴(kuò)充,增加了一些時序控制指令,包括設(shè)定代碼段的執(zhí)行時間下界指令delay_until、設(shè)定跳轉(zhuǎn)時間下界指令branch_expire以及設(shè)定在某個時刻拋出異常的指令interrupt_expire。PRET機(jī)采用物理與邏輯混合的時間概念。在FlexPRET中,時間表示為相對于系統(tǒng)加電或復(fù)位開始的納秒值而不是時鐘滴答數(shù),時序精度為一個時鐘周期,時鐘寬度為32位,更長的相對時間需要軟件實現(xiàn)。這種表示方式使程序的時間值與處理器時鐘頻率無關(guān),保證了二進(jìn)制代碼的可移植性,并支持動態(tài)頻率調(diào)節(jié)技術(shù)。對分布式系統(tǒng),可以通過調(diào)整定時器的增加值來實現(xiàn)時間同步,并維持亞納秒定時精度。FlexPRET將具有明確時序約束的硬實時線程(HRT)和傳統(tǒng)的軟實時線程(SRT)組合在一起,由應(yīng)用程序平衡共享處理器資源,將HRT不占用的流水線周期讓給SRT使用。硬件多線程技術(shù)顯示,確定性隨著應(yīng)用中并發(fā)性增加而增加,與傳統(tǒng)處理器差別顯著。只要有足夠的并發(fā)性,流水線停頓和訪存延遲較小,線程執(zhí)行的時序更加規(guī)則和可預(yù)測,中斷響應(yīng)延遲也降低幾個數(shù)量級,處理器利用率可達(dá)100%,但線程交替訪問,難以確定截止時間。
ARPRET(Auckland Reactive PRET)[7]處理器用于執(zhí)行PRET-C程序。PRET-C是C語言的宏擴(kuò)展,支持同步并發(fā)和表達(dá)邏輯時間的高級結(jié)構(gòu)。ARPRET基于3級流水線軟核Microblaze和1個硬件調(diào)度器PFU(Predictable Functional Unit)。只使用片上存儲器,因此其讀寫訪存指令為1個時鐘周期。ARPRET以吞吐率和簡化最壞情況響應(yīng)時間WCRT(Worst-Case Response Time)分析為目標(biāo)。采用邏輯時間概念,通過靜態(tài)代碼分析實現(xiàn)邏輯時間和物理時間的映射。
JOP(Java Optimized Processor)處理器[8]使用2級棧緩存架構(gòu)實現(xiàn)Java虛擬機(jī)的棧架構(gòu)。采用3級流水線,使用2個寄存器存儲2個棧頂對象,棧的其他部分在SRAM中。由于分支延遲開銷很小,因此不使用分支預(yù)測。JOP中的所有字節(jié)碼被轉(zhuǎn)換為固定長度的微指令,每個微指令的執(zhí)行周期數(shù)固定,獨立于其周圍的指令。
ARPA-MT(Advanced Real-time Processor Architecture-MultiThreaded)[9]是一種基于MIPS32架構(gòu)的SMT處理器,針對多任務(wù)實時系統(tǒng)進(jìn)行了優(yōu)化。ARPA-MT的協(xié)處理器0負(fù)責(zé)內(nèi)存管理、異常和中斷處理,協(xié)處理器2則實現(xiàn)了實時系統(tǒng)的硬件支持,如定時、任務(wù)調(diào)度、同步和切換,以及時序約束檢測。這些功能的硬件實現(xiàn)能夠更快、更加可預(yù)測地執(zhí)行任務(wù),減少了RTOS開銷,并改善其確定性。
與環(huán)境高效和可靠地交互(稱“反應(yīng)”)是面向控制的嵌入式系統(tǒng)應(yīng)用的關(guān)鍵特征,往往采用同步語言(如Esterel)和編程范式。反應(yīng)式處理器不使用中斷而是使用ISA(Instruction-Set Architecture)指令與環(huán)境交互,且執(zhí)行機(jī)制采用時間觸發(fā)而非事件觸發(fā)。REMIC(REactive MICroprocessor)[10]是帶有同步反應(yīng)式功能單元和控制單元的反應(yīng)式處理器,EMPEROR(Embedded MultiProcessor supporting Esterel Reactive OpeRations)[11]提供在多處理器之間分配同步線程的方法。
可以看出,TPP處理器通過限制使用分支預(yù)測、亂序執(zhí)行和Cache等造成時序不確定的技術(shù),提高WCET分析的緊致性。但是,TPP主要以滿足WCET分析緊致性要求為目標(biāo),損失了計算性能。RTOS加速器通過硬件實現(xiàn)任務(wù)調(diào)度和關(guān)鍵服務(wù)原語,降低RTOS的運(yùn)行開銷和時間抖動,提升了可預(yù)測性,利于系統(tǒng)驗證(硬件執(zhí)行時序是完全確定的),但受硬件實現(xiàn)復(fù)雜度和資源限制,靈活性不佳,通信接口效率低、時延高。反應(yīng)式處理器僅支持特定的同步編程語言和范式,通用性不佳,且計算性能有限。
現(xiàn)代編程語言反映了計算機(jī)體系結(jié)構(gòu)的特征。面向通用計算的編程語言描述了操作的執(zhí)行順序,操作的時間屬性與程序的邏輯正確性無關(guān)。實時系統(tǒng)編程可以基于同步范式(使用同步編程語言,如Esterel)或異步范式(使用異步編程語言,如Ada)。
同步模型基于邏輯時間模型和同步假設(shè),即動作是原子的且瞬間完成,并發(fā)動作間無交互,動作與邏輯Tick同一時刻發(fā)生,無抖動。該抽象為確定性模型,利于系統(tǒng)行為分析驗證。同步語言中,邏輯Tick是語言語義的組成成分,用于事件定序,與實際物理時間無關(guān)。Esterel等同步語言基于虛擬時間抽象,與平臺的物理時間無關(guān),其邏輯行為總是可預(yù)測的。實現(xiàn)時采用時鐘驅(qū)動的靜態(tài)調(diào)度技術(shù),利于響應(yīng)時間分析和因果關(guān)系保證,但表達(dá)復(fù)雜交互行為的能力不足。
異步語言基于物理時間的實時鐘模型,一般提供時鐘訪問、進(jìn)程延遲、同步與通信超時等實時控制設(shè)施(包括原語與結(jié)構(gòu))。Ada編程語言基于物理時間概念提供了量化描述時序約束的語言結(jié)構(gòu),需要借助定時器中斷或操作系統(tǒng)所提供的時間服務(wù)控制程序的時序行為。Ada采用中斷驅(qū)動的優(yōu)先級調(diào)度技術(shù),利用定時器控制任務(wù)執(zhí)行時間,且中斷是一種異步并發(fā)機(jī)制,必然導(dǎo)致應(yīng)用程序的時間行為不確定和不可重復(fù)。因此,采用Ada等高級語言進(jìn)行實時軟件編程是低效的,一方面其時序約束定義的粒度過粗(以任務(wù)為最小實體),另一方面,這些語言的編程模型所表達(dá)的時序約束僅為程序中位置相鄰的前后2個任務(wù)之間的時序關(guān)系,無法表達(dá)任意操作(可能并行)的時間約束。由于沒有支持通過合適的方法定義時間需求和進(jìn)行高精度時序分析的實時語言,實踐中HRT系統(tǒng)仍然只能采用低級編程語言,并手工對時間需求進(jìn)行調(diào)優(yōu)。
Chung等[12]針對靜態(tài)調(diào)度方法,對C語言進(jìn)行擴(kuò)展,基于所謂時間有向圖(Directed Timed Graph)模型,給出表達(dá)時序約束和優(yōu)先約束的語言結(jié)構(gòu),包括時序塊(Timing Block)和Temporal表達(dá)式,描述操作的開始時間、完成時間和周期。
ZET(Zero Execution Time)模型是同步反應(yīng)式編程的基礎(chǔ)抽象,BET(Bounded Execution Time)模型是實時調(diào)度理論的基礎(chǔ)抽象。實時程序的相關(guān)行為由輸入輸出時刻決定,而非程序代碼的執(zhí)行時刻。因此,Henzinger等[1]結(jié)合ZET和BET模型,在2000年提出了實時編程范式LET模型。采用LET模型時,任務(wù)總是在其激活區(qū)間的開始處讀數(shù)據(jù),結(jié)束處寫數(shù)據(jù),使其可觀察的時態(tài)行為獨立于任務(wù)的物理執(zhí)行。LET確定了讀程序輸入到寫程序輸出之間所需的時間,而不考慮執(zhí)行程序所需的時間,具有平臺可移植性。雖然實際應(yīng)用時LET模型的資源(緩存、時間)利用率較低,但LET為控制工程師和軟件工程師提供了清晰的時序模型接口。2017年以來,隨著多核平臺下可預(yù)測性(Predictability)成為關(guān)鍵問題,工業(yè)界認(rèn)為LET對于解決多核MCS應(yīng)用和分布式實時系統(tǒng)的通信確定性問題極具吸引力,甚至可能與Autosar相結(jié)合而成為新的工業(yè)標(biāo)準(zhǔn)。
計算機(jī)科學(xué)領(lǐng)域的時間概念相當(dāng)原始。圖靈機(jī)和馮·諾依曼機(jī)模型基于順序控制抽象,指令一條接一條執(zhí)行,時間先后關(guān)系(Temporal Succession)是當(dāng)前機(jī)器語言級唯一可用的時序關(guān)系。雖然定義馮·諾依曼機(jī)的程序邏輯行為無需顯式地引用時間概念,但無法滿足實時系統(tǒng)所需要的實時間約束。
在時態(tài)邏輯、進(jìn)程代數(shù)、自動機(jī)和斷言等形式化建模方法中,時間概念在模型語義中是隱式的,所考慮的唯一時間屬性是順序,不考慮絕對時間(時間點)或相對時間(持續(xù)時間),因此只能表達(dá)和驗證離散事件系統(tǒng)行為的時態(tài)順序正確性,欠缺足夠的實時表達(dá)能力。它們的基本假設(shè)是程序代碼的執(zhí)行速度足夠快,程序的時間屬性與其功能正確性無關(guān)。為了適應(yīng)實時系統(tǒng)規(guī)約的需要,人們試圖擴(kuò)展傳統(tǒng)的形式化方法,以允許定量地表達(dá)定時特性,如時間自動機(jī)和實時時態(tài)邏輯(Real-Time Temporal Logic)等。這些方法可應(yīng)用于簡單系統(tǒng)的可調(diào)度性分析或時間行為驗證,但難以應(yīng)用于具有嚴(yán)格時序行為約束的復(fù)雜實時系統(tǒng)。
現(xiàn)代計算機(jī)系統(tǒng)依賴基于定時器的時鐘中斷機(jī)制提供定時服務(wù)。定時器作為處理器外設(shè),通過輪詢或中斷方式訪問。時鐘中斷是一種異步并發(fā)機(jī)制,精度低,開銷大,且存在副作用——中斷當(dāng)前任務(wù)將導(dǎo)致其執(zhí)行時間延長,可能產(chǎn)生危害性后果。基于優(yōu)先級的任務(wù)調(diào)度策略以中斷機(jī)制為基礎(chǔ),行為難以預(yù)測,且驗證困難,平臺依賴性高。
可以看出,由于當(dāng)前處理器體系結(jié)構(gòu)不顯式地提供時間語義支持,系統(tǒng)模型和基礎(chǔ)設(shè)施缺乏時間語義,或僅基于邏輯時間,或僅基于物理時間。雖有研究者提出了一些引入時間概念的高級語言,但底層沒有時間語義而僅僅從高層引入是有問題的,導(dǎo)致系統(tǒng)設(shè)計、分析、驗證與實現(xiàn)的時間語義不一致?,F(xiàn)有時間可預(yù)測性保證依賴基于WCET的可調(diào)度分析,但由于系統(tǒng)行為內(nèi)在的異步并發(fā)性,執(zhí)行時間有界并不能保證操作的執(zhí)行順序,因此不能保證時序行為可預(yù)測。
傳統(tǒng)的保守方法只適合簡單實時系統(tǒng)設(shè)計,MCS系統(tǒng)需要緊致時間設(shè)計方法。2005年以來,Bensalem等[13]多認(rèn)識到當(dāng)前研究的局限性,在不同場合提出實時計算需要重新思考甚至發(fā)展計算機(jī)科學(xué)的理論基礎(chǔ)。但迄今為止,由于實時應(yīng)用涉及控制工程、電子工程、計算機(jī)工程和軟件工程等多學(xué)科交叉,各領(lǐng)域之間存在理論方法甚至文化差異,這一問題遠(yuǎn)未解決。
本文認(rèn)為,任務(wù)、動作和操作的時間語義應(yīng)包含時間行為和時間屬性。前者與硬件實現(xiàn)無關(guān),不應(yīng)依賴于底層實現(xiàn);后者與硬件實現(xiàn)相關(guān),即具有平臺依賴性。前者為語義確定性問題,后者為可預(yù)測性問題。LET模型通過解耦計算與通信,保證了時態(tài)確定性,具有時域控制與值域控制相分離、時序行為可預(yù)測可組合且平臺無關(guān)等特點。另一方面,時間觸發(fā)TT(Time-Triggered)執(zhí)行機(jī)制具有時序可預(yù)測性和時間隔離(分區(qū))的特性。但是,兩者都需要具有確定時間行為的處理器架構(gòu)和時間語義指令集支持,并以此為基礎(chǔ)形成緊致時間設(shè)計方法。
定義1實時機(jī)RTM模型對馮·諾依曼機(jī)進(jìn)行以下擴(kuò)充:
(1)計算機(jī)系統(tǒng)由運(yùn)算器、控制器、存儲器、時鐘設(shè)備和I/O設(shè)備等功能部件構(gòu)成;
(2)指令時鐘部件用于操作定時,與CPU的指令數(shù)據(jù)通路和控制器緊耦合,在保持馮·諾依曼機(jī)指令的邏輯功能不變的同時,增加特定操作的執(zhí)行時刻和限定操作序列(動作)的執(zhí)行時間等時間語義;
(3)RTM的指令字由操作碼、地址碼和定時碼構(gòu)成,操作碼定義操作的功能,地址碼指定操作數(shù)和下一條指令的地址,定時碼指定操作的時間約束。
RTM如圖1所示,以支持緊致時間設(shè)計為目標(biāo),其核心思想不是僅僅在CPU中增加了時鐘部件,而在于明確了時間行為控制的概念,并通過提供時間語義指令集,使上層應(yīng)用的時間行為與指令周期同步,實現(xiàn)了時域控制的原子性,減小了定時抖動。RTM以“關(guān)注分離(Separation of Concerns)”和“構(gòu)建正確(Correct-by-Construction)”為設(shè)計原則,區(qū)分邏輯控制與時域控制,為實現(xiàn)從時序可預(yù)測設(shè)計到時序確定性設(shè)計轉(zhuǎn)變奠定了理論基礎(chǔ),利于實時程序代碼自動生成和降低系統(tǒng)驗證的復(fù)雜度。
Figure 1 RTM architecture圖1 RTM結(jié)構(gòu)
以RTM為基礎(chǔ),時間語義指令集可提供at、delay-until和timestamp等控制時間行為的指令,支持邏輯執(zhí)行時間(LET)模型和時間觸發(fā)等應(yīng)用模式。
本節(jié)對RISC-V[14]指令集進(jìn)行時間語義擴(kuò)展,定義時間觸發(fā)指令集TTI,并給出一個直升機(jī)飛控應(yīng)用實例。
TTI時間語義指令集擴(kuò)展主要包含時間模型、時間寄存器和時間語義指令3個部分。其中,時間模型規(guī)范該指令集擴(kuò)展時間相關(guān)的概念和應(yīng)用方法;時間寄存器是在通用寄存器之外添加的新寄存器,用于存放時間值,該時間值符合時間模型規(guī)范;時間語義指令包括時鐘管理指令、時間寄存器管理指令和時間語義操作指令。
本文采用基于時間點(時刻)的絕對時間模型,即處理器時鐘的時間從設(shè)定時刻開始,一直以一定的速率增長。描述操作的時間時,采用某時刻的方式;描述一個時間段時,采用從某時刻開始到某時刻結(jié)束的方式。時間寄存器存放絕對時間模型的一個時間點。
時間語義指令功能如表1所示,包括:
(1)時間管理指令:setti/getti指令用于設(shè)置/獲取系統(tǒng)當(dāng)前時間;settg指令用于設(shè)置系統(tǒng)當(dāng)前時間粒度,即時間向前自增的單位。
(2)時間寄存器管理指令:tmove指令用于通用寄存器和時間寄存器之間的數(shù)據(jù)傳輸。
(3)實時操作指令:ttiat/ttoat指令用于在指定時刻I/O端口輸入輸出。
Table 1 Function of extend instructions
表1中,rs1、rs2和rd為通用寄存器,trs為時間寄存器地址,tg為系統(tǒng)當(dāng)前時間粒度寄存器,ti為當(dāng)前時間寄存器。
RISC-V是一個典型的三操作數(shù)、加載-存儲形式的RISC指令集架構(gòu),由基礎(chǔ)指令集和擴(kuò)展指令集組成?;A(chǔ)指令由基本整數(shù)指令構(gòu)成,擴(kuò)展指令分為標(biāo)準(zhǔn)擴(kuò)展和非標(biāo)準(zhǔn)擴(kuò)展2大類。現(xiàn)階段已經(jīng)完成的標(biāo)準(zhǔn)擴(kuò)展為一個包含標(biāo)準(zhǔn)乘法和除法(M)、原子(A)、單精度(F)和雙精度(D)運(yùn)算的通用標(biāo)量指令集。非標(biāo)準(zhǔn)擴(kuò)展作為一個高度特殊化的擴(kuò)展,由用戶根據(jù)功能需求自定義完成。TTI指令集基于RISC-V非標(biāo)準(zhǔn)擴(kuò)展進(jìn)行定義,如圖2所示。
Figure 2 Format extension for TTI instructions圖2 TTI擴(kuò)展指令指令字格式
直升機(jī)飛控系統(tǒng)的需求如圖3所示。若采用傳統(tǒng)的前后臺編程范式或輪詢范式實現(xiàn)飛控軟件,其架構(gòu)和時序分別如圖4a和圖4b所示??梢钥闯觯?dāng)某時刻需要執(zhí)行多個動作時,采用這種編程模式必然存在定時抖動,如圖4b中時刻0,2和6。
Figure 3 Requirements of a helicopter flight control system
Figure 4 Software architecture and timing
LET編程模型將任務(wù)的邏輯行為“輸入-計算-輸出”過程相分離,如圖5所示,定義了嚴(yán)格的輸入輸出時刻,要求在指定時刻輸入,在輸出時刻之前計算出結(jié)果,并能夠?qū)⑤敵鼋Y(jié)果保持到指定時刻輸出,具有時間行為可預(yù)測、可組合和平臺無關(guān)性等重要特征,利于設(shè)計時進(jìn)行系統(tǒng)行為驗證。
Figure 5 LET programming model圖5 LET編程模型
基于LET編程模型的飛控系統(tǒng)的實現(xiàn)代碼如下所示:
1Init(); // init the system
2time_t1 =time_t2 =time_t3 =time_t4 = 0;/*suppose all tasks start at 0*/
3flag_t1 =TTI(all_sensor_data,time_t1);
4flag_t2 =TTI(keyboard_data,time_t2);
5flag_t3 =TTI(sensor_data,mode_data,time_t3);
6flag_t4 =TTI(loop_data1,loop_data2,loop_data3,time_t4);
7SetIntertup();/*set a interrupt, and only enable it to interrupt*/
8 /*t1~t4, every 1/180 second, when occur, store*/
9 /*context for current task and go to INT_LABEL*/
10while(TRUE) {
11 INT_LABEL:
12if(flag_t1) {
13load_context();
14t1();
15store_context();
16time_t1 += 1;
17TTO(sensor_data,time_t1);
18flag_t1 =TTI(all_sensor_data,time_t1);
19 }
20if(flag_t2) {
21load_context();
22t2();
23store_context();
24time_t2 += 6;
25TTO(mode_data,time_t2);
26flag_t2 =TTI(keyboard_data,time_t2);
27 }
28if(flag_t3) {
29load_context();
30t31();
31t32();
32t33();
33store_context();
34time_t3 += 2;
35TTO(loop_data1,loop_data2,loop_data3,time_t3);
36flag_t3 =TTI(sensor_data,mode_data,time_t3);
37 }
38if(flag_t4) {
39load_context();
40t4();
41store_context();
42time_t4 += 6;
43TTO(control_data,time_t4);
44flag_t4 =TTI(loop_data1,loop_data2,loop_data3,time_t4);
45 }
46 }
基于LET編程模型的飛控系統(tǒng)各任務(wù)的時序行為如圖6所示。其中,t1為傳感器任務(wù),t2為模式任務(wù),t31,t32,t33為內(nèi)循環(huán)任務(wù),t4為控制器任務(wù)。
Figure 6 Timing for the LET program of the helicopter flight control program圖6 直升機(jī)飛控LET程序的時序
每個任務(wù)的LET實現(xiàn)包含3個部分:基于TTI()的定時輸入、計算和基于TTO()的定時輸出。其中,TTI()和TTO()分別是對ttiat和ttoat指令的封裝。TTI()在指定時刻完成指定數(shù)據(jù)的輸入,TTO()在指定時刻完成指定數(shù)據(jù)的輸出。若指定的時刻未到,則等待,等待過程中TTI()的返回值始終為FALSE,指定時刻到來時,TTI()完成指定數(shù)據(jù)的輸入,此后返回值為TRUE。TTO()類似,但沒有返回值。每個任務(wù)通過TTI()顯式地請求在指定時刻執(zhí)行指定數(shù)據(jù)的輸入。系統(tǒng)實現(xiàn)代碼中第3~6行分別是t1,t2,t3和t4的首次定時輸入請求,對應(yīng)圖6中的“↑”標(biāo)記。計算部分的代碼是位于load_contex()和store_context()中間的代碼,第14,22,30~32,40行所示。計算執(zhí)行完畢,每個任務(wù)通過TTO()顯式地請求在指定時刻輸出指定數(shù)據(jù),同時通過TTI()發(fā)出下一輪的定時輸入請求。系統(tǒng)實現(xiàn)代碼中第17,25,35,43行分別是這4個任務(wù)的定時輸出請求,第18,26,36,44行分別是它們的下一輪定時輸入請求,并且這4個任務(wù)都將本次輸出和下一輪的輸入放在同一時刻,對應(yīng)圖6中的“?”標(biāo)記。可以看出,任務(wù)的LET實現(xiàn)中,輸入輸出時間完全由TTI()和TTO()指定的時刻決定,而不受任務(wù)計算部分程序執(zhí)行時間抖動的影響。
飛控系統(tǒng)中設(shè)置一個周期性時鐘中斷,如系統(tǒng)實現(xiàn)代碼中第7行將中斷頻率設(shè)置為每秒180次。該中斷只用于中斷代碼中while循環(huán)中的4個任務(wù)。每次中斷處理,系統(tǒng)跳到INT_LABEL處開始處理。系統(tǒng)按照代碼順序依次查看是否需要執(zhí)行這4個任務(wù)的計算部分,如第12,20,28,38行的if語句。當(dāng)某任務(wù)設(shè)置的TTI()返回值為TRUE就執(zhí)行,如圖6中t1每次都執(zhí)行。當(dāng)某任務(wù)設(shè)置的TTI()返回值為FALSE,就跳過該任務(wù)不執(zhí)行,如圖6中點C處就跳過t2執(zhí)行t3。若沒有任務(wù)需要執(zhí)行,系統(tǒng)idle,如圖6中陰影右下角的idle部分,此時可以執(zhí)行其他軟實時或非實時任務(wù)。中斷發(fā)生時,若有當(dāng)前任務(wù)正在執(zhí)行,則該任務(wù)被中斷,保存該任務(wù)上下文,然后開始新一輪中斷處理,如圖6中點A處,中斷在t2執(zhí)行過程中發(fā)生,此時保存t2上下文,轉(zhuǎn)到INT_LABEL處從t1重新開始依次執(zhí)行。被中斷的任務(wù)在后續(xù)執(zhí)行中輪到該任務(wù)執(zhí)行時將繼續(xù)執(zhí)行,如圖6中點B處,t1執(zhí)行完后順次執(zhí)行t2時,加載t2之前被中斷的上下文繼續(xù)執(zhí)行。
由于輸入輸出定時由ttiat/ttoat指令控制,與任務(wù)計算邏輯的執(zhí)行時間無關(guān),保證了控制系統(tǒng)的魯棒性。
針對未來復(fù)雜的混合關(guān)鍵系統(tǒng)需要研究新的緊致時間控制設(shè)計方法,采用構(gòu)件化軟件體系結(jié)構(gòu),基于時間觸發(fā)執(zhí)行機(jī)制和LET編程模型構(gòu)建時間關(guān)鍵系統(tǒng)是實現(xiàn)可預(yù)測性、時序隔離、可組合和可擴(kuò)展的有效方案,但性能低效和分析驗證復(fù)雜是這一方案的瓶頸,需要實時計算機(jī)體系結(jié)構(gòu)創(chuàng)新。
本文以馮·諾伊曼模型為基礎(chǔ),定義新的支持時間語義的實時計算機(jī)體系結(jié)構(gòu)模型,并以此為基礎(chǔ)實現(xiàn)緊致時間方法。文中提出了支持實時計算的RTM計算機(jī)模型和TTI指令集。RTM突破了馮·諾伊曼機(jī)模型在實時計算應(yīng)用中的理論局限,分離時域控制和值域控制的時序約束,明確了時間行為控制的基本抽象。
目前本文正在對RISC-V指令集進(jìn)行TTI擴(kuò)展,實現(xiàn)一個實時處理器原型RPU(Realtime Processing Unit),以驗證RTM的時序行為控制能力。RPU將采用硬件多線程技術(shù),以滿足安全關(guān)鍵應(yīng)用的高性能和時空隔離需求。支持時間行為約束表達(dá)的實時控制設(shè)施(原語與結(jié)構(gòu))、編程語言、中間語言以及時間安全性分析與驗證理論和技術(shù)都是重要的課題。