999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向S698處理器的軟件故障注入工具研究與實現*

2016-07-21 04:54:31佟雙軍左德承劉宏偉
航天控制 2016年4期

董 劍 佟雙軍 左德承 劉宏偉

哈爾濱工業大學,哈爾濱150001

?

面向S698處理器的軟件故障注入工具研究與實現*

董 劍 佟雙軍 左德承 劉宏偉

哈爾濱工業大學,哈爾濱150001

故障注入技術通過人為引入故障,加速系統失效,能夠在短時間內有效地評估容錯計算機系統的容錯性能。通過對S698芯片以及當前軟件故障注入技術的研究,設計實現了一款針對S698處理器的軟件故障注入工具S-SFI,能夠進行關鍵寄存器被修改、代碼段破壞、進入非法工作區、死循環、軟件不喂狗和接口器件工作異常等類型故障的注入。該工具利用串口通信的方式在宿主機端提供了良好的交互界面。通過實驗對S-SFI的各項功能進行了驗證,并分析了各類型故障對目標系統的影響程度。 關鍵詞 軟件故障注入;S698處理器;中斷處理

計算機系統的可靠性評估是一項非常復雜的工作[1]。通常采用的模型分析方法隨著系統軟硬件規模的快速增長而變得越來越困難。對于實際系統,模型分析中涉及到的故障激勵和錯誤的傳播過程過于復雜,如果在建模的過程中將實際系統假設成較為簡單的模型,分析結果就沒有太大的參考意義。通過實驗方式來評估系統可靠性已經成為一種非常有吸引力的驗證系統容錯機制的方法。其中,將物理故障注入目標系統硬件是一種較為常用的方式[2]。諸如引腳級故障注入、重離子輻射和電源干擾都是這種故障注入方式的常用方法[3-4],該方法的優點是能模擬真實的硬件故障,但缺點是需要針對特定的目標系統附加額外的硬件和故障注入設備。另外,目前高復雜度、高速度的硬件系統也使故障注入設備的研制變得非常困難,甚至不可能。通過對系統的仿真模型執行故障注入也是評估可靠性的常用方法,但該方法耗時多,需要花大量時間開發仿真系統。基于軟件實現的故障注入技術[5-6]正逐漸受到關注,通過某種途徑(插入陷阱指令或者讓目標程序在調試模式下執行)中斷目標程序的執行,利用軟件代碼模擬系統軟硬件故障。這種方式實現復雜度低、成本小,具有很強的可擴展性。

本文設計并實現一款面向S698處理器芯片的軟件故障注入工具S-SFI(Software Fault Injector for S698)。S698是一款商業化的基于SPARC V8標準的32位RISC處理器,其內部集成64位的浮點處理單元(FPU)、PCI控制器等片上外設。該芯片適用于高可靠實時控制,廣泛應用于工業控制、工程機械、航天航空、醫用電子設備和商用電子設備等領域。所提出的軟件故障注入工具能完成關鍵寄存器修改、代碼段破壞、進入非法工作區、死循環和接口器件工作異常等多種類型的故障注入。應用程序開發者能夠通過故障注入之后系統的執行效果來檢驗嵌入式應用的容錯性能,有效輔助系統開發人員完成容錯應用的研制。

故障注入技術提出于上世紀70年代,主要用于驗證容錯系統的設計。按照實現方式的不同可以分為基于仿真的實現、基于硬件實現和基于軟件實現3大類。基于仿真方式的故障注入需要對目標系統建立仿真模型,對模型的精確性要求較高。基于硬件方式的故障注入需要使用額外的硬件,并且容易對目標系統造成永久性損壞。而軟件實現的故障注入通過修改程序執行時內存映像、處理器寄存器或應用程序源代碼等方式來模擬故障的發生,其實現成本低、對目標系統依賴性小、對其硬件沒有損壞、具有較好的可移植性。目前國內外研究機構已開發了多款軟件故障注入工具,如表1所示。

