国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

支持內(nèi)存區(qū)域故障自適應(yīng)的星載最小模式軟件方案

2020-10-16 10:59孫伶俐張睿方峰李露銘喬梁
航天器工程 2020年5期
關(guān)鍵詞:寄存器全局構(gòu)件

孫伶俐 張睿 方峰 李露銘 喬梁

(1 中國空間技術(shù)研究院衛(wèi)星應(yīng)用總體部,北京 100094)(2 北京空間飛行器總體設(shè)計部,北京 100094)

星載計算機是衛(wèi)星上的嵌入式計算設(shè)備,隨著衛(wèi)星功能復(fù)雜程度的增加,衛(wèi)星上裝備了越來越多的計算機,如控制計算機[1]、星務(wù)計算機[2-3]和星載路由器。星載軟件是運行在星載計算機上的嵌入式軟件,其存儲和運行介質(zhì)包括ROM(如PROM、FLASH、EEPROM等)和RAM(也叫內(nèi)存,如SRAM等)。星載軟件是完成衛(wèi)星大部分功能的保障,其可靠安全的運行對衛(wèi)星在軌運行至關(guān)重要。然而,空間環(huán)境單粒子翻轉(zhuǎn)問題,造成軟件運行所依賴的內(nèi)存經(jīng)常發(fā)生單比特、雙比特錯誤。據(jù)2020年上半年統(tǒng)計數(shù)據(jù),北斗二號中地球軌道(MEO)衛(wèi)星某星載計算機平均發(fā)生5次單比特錯誤恢復(fù)事件。空間環(huán)境造成的異常,嚴重時會造成內(nèi)存的部分地址發(fā)生損壞[4-5],如2015年9月某遙感衛(wèi)星在軌發(fā)生計算單元切機動作,經(jīng)分析,最終問題定位于空間環(huán)境效應(yīng)造成內(nèi)存區(qū)域性損壞。內(nèi)存部分地址失效,導(dǎo)致星載軟件無法運行,經(jīng)多次“狗咬”復(fù)位后系統(tǒng)自動切換至備份計算機工作[6]。盡管是內(nèi)存的一小塊區(qū)域發(fā)生故障,但實際造成了星載計算機單份失效,嚴重時會影響衛(wèi)星在軌壽命,致使衛(wèi)星不能完成任務(wù)期內(nèi)的既定工作,最終造成無法挽回的損失。

目前,針對空間環(huán)境引發(fā)星載計算機內(nèi)存故障的容錯方案主要有以下3種,即產(chǎn)品級容錯、硬件級容錯和軟件級容錯。產(chǎn)品級容錯[7]沒有對內(nèi)存故障進行針對性設(shè)計,僅依賴星載計算機主備份硬件設(shè)計,主備份硬件通過“狗咬”的方式進行切換。硬件級容錯主要對內(nèi)存芯片進行冗余備份設(shè)計,如1片SRAM芯片空間為2 MByte,計算機共使用4 MByte,則在CPU板上布3片SRAM,其中1片作為備份使用,通過切換片選信號的方式,將健康的SRAM通過組合,使得內(nèi)存物理空間保持不變。軟件級容錯主要是在ROM中存儲多份程序,這些程序的功能可以相同,也可以不同[8],但最重要的是在編譯鏈接時使用內(nèi)存不同的地址空間,以期在某區(qū)域內(nèi)存損壞時ROM中存在不使用該區(qū)域內(nèi)存的程序版本??梢?,目前針對內(nèi)存故障的容錯設(shè)計最大的特點就是冗余備份,通過冗余備份產(chǎn)品、多個芯片、多份軟件來應(yīng)對內(nèi)存故障。無論采用何種冗余備份策略都需要增加資源消耗,如增加電路板數(shù)量、功能電路或芯片。

一般的星載計算機上都裝載有一個最小模式軟件,也叫在軌維護軟件或引導(dǎo)維護軟件[9],該軟件在使用最少的外設(shè)資源情況下可以對在軌運行的星載軟件進行修改、替換等維護工作。例如:星載計算機的某個物理接口在軌發(fā)生損壞,可通過最小模式軟件修改星載軟件功能,對故障進行隔離、替換等恢復(fù)設(shè)計,進而保證航天器在軌功能完整。然而,當內(nèi)存部分地址損壞時,極有可能造成最小模式軟件也無法正常運行,因此本文選擇最小模式軟件作為設(shè)計對象。之所以不是直接針對星務(wù)軟件或控制軟件等業(yè)務(wù)軟件,是因為本身業(yè)務(wù)軟件邏輯較為復(fù)雜,體量較大,內(nèi)存故障時被損壞的區(qū)域大小是隨機的,導(dǎo)致業(yè)務(wù)軟件有可能不容易找到連續(xù)的大片空間支持其運行,此時,所需內(nèi)存資源越少的軟件其生存概率越大。綜上,本文從軟件編譯鏈接和內(nèi)存地址的關(guān)系角度出發(fā),對星載最小模式軟件提出了一種支持地址重定向的軟件方案。該方案采用軟件構(gòu)件的思想,將最小模式軟件的全局屬性打包封裝,通過構(gòu)件實例化的過程將原來軟件編譯鏈接后使用的物理地址轉(zhuǎn)變?yōu)檫壿嫷刂?,從而實現(xiàn)動態(tài)地址映射,使得軟件可以動態(tài)適應(yīng)發(fā)生故障的內(nèi)存區(qū)域,在啟動運行后不受任何影響。

