詹盼盼 齊征 張翠濤 何熊文 郭堅
(北京空間飛行器總體設計部,北京 100094)
實時操作系統(Real Time Operating System, RTOS)是在確定的時間內對外部事件響應并執行相應功能的一類操作系統[1],星載操作系統是一種實時操作系統。國外已經開展多年RTOS研究與應用,出現了一些商用RTOS產品,如VxWorks,RTEMS和QNX等[2]。除針對單核處理器的RTOS外,國外操作系統廠商針對航空航天特殊的運行環境,又對操作系統的功能進行了升級,形成了多核分區操作系統。美國風河公司的VxWorks653[3]軟件支持分時分區管理,提供強大的兩級時空域調度器。2009年, NASA采用VxWorks653作為戰神1號(Ares-1)和戰神5號(Ares-5)新一代運載火箭飛行控制計算機的RTOS[4]。Integrity-178B[5]軟件是由美國Green Hills公司開發的高可靠、強實時嵌入式RTOS,提供兩級優化調度器,支持時間分區、空間分區以及分區內、跨分區通信,被廣泛應用在航空領域,如F-16、F-22、F-35戰斗機,也用于民航客機,如空客A380、波音787等。
國內航天領域大量使用的星載實時操作系統有北京空間飛行器總體設計部自主研制的高可靠實時操作系統(EVTOS)和航天操作系統(ASOS),廣泛應用于遙感、導航、載人飛船、深空探測和通信領域的中心計算機中,相比于國外商用操作系統軟件,具有更優的性能和可靠性指標[2]。北京控制工程研究所研制的空間操作系統(SpaceOS)[6]廣泛應用于星載控制計算機中。上述系統均運行于單核處理器中,國內尚未有公開資料表明多核分區操作系統在軌應用。
隨著航天軟件系統的任務規模和復雜程度不斷上升,現有星載操作系統實現的對單核處理器進行資源管理及調度的方式,已不能滿足現有實時運算和星內總線管理任務,更無法與星載自主信息處理、星間組網、目標識別任務對處理器性能的要求相匹配。當前星載操作系統在應用時主要面臨以下問題。
(1)處理器占用率即將飽和,運算性能需要提升。以遙感衛星為例,積分時間運算和成像條帶規劃任務已占據處理器較大資源;載人空間站信息系統須對6套總線進行管理,總線數量、每套總線的通信數據量相比現有衛星分別增加了5倍和2倍;衛星星座須對衛星組網和動態路由功能進行處理,保證星間實時通信。上述任務運行使得處理器資源余量不足20%,難以承擔更多任務。
(2)大規模軟件的可靠性安全性問題更加突出。星載應用軟件規模較大,軟件中的漏洞(BUG)難以完全避免,更需要一種安全保護機制,防止應用軟件中的一個漏洞誤導致整個系統崩潰。
(3)上層應用軟件難以復用,不能適應多種應用需求。傳統星載軟件設計方法,軟件邏輯處理與用戶需求緊密耦合,不同的任務需要單獨開發一套軟件處理模塊,難以復用,造成了很多重復性開發。
(4)在軌靈活擴展需求更加迫切。當前采用全部軟件重新編譯后,進行部分或全部軟件在軌維護的方式,使得應用軟件更改困難,功能擴展難。因此需要一種靈活更新和擴展的方式,衛星功能升級更加方便。
針對上述問題,本文研究了一種星載多核分區操作系統,解決現有星載操作系統對多核處理器、軟件安全隔離保護、難以復用和在軌靈活擴展支撐缺失或不足問題,以適應未來航天新型任務和多核處理器的需求。
星載計算機正在向多核處理器方向發展,而星載操作系統目前仍然面向單核處理器,已滯后于需求和計算機發展,航天軟件任務無法充分利用多核處理帶來的性能提升。因此,在總結并分析當前星載操作系統在應用時面臨的主要問題基礎上,需要對現有星載操作系統進行升級,滿足以下需求。
(1)多核處理器實時調度與管理。為解決航天型號任務計算量和總線數據量較大、實時性要求高的問題,需要對高性能多核處理器進行統一管理,保證軟件系統的快速處理、實時性和穩定性,提高航天軟件多任務的綜合管理效率。
(2)錯誤隔離保護與安全可靠運行要求。在沒有妥善隔離手段的支持下,不同軟件集中在一起實現,單一的軟件故障,擴散到整體軟件將幾乎不可避免。因此需要在空間上對應用軟件實施隔離和保護的分區管理機制,提高星載操作系統的可靠性。
(3)實現應用軟件高效開發與復用。傳統的軟件開發模式,多是根據任務的不同需求,進行定制開發,工作內容在很大程度上存在重復性,對人力和時間都存在不必要的消耗,進而導致軟件開發的效率低下。為適應航天任務爆發式增長的需要,提高軟件通用性和適應性,進而提高軟件開發效率和可靠性,需采用一種高效的、通用的軟件開發模式,通過設計通用軟件構件集合,進行構件化組裝,適應不同的任務需求。
(4)支持軟件動態擴展與衛星功能升級。現有衛星功能仍是“一星一用”模式,業務相對單一。衛星在軌運行后難以擴展和改用,導致功能固定,靈活性差[7]。未來通過軟件來定義衛星系統功能,由一個模塊化、通用化、可重構的硬件平臺和各種可加載的應用軟件組成,要求軟件具備軟件動態擴展、多應用程序(本文也稱星載應用)運行能力,從而實現衛星的“一星多用、多星共用”,而且還可以通過軟件更新和升級來提升衛星的戰術性能,使其不斷緊跟技術進步,滿足不斷變化的應用需求。
星載多核處理器采用S698PM處理器,該處理器是一款抗輻照型高性能、高可靠、高集成度、低功耗的多核并行處理器SoC芯片。S698PM采用LEON4內核,遵循SPARC V8標準。S698PM芯片內部集成4個相同的高性能處理器核心,每個處理器核心均由32位RISC整型處理單元(IU)、雙精度浮點處理單元(FPU)、高速一級緩存(L1 Cache)和存儲器管理單元(MMU)等組成。該星載多核計算機系統采用S698PM芯片作為主處理器,外圍配以靜態隨機存取存儲器(SRAM)、第二代雙倍速率同步動態隨機存儲器(DDR2)實現程序運行所需的存儲空間。設計了以太網口、串口(UART)、1553B總線實現與其他設備的通信功能。并采用現場可編程門陣列(FPGA)實現(TM)、遙控(TC)等各種外設與接口功能。星載多核計算機系統設計如圖1所示。