從表1中可以看出,FIAT[7]的故障注入位置是由用戶在應用程序這個層面上選擇的,而其對內存映像故障注入的具體位置是通過編譯器和裝載信息獲取的,這就決定了它無法注入瞬時故障。FERRARI[8]的運行受限于帶有ptrace接口函數的故障注入目標系統,無法對不帶有操作系統環境的嵌入式應用執行故障注入。DOCTOR[9]適用于分布式系統。Xception[1]對處理器要求較高,需要用到調試硬件編程接口,而這在很多情況下無法獲取。FTAPE[10]的故障注入需要修改驅動程序,并且該方法只能注入比特位翻轉類型的故障。GOOFI[11]只是提供了一個通用的框架,它的主要目的是為對不同的故障注入目標系統執行故障注入提供一個通用的操作平臺,因為該平臺是利用面向對象的思想設計的,所以能方便地擴展故障注入功能。目前的GOOFI版本只提供了對運行前引入故障這種方法的支持,這是其局限性。JACA[12]雖然能夠對Java應用程序執行高層次故障注入(例如修改變量值),但其運行依賴于Java語言的反射機制,僅僅適用于對Java程序的故障注入。從上述對這些軟件注入工具的分析來看,軟件故障注入工具需要針對其依賴的運行環境和編譯環境進行設計,同時受到這些因素的影響,其功能也有一定的局限性。而目前國內尚未發現能夠運行于S698處理器的故障注入工具。為此,通過對現有工具中針對不同注入方式以及不同故障類型的注入技術的研究,提出了一款支持國產S698處理器的軟件注入工具S-SFI。

1 S-SFI的設計與實現

1.1 SFI的運行環境

S-SFI可分為服務端和控制端兩部分,分別運行在宿主機和基于S698處理器的目標系統上。具體運行環境如圖1所示。

S-SFI的服務端運行在以S698芯片為處理器的目標硬件系統上,以串口中斷處理程序的方式注冊到目標系統的中斷向量表中。故障注入目標程序連同服務端相關代碼在集成開發環境Orion 5.0中編輯、編譯、鏈接生成可執行程序之后,開發環境通過宿主機COM1串口下載可執行程序到目標硬件(對應DSU調試支持接口)之上運行。宿主機COM1口和目標硬件的DSU口共同組成了程序下載運行調試的物理通道。目標系統提供一個串口(UART1)與宿主機機串口2相連,構成故障注入工具控制端與服務端之間的故障注入與結果回收通道。

圖1 S-SFI的運行環境

表1 國外經典軟件故障注入工具

工具名稱實現單位注入特點FIAT美國CMU大學破壞任務內存映像FERRARI美國Texas大學利用UNIXptrace接口函數提供的調試功能注入故障DOCTOR美國Michigan大學能注入處理器、內存、通信故障Xception葡萄牙Coimbra大學對處理器內部調試硬件編程FTAPE美國Illinois大學修改驅動程序模擬磁盤、內存等故障GOOFI瑞典Chalmers大學面向對象的故障注入工具,用通用數據庫存儲數據JACA巴西Campinas大學利用Java語言的反射機制對Java程序執行故障注入

1.2 S-SFI的功能設計

S-SFI的服務端和控制端的具體功能結構如圖2所示。

控制端位于宿主機上,是用戶配置故障注入參數、進行故障注入、觀察運行結果的交互界面。由于目標程序運行在嵌入式環境下,而這種環境所能提供的人機交互方式非常有限且不直觀,為此選擇將工具的控制部分實現在能夠運行Windows的宿主機上,方便用戶操作。S-SFI的控制端主要包含串口通信支撐模塊、故障注入參數生成模塊和命令發送與結果回收模塊。串口通信支撐模塊主要包含與目標系統進行串口通信的一些功能。它提供串口選擇、發送數據、接收數據和配置串口波特率等串口相關功能給其他模塊,供控制端與服務端通信使用。故障注入參數生成模塊為用戶提供配置界面,并且根據用戶的輸入合理地組織故障注入命令。命令發送與結果回收模塊一方面接收參數生成模塊的故障注入命令數據并進行相應的改造以形成控制命令字節流,通過串口發送到工具的服務端。另一方面還需接收解析服務端發來的反饋結果顯示給用戶。這3個模塊統一協作,使得用戶能夠在PC機上配置故障注入參數、執行故障注入并得到反饋結果。

服務端位于目標系統之上,是工具的核心部分,主要包含了關鍵寄存器修改、代碼段破壞、進入非法工作區、死循環、軟件不喂狗和接口器件工作異常這6種故障的實際注入模塊和系統狀態反饋模塊。命令接收與解析模塊接收串口上收到的故障注入命令字節流并解析出命令的含義,將相關參數放到相應的數據結構中供后續的故障注入使用。不同的故障類型所對應的參數需求如表2所示。在S-SFI的注入命令格式為‘b’+faultType+parameters+‘e’,命令字長度不固定,用b和e字符指示命令的開頭與結尾,它們之間的內容如果與‘b’,‘e’相同則需要用‘’字符進行轉義。命令的第1個字節描述故障類型,其余位用來表示注入故障的參數,命令字長度不固定。