1 星載最小模式軟件方案設(shè)計

1.1 方案概述

目前,應(yīng)對內(nèi)存區(qū)域故障的方案,其中產(chǎn)品級容錯方案成本最高,代價最大,軟件級代價最小,但只能降低故障影響系統(tǒng)的概率,不能百分之百隔離故障。這是因為衛(wèi)星在軌運行時,內(nèi)存發(fā)生故障的區(qū)域是隨機的,不可預(yù)期的,若軟件不能自主地跳過故障區(qū)域,就無法有效地排除此類故障。本文方案是一種軟件級容錯方案,其和傳統(tǒng)方案相比,最大的特點在于軟件可以運行在內(nèi)存區(qū)域的任何物理地址上,因此可以適應(yīng)隨機的內(nèi)存區(qū)域故障,僅要求內(nèi)存故障發(fā)生后,內(nèi)存物理空間仍然存在大小符合軟件使用要求的健康連續(xù)空間。其核心思想是:在不改變編譯鏈接環(huán)境的條件下,利用面向?qū)ο蠓庋b、實例化的思想,將軟件編碼過程中定義的全局屬性(全局變量)進行封裝,變?yōu)闃?gòu)件的屬性;然后,通過實例化的思想將構(gòu)件實例化,其實例化的起始地址為通過內(nèi)存健康檢查找到的連續(xù)健康內(nèi)存空間的首地址,這樣就實現(xiàn)了軟件動態(tài)內(nèi)存地址映射的過程,使得軟件和內(nèi)存物理地址完全脫離。

1.2 方案設(shè)計

1.2.1 程序地址空間分配

一般地,星載軟件的地址空間劃分為代碼段、數(shù)據(jù)段、以符號開始的塊(BSS)段、堆空間、棧空間5段結(jié)構(gòu)[10],如圖1所示。其中:代碼段可以置于ROM空間和RAM空間中,除代碼段外,其他一般都指定到RAM空間中。代碼段、數(shù)據(jù)段和BSS段在鏈接時確定起始地址,堆空間和??臻g都是根據(jù)剩余的空閑內(nèi)存空間指定和分配的。本文方案中,為了規(guī)避內(nèi)存損壞的風(fēng)險,將代碼段的地址空間分配在ROM空間中,一般星載計算機都會配置PROM存儲最小模式軟件,PROM抗輻射指標較RAM高很多,因此將代碼段地址空間置于PROM中。

對于數(shù)據(jù)段和BSS段,一般位于RAM空間中,程序中對位于這兩個段的變量采用物理地址進行訪問,本文方案中,將數(shù)據(jù)段分為常量和變量兩部分。常量部分置于ROM中,因為其值不會被程序修改;變量部分和BSS段全部被封裝成程序構(gòu)件的屬性。堆空間和棧空間的起始地址本身就是動態(tài)分配的,因此仍然位于RAM中。本文方案的地址空間布局如圖2所示。

圖1 星載軟件地址空間劃分Fig.1 On-board software address space division

圖2 地址空間分配Fig.2 Address space distribution

1.2.2 啟動時健康內(nèi)存檢查

由于程序啟動時在內(nèi)存健康檢查之前不能確定是否使用內(nèi)存,此時不能使用C語言編寫內(nèi)存健康檢查程序(因為函數(shù)調(diào)用需要使用堆棧),因此內(nèi)存健康檢查程序只能使用匯編語言編寫,上電整個程序啟動運行,完成CPU初始化后運行內(nèi)存健康檢查。檢測過程比較簡單,從內(nèi)存起始地址開始檢測,尋找一段連續(xù)的足夠程序使用的地址空間。如程序需要使用128 Kbyte空間,則從起始地址開始的128 Kbyte空間分別寫入0x55555555和0xAAAAAAAA特征碼并讀取進行判斷,當該空間檢測正確后,將該空間的內(nèi)存刷為0,并將本次檢測正確空間的起始地址保存在全局寄存器中。如果該空間某個地址出現(xiàn)錯誤,則跳過該錯誤地址,從下一個1 Kbyte對齊的地址開始,繼續(xù)檢測128 Kbyte的空間。如此循環(huán),直到找到一段連續(xù)的正確的128 Kbyte空間,當檢測起始地址加檢測長度超出了RAM的最大地址時,表示無法提供足夠的健康內(nèi)存供最小模式程序使用,此時程序需要進入死循環(huán)等待狗咬切機。檢測流程如圖3所示。