注:JTAG為聯合測試工作組,是一種調試接口,GPIO為通用輸入輸出口,PROM為可編程只讀存儲器,EDAC為錯誤檢錯與糾錯。
圖1 星載多核計算機系統設計
Fig.1 Design of onboard multi-core computer system
支持多核處理器的星載操作系統體系結構如圖2所示。該體系結構通過多核處理器調度管理來實現星載軟件對多核的支持,通過采用分層結構來實現對業務分層的支持,并通過采用分區機制實現不同應用之間的時空隔離,防止應用間的有害干擾。星載多核分區操作系統從體系結構上劃分為3層,應用與分區層、中間件與服務層和操作系統核心層。
(1)核心層,提供操作系統核心服務,負責底層多核處理器調度與管理,既可以實現對多核的支持,也可以實現對分區隔離的支持。主要功能包括任務管理、分區管理與通信、多核調度、配置管理、板級支持包(BSP)、中斷管理與異常管理等,配置組件包括文件系統、網絡協議棧和接口管理功能。該層通過板級支持包BSP和統一驅動管理屏蔽底層硬件的差異,并通過接口管理向上層提供統一服務和功能。
(2)中間件與服務層,通過設計可組裝的軟件構件,為上層星載應用提供基礎功能,包含空間數據系統咨詢委員會(CCSDS)[8]制定的星載接口業務(SOIS)[9]、空間子網構件、星載子網構件、歐洲航天標準化組織(ECSS)定義的遙控和遙測包應用標準(PUS)[10]業務等多種業務及協議形成的軟件構件。
(3)應用與分區層,包括星載軟件系統中的主要功能應用。在操作系統核心層以及中間件與服務層的支撐下,該層的大部分功能都可由底層的通用業務構件組合實現,形成可獨立加載和運行的應用軟件APP。每個軟件擁有獨立的分區,分區間實現隔離和保護。除實現已確定的衛星任務外,還具備APP軟件動態加載的能力,支持星載應用軟件上注與衛星功能擴展。