圖2 S-SFI總體功能結構

1.3 S-SFI的實現

(1) 關鍵寄存器的修改

S698包含72個普通寄存器以及大量的系統寄存器,普通寄存器能通過匯編指令訪問到,系統寄存器可通過C程序訪問。目標系統處理器有用戶、特權2種工作模式。在中斷處理程序中,處理器處于特權模式,能讀寫所有存儲器和寄存器。

表2 每種故障類型注入所需的參數變量

系統寄存器分布于內存地址空間上,中斷發生時不會被硬件自動保存,能夠在中斷處理程序中直接修改。而普通的72個寄存器,在中斷發生之時會采用SPARC架構特有的窗口機制保存部分通用寄存器。因此,實現寄存器修改的關鍵就是找到被寄存器滑動窗口所隱藏的寄存器。圖3中給出了寄存器窗口的結構。

圖3 具有8組寄存器窗口的寄存器結構

在S698中,當發生函數調用(包含中斷調用)時,隱含的save指令使窗口按圖中逆時針的方向移動一個格,使得被調函數在新的窗口運行,前一窗口的out寄存器組變成當前窗口的in寄存器組,這種特性常常使得函數調用變得高效,但卻使我們無法在中斷處理程序中訪問被注入的目標程序的寄存器。為此,對中斷注冊函數catch_interrupt進行了反匯編分析,得到了S698中斷的注冊過程。在此基礎上,設計了窗口寄存器的訪問方法。在用于注入的串口中斷處理子程序中,先通過restore執行回到進入中斷處理程序之前的寄存器窗口B,利用該窗口的sp寄存器的值,可以訪問并修改內存中保存的窗口B的寄存器的內容,待中斷返回后,注入的故障值就會被恢復到相應的寄存器中。在這里還需要注意,涉及修改寄存器的代碼部分不能使用局部變量,因為局部變量存儲在內存中的堆棧段,堆棧段通過sp寄存器(窗口中的o6寄存器)訪問,而sp寄存器在窗口變換的過程中對應的物理寄存器不同,其值會發生變化,故障注入會因不能正確訪問到變量值而失敗。

(2)代碼段的破壞

代碼段的破壞需要起始破壞地址、終止破壞地址和待注入破壞值3個參數。由于控制端發過來的地址可能不是4字節對齊的,所以在進行故障注入時首先需判斷起始地址,如果是4字節對齊地址,利用整型指針指向當前待破壞代碼段起始位置,以每次四字節的速度執行故障值的寫入。如不是4字節對齊地址,需利用字節指針先處理前面若干字節,按照字節依次寫入故障值。因為Sparc處理器內存的存儲格式是大端模式,其在存儲4字節變量的時候,將變量的最高字節存放在內存的最小地址上,舉例來說,如果內存地址0x40037280-0x40037283處存儲了整型內容0x12574538,那么這個數據中的字節0x12會被存放在地址0x40037280處,字節0x38會被存儲到0x40037283處。對于S-SFI來說,因為只接受4字節為單位的代碼段破壞故障值,所以如果用戶指定的代碼段首地址不是4字節對齊,為保持一致性,在對4字節對齊地址之前的內存單元進行破壞時,要仔細選擇寫入的字節。圖左邊表示向內存地址0x40037280寫入破壞值 0x12574538之后的內存形態,如果用戶指定的故障注入地址以0x4003727E開始,如圖4中左側畫“??”處,那么,要保證在破壞前2個內存單元之后,內存單元中的數據分布要與圖中右側的形式一致。

圖4 多字節代碼段破壞值在內存中的分布

(3) 其它注入功能的實現

進入非法工作區主要是對目標程序的PC和nPC寄存器的修改。由于這2個寄存器都會被寄存器滑動窗口保存起來,注入方法與寄存器修改類似。非法工作區的地址采用隨機地址,在實驗中,進入非法工作區后系統大多數會崩潰。死循環故障使用匯編語言向中斷返回地址寫入死循環機器代碼,將其寫入PC寄存器所指向的代碼段地址。通過對brach指令機器碼的分析獲得實現死循環的機器代碼。接口器件的工作異常采用了基于定時器的注入方式,定時器中斷處理程序中采用循環的方式將故障值數組中的每個故障值注入到指定的接口控制系統寄存器中。