經(jīng)過健康檢查獲得的內(nèi)存首地址非常重要,是本文方案的關(guān)鍵。該地址需要存儲在CPU的某個空閑寄存器中(可以是內(nèi)部寄存器,也可以是接口類寄存器),一旦選取了存儲該地址的寄存器,該寄存器就成為了保存這個地址的專用寄存器,需要確保在最小模式軟件中不會用到這個寄存器。本文后續(xù)示例選用SPARC系列處理器BM3803的%g7寄存器,文獻[10]中寄存器%g5~%g7是保留使用,因此可以確保編譯器在程序編譯時不會使用該寄存器。本文給出的所有存儲空間地址、寄存器定義等示例均以BM3803處理器為例。健康檢查后的內(nèi)存塊首地址存入選定的寄存器,尾地址寫入堆棧指針。

圖3 內(nèi)存檢測流程Fig.3 Memory detection flow

1.2.3 程序全局屬性構(gòu)件化及實例化

本文采用面向?qū)ο蟮乃枷耄瑢⒃瓉沓绦蛑械娜肿兞窟M行封裝,并設(shè)計發(fā)布構(gòu)件的訪問接口和構(gòu)件初始化接口,具體過程如下。

(1)封裝全局屬性。將原來軟件代碼中所有的全局屬性(會發(fā)生變化的變量,包括有初值(位于原數(shù)據(jù)段)和無初值(位于原BSS段)的變量),如全局變量、全局數(shù)組、全局指針、全局結(jié)構(gòu)體實例等均封裝成一個構(gòu)件的屬性。例如:定義為struct AppComponent,其中包含n個屬性,如32 bit整型變量a、單精度浮點變量b、雙精度浮點變量c、無符號整型指針變量d和無符號整型數(shù)組e(100個元素)等。

(2)發(fā)布構(gòu)件訪問接口。通過該接口獲得內(nèi)存健康檢查得到的可用內(nèi)存首地址。通過該接口將定義的構(gòu)件實例化,也就是完成地址重定向,使用時只需要定義一個程序構(gòu)件AppComponent類型的指針ptrAppComponent,并將其指向一段連續(xù)的內(nèi)存空間(空間大小需要大于程序構(gòu)件AppComponent的大小)。這里指向的內(nèi)存空間是星載最小模式軟件啟動后通過健康檢查的內(nèi)存塊,就像編寫C語言時定義了一個指針,為指針分配空間時使用new操作,new操作返回的空間首地址就是通過健康檢查的內(nèi)存塊的首地址。通過程序構(gòu)件指針,就可以訪問構(gòu)件中封裝的所有全局屬性。

(3)設(shè)計程序構(gòu)件初始化接口。(1)中a,b,c,d是有初值要求的,需要在初始化接口中對其進行初始賦值操作。該接口需要在程序主體運行之前被調(diào)用,實現(xiàn)程序構(gòu)件的初始化功能。這樣,原來程序編碼時在函數(shù)體外定義的全局有初值變量,通過初始化接口完成初值的賦值操作。該接口需要在調(diào)用主程序main函數(shù)之前被調(diào)用,確保調(diào)用功能函數(shù)之前完成全局屬性的初始化工作。

1.2.4 運行時內(nèi)存健康檢查

本文方案需要在最小模式軟件運行時對全部內(nèi)存進行健康檢查,并給出詳細的檢查結(jié)果,這樣地面才可以針對故障的部分進行有針對性的軟件設(shè)計,采用跳躍、隔離等方法避免軟件訪問故障內(nèi)存區(qū)域。否則,地面沒有內(nèi)存故障區(qū)域的詳細信息,很難分析出故障的具體地址范圍,也就無法進行針對性的軟件設(shè)計。檢查時需要跳過程序運行使用的內(nèi)存,該部分內(nèi)存在程序啟動時已經(jīng)檢查過,可以確保軟件能夠正常使用。

2 測試驗證分析及建議

測試目標機使用星載計算機,處理器為BM3803,內(nèi)存為8 Mbyte(4片SRAM芯片,每片2 Mbyte)。由于無法物理模擬芯片內(nèi)部區(qū)域損壞情況,測試時采用斷開第1片SRAM的片選信號CS1,這樣原內(nèi)存空間0x40000000~0x407FFFFF中,0x40000000~0x401FFFFF的地址全部無法正常訪問。經(jīng)測試,全局構(gòu)件首地址自動從0x40000000調(diào)整至0x40200000,完整跳過了第1片SRAM的地址空間,其功能得以穩(wěn)定運行。圖4是運行效果示意。