注:TCP為傳輸控制協議,IP為網際互聯協議,DTN為時延容忍網絡,CPU為中央處理器。
圖2 星載多核分區操作系統體系結構
Fig.2 Software architecture of onboard multi-core partition operating system
采用多核并行處理技術可以以較低的功耗獲得更好的性能,但是也引入了系統資源、行為和狀態的不確定性[11]。在多核系統中,多個并發任務競爭共享資源,操作系統中全局數據的訪問狀態,以及讀操作執行時間不確定性與返回結果不確定性等問題都造成了系統的不確定性[12]。另外,多個任務在等待操作系統調度與執行過程中,由于動態資源分配,導致任務載入、資源分配時處理器處理時間不均等,從而影響執行序列,導致星載計算機系統任務的不確定性發生。
本文在設計時,將動態調度與靜態調度方法相結合,實現多個任務在多個核上分配與運行。多核動態調度方法是在預分配的時間窗口內,以時間片為周期,根據任務優先級將優先級最高的幾個任務分配到當前空閑的核上執行。這種方式效率較高,保證了任務的實時性。靜態調度方法根據用戶的配置預先進行靜態配置,從而獲得確定的總體任務執行序列,操作系統在調度時將這些相關性任務分配到相同的核上并按順序執行,以減少資源搶占和沖突。
星載多核分區操作系統實現了處理器綁定方法,以解決不同分區中的任務在執行過程中對處理器核心資源的競爭,緩解系統的處理器資源和狀態的不確定性問題。該方法將相關的任務綁定到同一個處理器,而不相關任務的執行順序不會受影響,相關的任務在單處理器上的調度是可以確定的,因而整個系統中所有分區的任務執行可以是確定的。
多核任務動態調度方法最大程度地保證了任務的實時性和多個處理器核的執行效率,靜態調度方法和處理器綁定方法可以屏蔽由于動態多分區切換所導致的調度不確定性因素,兩者結合兼顧了星載多核處理器的執行效率和一些星載任務執行的確定性。
分區管理在操作系統以及星載計算機結構上采取整體措施,通過劃分一定的分區,使不同的軟件在不同的分區中運行,確保軟件功能的安全性。分區管理技術主要是對于關鍵資源即處理器和內存采用內存管理單元(Memory Management Unit,MMU)的架構,為每個應用任務劃分獨立空間,通過建立不同空間和公用空間的授權訪問機制,從而避免不同地址空間的程序對其他空間的無意或惡意訪問。基于MMU設計分區機制,隔離不同安全等級、實時性的用戶業務及系統擴展功能。
在星載多核分區操作系統中,用戶可以通過配置文件配置空間和時間分區的調度信息,實現空間和時間分區的調度動態配置。分區操作系統通過內存管理單元保證空間分區的空間隔離,通過時間周期輪轉調度方法完成時間分區調度,在分區內可實現優先級調度或者輪轉調度策略。
分區調度主要完成按固定的、基于周期的時間序列進行CPU資源的分配,每個分區按照主時間框架分配給它的分區窗口(一個或多個)被調度程序所激活。本星載操作系統進行分區調度的原則:調度單元是分區,分區沒有優先級,分區調度算法預先確定并按照固定周期重復執行。
通過分區管理設計,將不同軟件運行于不同的分區,分區之間進行空間隔離與保護,即使一個軟件模塊出現問題,也不會影響整個系統和導致其他軟件模塊失效,可有效解決星載大規模軟件的可靠性安全性問題。
目前,星載應用軟件難以擴展和更改,每個應用軟件獨占一臺星載計算機,不利于資源綜合。研究APP動態加載技術,使星載操作系統能夠像手機系統一樣,靈活加載各類APP程序,能夠實現星載應用重構,有利于實現衛星應用的定制化和功能擴展[13]。
如圖3所示,APP動態加載技術首先將應用程序編譯鏈接成動態加載可執行文件,文件中包含所有需要重定位數據的地址。在收到用戶程序加載應用程序請求時,首先檢查可執行文件的完整性、正確性,當通過檢查后,根據文件大小,在系統的存儲空間中分配空間,將文件加載到系統存儲空間。動態加載[13]時通過重定位的數據,找到該數據所在的位置,把該數據地址減去虛擬的內存地址再加上目標端申請到的空間的首地址,這樣就完成了重定位,然后把系統指針指向代碼的首地址,直接運行即可完成動態加載。

圖3 APP動態加載過程Fig.3 Dynamic loading process of APP
該項技術通過APP動態加載技術實現軟件功能動態擴展,進而實現衛星功能擴展,使衛星的靈活性和智能化程度大大提升,也為實現軟件定義衛星功能提供了基礎。
可配置軟件構件技術將過去需要由應用軟件實現的標準化、通用化功能,以中間件形式提供,作為星載操作系統的擴展,為衛星應用提供統一的星載軟件基礎服務與網絡擴展服務,如星載接口管理、星載時間管理、星間網絡服務、星內通信服務等,有利于實現星載應用快速開發,提高軟件研制效率。
典型的星載軟件構件模型由對外接口、實現體和規約3個要素組成,它滿足一定的航天器軟件需求,并通過接口提供服務。它應具備兩個基本屬性:組裝性,構件用戶能夠根據既定規則將構件進行組裝;功能性,必須具備具體的、明確的一個或多個功能,能夠被用戶調用,并在預定的運行環境下正確運行[14]。
星載軟件構件對外提供的接口,包括:
(1)初始化接口,供其它構件調用,完成構件的初始化;
(2)功能接口,可供其它構件調用,完成本構件的功能;
(3)構件配置接口,供系統配置者調用,完成構件的運行時配置。
基于星載多核分區軟件體系結構,將星載業務功能標準化,并采用軟件構件實現,形成統一的中間件與服務層,該層通過功能接口向上層軟件構件提供服務。中間件與服務層提供的統一星載基礎服務見表1。

表1 中間件與服務層提供的星載基礎服務
衛星軟件通過組裝標準化的構件以及任務特殊需求的構件,可實現層次化的基于軟件構件的快速集成開發與組裝過程,即從原子組件到復合組件到分區應用軟件再到整星軟件功能的組裝過程。
本文在某衛星中心計算機中實現了基于S698四核處理器的星載計算機,并在該計算機中運行多核分區操作系統,對該操作系統上述功能進行了測試,測試情況見表2。

表2 測試情況
為適應航天任務和星載計算機的發展需求,本文設計了星載多核分區操作系統,具有動靜態結合的多核處理器實時調度、故障隔離與保護的分時分區管理機制、APP動態加載與衛星功能靈活擴展、支持上層應用軟件快速組裝的特點,解決了星載多核分區操作系統缺失問題,可為空間廣泛應用多核處理器提供基礎的安全可靠的軟件運行平臺。