2 實驗

實驗所采用的目標系統為歐比特提供的s698開發系統,目標程序為整型和浮點矩陣計算程序。實驗中針對6種類型的故障共進行了5110次注入。表3對注入結果進行了統計。

表3 故障注入實驗結果統計

在共計5110次的故障注入測試中,有722次導致目標系統崩潰,比例達到了14.13%。有100次導致運行結果不正確,比例為1.96%,故障注入后仍舊得到正確結果的比例為83.91%。首先來看寄存器故障注入部分,對大部分寄存器執行的故障注入對目標系統的運行結果沒有影響,這可能是因為目標程序運行中并沒有用到這些寄存器,在導致目標系統運行結果不正確的100次故障中,o0,o4,o5,Y,FSR寄存器的故障注入占有的百分比相對多些,說明程序在執行的過程中經常用到它們,這些寄存器對于得到正確的計算結果非常重要。在導致目標系統崩潰的525次故障中,fp,sp,PSR,PC,nPC,WIM和TBR占有的百分比最多,o2次之,這是由于前面幾個寄存器都是堆棧指針(程序要通過它來訪問變量)或者控制寄存器,它們的故障對系統影響非常大,當其值被改變后,程序可能訪問到了錯誤的內存位置或進入不正確的狀態而導致系統運行崩潰。從表中也可以看出,關鍵寄存器修改、破壞代碼段、進入死循環和進入非法工作區這幾種類型故障注入后引起系統的崩潰或者錯誤率都到90%以上,證明它們對于目標程序來說都是非常致命的故障。在系統設計時,要著重研究如何檢測與應對這些對系統運行而言非常關鍵的故障。

3 總結

經過對S698處理器的深入研究,本文利用基于串口和定時器中斷的故障注入手段,開發了一款軟件故障注入工具S-SFI,能完成關鍵寄存器修改、代碼段破壞、進入非法工作區、死循環、軟件不喂狗、接口器件工作異常這6種類型故障的注入,并通過實驗對各項功能進行了驗證。S-SFI基于中斷控制注入的執行,實現了運行時的故障注入,可在線調整注入參數,能極大提高基于S698的容錯系統的調試與驗證效率。在下一步工作中,將展開對故障注入數據的分析工作,為用戶提供更加直觀的系統容錯能力參考數據。

[1] Carreira J, Madeira H, Silva J G. Xception: Software Fault Injection and Monitoring in Processor Functional Units[J]. Dependable Computing and Fault Tolerant Systems, 1998, 10: 245-266.

[2] Hsueh M C, Tsai T K, Iyer R K. Fault Injection Techniques and Tools[J]. Computer, 1997, 30(4): 75-82.

[3] Natella R, Cotroneo D, Duraes J A, et al. On Fault Representativeness of Software Fault Injection[J]. IEEE Transactions on Software Engineering, 2013, 39(1): 80-96.

[4] Arlat J, Crouzet Y, Karlsson J, Folkesson P, Fuchs E, Leber G H. Comparison of Physical and Software-implemented Fault Injection Techniques[J]. IEEE Trans. Comput, 2003,52(9) : 1115-1133.

[5] Ziade H, Ayoubi R A, Velazco R. A Survey on Fault Injection Techniques[J]. Int. Arab J. Inf. Technol., 2004, 1(2): 171-186.

[6] Wei J, Thomas A, Li G, et al. Quantifying the Accuracy of High-level Fault Injection Techniques for Hardware Faults[C]. The 44rd Annual IEEE/IFIP International Conference on.Dependable Systems and Networks (DSN), 2014.

[7] Barton J H, Czeck E W, Segall Z Z, et al. Fault Injection Experiments Using FIAT[J]. IEEE Transactions on Computers, 1990, 39(4): 575-582.

[8] Kanawati G A, Kanawati N A, Abraham J A. Ferrari: A Flexible Software-based Fault and Error Injection System[J]. IEEE Transactions on Computers, 1995, 44(2): 248-260.

[9] Han S, Shin K G, Rosenberg H A. Doctor: An Integrated Software Fault Injection Environment for Distributed Real-time Systems[C]. International. IEEE Computer Performance and Dependability Symposium, 1995, 204-213.

[10] Tsai T K, Iyer R K. Ftape: A Fault Injection Tool to Measure Fault Tolerance[R]. NASA STI/Recon Technical Report N, 1994.