圖4 運行效果示意Fig.4 Operation effect diagram

性能方面,在每個需要使用全局屬性的函數(shù)起始處,都需要首先調(diào)用構(gòu)件訪問接口,以獲得全局構(gòu)件首地址。根據(jù)SPARC編譯器反匯編出的程序進行分析,調(diào)用該接口占用4條匯編語句。另外,對全局屬性的訪問相較原來都變?yōu)榱酥羔樤L問的方式;從反匯編可以看出,每次訪問變量都需要先獲取指針,再訪問對應(yīng)變量,這樣每個全局變量的訪問較原來都增加了2條匯編語句??傮w上來看,經(jīng)過編譯后的機器碼存儲占用空間較原來增加不足5%(不同編程風(fēng)格變化不同)。在運算速度上,將代碼放置在ROM中運行,速度較在RAM中運行下降較多,但最小模式軟件功能較為簡單,運算速度下降對軟件功能幾乎沒有影響。另外,由機器碼增多帶來的運行速度下降幾乎可以忽略。

從效果上分析,采用本文方案實現(xiàn)的星載最小模式軟件,以4096 Kbyte內(nèi)存為例,使用128 Kbyte連續(xù)空間,以1 Kbyte為最小劃分,按照本文設(shè)計的程序,可以有3968種不同的啟動地址,較多分區(qū)等設(shè)計中僅能存放個位數(shù)的不同版本的最小模式軟件,大幅提升了生存能力。

為了能夠使本文提出的軟件方案發(fā)揮最大功效,對硬件設(shè)計提出以下建議。

(1)內(nèi)存芯片盡量使用多片構(gòu)成運行空間,而不是選擇容量大的1片,避免整片失效后造成運行空間全部無法使用的情況。

(2)多片內(nèi)存采用字擴展,而不是位擴展設(shè)計,避免某片失效,造成運行空間間隔故障,間隔的寬度是該片內(nèi)存的位寬,這樣整個運行空間也是無法使用的。

需要說明的是,即使星載計算機采用本文方案,也不是萬無一失的。因為即便在內(nèi)存大部分損壞的極端情況下,最小模式軟件能夠生存,不代表剩余空間能夠維持業(yè)務(wù)軟件運行。因此在硬件設(shè)計時,內(nèi)存芯片的數(shù)量及內(nèi)存空間的余量需要進行針對性設(shè)計,這樣才可以發(fā)揮本文方案的最大效能,確保系統(tǒng)可靠性。

3 結(jié)束語

本文設(shè)計了一種支持內(nèi)存區(qū)域故障自適應(yīng)的星載最小模式軟件方案,使用軟件構(gòu)件技術(shù),利用嵌入式軟件編譯鏈接的規(guī)則,使軟件具備在內(nèi)存某個地址或某區(qū)域地址的物理損壞場景下仍可以正常運行的能力。采用本文方案開發(fā)的最小模式軟件,成本低,效率高,可靠性強,可大幅提高軟件在SRAM部分損壞場景下的生存幾率,進而提高星載計算機在軌應(yīng)用的可靠性。采用該方案的最小模式軟件已經(jīng)在北斗三號多個軌道的20多顆衛(wèi)星上得到應(yīng)用,為北斗三號在軌10~12年的設(shè)計壽命提供了重要保障。

猜你喜歡
寄存器全局構(gòu)件
基于改進空間通道信息的全局煙霧注意網(wǎng)絡(luò)
鋼筋混凝土構(gòu)件裂縫控制
領(lǐng)導(dǎo)者的全局觀
Lite寄存器模型的設(shè)計與實現(xiàn)
常用電子測速法在某數(shù)字信號處理器中的應(yīng)用*
二分搜索算法在全局頻繁項目集求解中的應(yīng)用
落子山東,意在全局
移位寄存器及算術(shù)運算應(yīng)用
基于構(gòu)件的軟件工程技術(shù)與理論方法探討
基于構(gòu)件的軟件開發(fā)實踐
习水县| 临泽县| 武安市| 孝义市| 贵南县| 南召县| 保德县| 海丰县| 平山县| 无极县| 咸宁市| 两当县| 富裕县| 辉县市| 黔西| 依兰县| 河津市| 呼图壁县| 全椒县| 吉水县| 滨州市| 濉溪县| 朝阳区| 昭平县| 阿城市| 柯坪县| 修武县| 木里| 阳谷县| 龙胜| 上栗县| 宣威市| 磴口县| 潮州市| 东丽区| 马龙县| 牟定县| 子洲县| 彰化市| 唐山市| 元阳县|