[11] Aidemark J, Vinter J, Folkesson P, et al. Goofi: Generic Object-oriented Fault Injection Tool[C]. International Conference on Dependable Systems and Networks, 2001, 83-88.

[12] Martins E, Rubira C M F, Leme N G M. Jaca: A Reflective Fault Injection Tool Based on Patterns[C]. International Conference on Dependable Systems and Networks, 2002, 483-487.

A Software Fault Injector for S698 Processor

Dong Jian, Tong Shuangjun, Zuo Decheng, Liu Hongwei

Harbin Institute of Technology, Harbin 150001, China

Thefaultinjectiontechnologycanacceleratesystemfailurebyinjectingthefault,whichcaneffectivelyevaluatethefaulttoleranceperformanceoffaulttolerantcomputersysteminashortperiodoftime.ByresearchingthesoftwarefaulttechniquesandS698chip,asoftwarefaultinjectorforS698chip(S-SFI)isdesignedandimplemented,whichcaninjectfaults,suchasthekeyregistersmodification,codesegmentwreckage,illegalworkareaentrance,thedeadcycle,errorofwatchdogandabnormalinterface,intothesoftwaresystemrunningonS698.Finally,thefunctionsofS-SFIisevaluatedbyexperiments,andtheinfluenceofeachtypeoffaultonthetargetsystemisanalyzedaccordingtotheexperimentalresults.

Softwarefaultinjection; S698chip;Interruption

*國家自然科學基金(61100029)

2014-10-29

董 劍(1978-),男,山東章丘人,博士,教授,主要研究方向為容錯計算技術;佟雙軍(1990-),男,哈爾濱人,碩士研究生,主要研究方向為容錯機制驗證;左德承(1971-),男,黑龍江五常人,博士,教授,主要研究方向為容錯計算與移動計算;劉宏偉(1971-),男,黑龍江大慶人,博士,教授,主要研究方向為軟件可靠性。

TP302.8

A

1006-3242(2016)04-0083-06

主站蜘蛛池模板: 中美日韩在线网免费毛片视频| 亚洲无码高清免费视频亚洲| 国产成人精品高清不卡在线| 五月婷婷精品| 国产91久久久久久| 最新国语自产精品视频在| 青青国产视频| 国产91麻豆免费观看| 91久久大香线蕉| 亚洲欧美另类视频| 色偷偷男人的天堂亚洲av| 在线看片免费人成视久网下载| 国产xx在线观看| 成人国产免费| 国产精品尤物铁牛tv| 国产亚洲精品自在久久不卡| 国产视频大全| 国产真实乱人视频| 免费国产无遮挡又黄又爽| www.精品国产| 欧美在线免费| 国产亚洲精| 国产区在线看| 国产精品片在线观看手机版| 国产啪在线91| 中文无码毛片又爽又刺激| 久久青草视频| 日韩激情成人| 国产粉嫩粉嫩的18在线播放91| 中文字幕 日韩 欧美| 日韩欧美国产成人| 综合成人国产| 538国产视频| 男女男精品视频| 国产成人精品一区二区三区| 亚洲美女一区二区三区| www.youjizz.com久久| 亚洲国产综合精品中文第一 | www.99精品视频在线播放| 久久不卡国产精品无码| 日本91视频| av一区二区三区高清久久| 中文字幕永久视频| 国产精品亚洲一区二区三区在线观看| 四虎免费视频网站| 在线观看国产黄色| 亚洲人网站| 亚洲无码高清一区二区| 久久亚洲高清国产| 亚洲欧洲日韩综合| 国产人人射| 国产成人综合欧美精品久久| 亚洲精品天堂在线观看| 日韩欧美在线观看| 澳门av无码| 国产免费黄| 黄色免费在线网址| 欧美特黄一级大黄录像| 亚洲伊人电影| 好紧好深好大乳无码中文字幕| 欧洲亚洲一区| 欧美中文一区| 久久天天躁狠狠躁夜夜2020一 | 国产欧美高清| 老司机午夜精品网站在线观看| av一区二区无码在线| 在线a网站| 亚洲天堂久久| 二级特黄绝大片免费视频大片| 国产精品香蕉在线| 国产中文一区二区苍井空| 日韩欧美色综合| 国产精品综合色区在线观看| 久久永久视频| 精品国产免费观看| 亚洲国产第一区二区香蕉| 成人国产精品一级毛片天堂| 欧美狠狠干| 欧美午夜网| 国产在线欧美| 日韩大乳视频中文字幕| jizz国产视频|