• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      安全防護(hù)技術(shù)在故障安全平臺(tái)研發(fā)中的應(yīng)用和思考

      2013-05-08 09:07:26盧利勇孫壽龍
      關(guān)鍵詞:編譯器編程工具

      盧利勇 孫壽龍

      (北京全路通信信號(hào)研究設(shè)計(jì)院有限公司,北京 100073)

      盧利勇,男,碩士畢業(yè)于蘭州交通大學(xué),工程師。主要研究方向包括嵌入式系統(tǒng)設(shè)計(jì)、計(jì)算機(jī)聯(lián)鎖系統(tǒng)開發(fā),曾參與DS6-60故障安全平臺(tái)、全電子計(jì)算機(jī)聯(lián)鎖項(xiàng)目。

      隨著軌道交通系統(tǒng)的日新月異發(fā)展,軌道交通系統(tǒng)相關(guān)設(shè)備的需求也日益擴(kuò)大。故障安全平臺(tái),不僅可以應(yīng)用到國(guó)有鐵路的車站聯(lián)鎖控制,還可以應(yīng)用到城市軌道交通信號(hào)控制系統(tǒng)中,如計(jì)算機(jī)聯(lián)鎖系統(tǒng)、區(qū)域控制中心等,還可以作為CTCS-2或CTCS-3系統(tǒng)中的車站列控中心使用,具有廣闊的應(yīng)用前景。

      然而軌道交通系統(tǒng)作為大容量公共交通工具,其安全性直接關(guān)系到廣大乘客的生命安全。其中信號(hào)系統(tǒng)作為保證列車安全、正點(diǎn)、快捷、舒適、高密度不間斷運(yùn)行的重要技術(shù)裝備,在軌道交通系統(tǒng)中有著舉足輕重的地位。因此,對(duì)信號(hào)系統(tǒng)其中的故障安全平臺(tái)的安全性提出更高的要求。

      在研發(fā)中使用哪些安全防護(hù)技術(shù)更好、更有效,從而使故障安全平臺(tái)更加安全可靠,成為困擾眾多研發(fā)者的問(wèn)題。

      本文以DS6-60①DS6-60型故障安全平臺(tái)是北京全路通信信號(hào)研究設(shè)計(jì)院有限公司自主創(chuàng)新研發(fā)的一個(gè)符合歐洲鐵路安全標(biāo)準(zhǔn)的計(jì)算機(jī)聯(lián)鎖系統(tǒng)。該系統(tǒng)采用二乘二取二冗余結(jié)構(gòu)設(shè)計(jì), 系統(tǒng)中所有涉及到安全信息處理和傳輸?shù)牟考凑铡肮收?安全”原則采取了2重系結(jié)構(gòu)設(shè)計(jì),滿足鐵路車站信號(hào)控制設(shè)備高可靠和高安全的使用要求?,F(xiàn)已在全路大面積推廣。故障安全平臺(tái)為例,對(duì)二取二安全機(jī)制、工具安全性分析和防御性編程3種關(guān)鍵安全防護(hù)技術(shù)的使用進(jìn)行闡述。

      1 防護(hù)技術(shù)一:二取二安全機(jī)制

      二取二防護(hù)機(jī)制能有效防止單點(diǎn)故障,二取二安全機(jī)制在實(shí)現(xiàn)上還需要注意些什么,下面結(jié)合一個(gè)例子來(lái)說(shuō)明。

      如圖1所示,圖1中執(zhí)行模塊的設(shè)計(jì),為了防止一個(gè)CPU發(fā)生故障,誤輸出,使用了雙CPU二取二協(xié)同輸出的方式,CPU1輸出動(dòng)態(tài)脈沖碼,CPU2輸出靜態(tài)電平信號(hào),只有當(dāng)CPU1和CPU2都輸出時(shí),執(zhí)行模塊通過(guò)表決器最終才會(huì)輸出驅(qū)動(dòng)信號(hào)。

      下面設(shè)想幾種場(chǎng)景,分析基于以上設(shè)計(jì),是否還有危險(xiǎn)輸出。

      1)場(chǎng)景1:CPU1故障一直輸出動(dòng)態(tài)脈沖②CPU1為動(dòng)態(tài)輸出,如果CPU1輸出動(dòng)態(tài)脈沖表示系統(tǒng)本周期有輸出,如果CPU1輸出靜態(tài)電平表示系統(tǒng)本周期無(wú)輸出。。這時(shí)二取二已經(jīng)失效,相當(dāng)于只有CPU2控制輸出。

      解決方法:如圖1中線2,CPU1回讀CPU2的輸出信號(hào),CPU1每周期在輸出前,先要檢查CPU2的輸出狀態(tài),只有CPU2有輸出,CPU1才輸出動(dòng)態(tài)脈沖,否則CPU1不輸出。

      2)場(chǎng)景2③每一種場(chǎng)景都是基于上一場(chǎng)景提出問(wèn)題已解決,結(jié)構(gòu)已完善的基礎(chǔ)上。:比較器故障。CPU1和CPU2都沒(méi)有輸出,通過(guò)比較器輸出了驅(qū)動(dòng)信號(hào),驅(qū)動(dòng)繼電器誤動(dòng)作。

      解決方法:如圖1中線1。CPU2每周期都會(huì)通過(guò)檢測(cè)回讀電路獲得比較器后端的輸出,如果本周期CPU2沒(méi)有輸出,而比較器后端有輸出,CPU2經(jīng)過(guò)過(guò)濾期④過(guò)濾期為系統(tǒng)可容忍的最大時(shí)間,由具體的系統(tǒng)功能確定該時(shí)間。后,做出相應(yīng)的故障安全處理。

      3)場(chǎng)景3:CPU2檢測(cè)回讀電路故障。比較器故障后,產(chǎn)生了誤輸出,由于檢測(cè)電路故障,不能及時(shí)發(fā)現(xiàn)。

      解決方法:系統(tǒng)在沒(méi)有輸出的周期,產(chǎn)生時(shí)間較短、能量較弱的確保不會(huì)導(dǎo)致現(xiàn)場(chǎng)設(shè)備動(dòng)作的測(cè)試輸出信號(hào),這樣,在沒(méi)有輸出時(shí),通過(guò)測(cè)試輸出信號(hào),及時(shí)發(fā)現(xiàn)檢測(cè)回讀電路的狀態(tài),一旦發(fā)現(xiàn)檢測(cè)回讀電路故障,立即做安全處理,確保不會(huì)誤輸出。

      雙CPU同步是二取二實(shí)現(xiàn)的一個(gè)關(guān)鍵問(wèn)題,如圖2所示,DS6-60邏輯部二取二硬件設(shè)計(jì)中,采用同一個(gè)時(shí)鐘源產(chǎn)生時(shí)鐘,然后經(jīng)過(guò)同步中斷產(chǎn)生電路,產(chǎn)生固定周期的中斷信號(hào),為雙CPU任務(wù)級(jí)同步提供硬件支持。為了防止時(shí)鐘源跑偏,每個(gè)CPU除了外部同步中斷計(jì)時(shí),內(nèi)部也有定時(shí)器計(jì)時(shí),每周期開始要對(duì)外部同步中斷計(jì)時(shí)和內(nèi)部定時(shí)器計(jì)時(shí)進(jìn)行校準(zhǔn),確保內(nèi)部和外部計(jì)時(shí)的一致性。

      兩個(gè)CPU采用相同的輸入數(shù)據(jù)進(jìn)行獨(dú)立運(yùn)算,運(yùn)算結(jié)果通過(guò)雙口RAM進(jìn)行交互,比較一致時(shí)才可以對(duì)外輸出;如果不一致,系統(tǒng)退出控制,導(dǎo)向安全側(cè),保證系統(tǒng)的高安全性。比較原理如圖3所示。

      2 安全防護(hù)技術(shù)二:工具安全性分析

      在軟件開發(fā)的不同階段中,工具對(duì)開發(fā)者都是有很多幫助的。

      在開發(fā)DS6-60系統(tǒng)過(guò)程中,使用SVN做文檔和代碼管理,使用了Testbed 做靜態(tài)走查和單元測(cè)試,使用了ADS集成開發(fā)環(huán)境,在ARM芯片上完成調(diào)試和下載等。

      根據(jù)EN50128對(duì)工具的分類,T1類工具為不產(chǎn)生任何對(duì)軟件執(zhí)行代碼(包括數(shù)據(jù))影響的工具;T2類工具為支持對(duì)設(shè)計(jì)或執(zhí)行代碼進(jìn)行測(cè)試或驗(yàn)證功能,該類工具中的缺陷可能導(dǎo)致不能有效地發(fā)現(xiàn)設(shè)計(jì)或執(zhí)行代碼的缺陷,但是該類工具不會(huì)直接在執(zhí)行軟件中產(chǎn)生錯(cuò)誤;T3類工具為產(chǎn)生對(duì)安全相關(guān)系統(tǒng)的執(zhí)行代碼(包括數(shù)據(jù))直接或間接有影響的輸出工具。

      以上羅列的幾種工具,其中SVN為T1類,Testbed為T2類,ADS為T3類。T3類工具必須進(jìn)行安全性分析,并針對(duì)其可能帶來(lái)的安全風(fēng)險(xiǎn)提供規(guī)避措施。

      2.1 ADS風(fēng)險(xiǎn)分析

      ADS帶來(lái)的風(fēng)險(xiǎn)如下。

      1)ARM C編譯器和ARM C鏈接器生成的目標(biāo)文件邏輯不正確(目標(biāo)文件邏輯上不符合程序源代碼的描述)。

      2)ARM C編譯器和ARM C鏈接器在生成的目標(biāo)文件中人為地插入惡意代碼,導(dǎo)致目標(biāo)程序運(yùn)行不可靠或達(dá)到某些其他惡意目的。

      3)AXD在將目標(biāo)文件燒寫至ARM芯片時(shí)發(fā)生錯(cuò)誤,芯片中運(yùn)行的程序與目標(biāo)文件邏輯上不一致。

      2.2 規(guī)避措施

      1)使用強(qiáng)類型語(yǔ)言或非強(qiáng)類型語(yǔ)言的安全子集

      在DS6-60中使用C語(yǔ)言做為編程語(yǔ)言。C語(yǔ)言屬于非強(qiáng)類型語(yǔ)言,很靈活,卻有很多陷阱。C語(yǔ)言有很多依賴于編譯器的未定義的行為。如:數(shù)據(jù)類型及對(duì)齊方式、數(shù)據(jù)在內(nèi)存的儲(chǔ)存方式等。

      SPSS21.0統(tǒng)計(jì)軟件分析數(shù)據(jù),用χ2檢驗(yàn)計(jì)數(shù)資料組間率,計(jì)數(shù)資料用例數(shù)[n(%)]表示,P<0.05為差異具統(tǒng)計(jì)意義。

      * ADS開發(fā)環(huán)境C編譯器以上行為分析如表1所示。

      表1 ARM C編譯器數(shù)據(jù)類型的大小和對(duì)齊

      * ARM C編譯器既支持大端模式,也支持小端模式,默認(rèn)為小端模式。

      通過(guò)以上對(duì)編譯器某些行為的分析,故障安全平臺(tái)的軟件開發(fā),在C語(yǔ)言的使用上盡可能少使用與編譯器相關(guān)的行為,使其盡可能的安全可控。如迫不得已使用時(shí),應(yīng)明確編譯器對(duì)應(yīng)行為的處理方式,并應(yīng)將其文檔化。如數(shù)據(jù)類型的轉(zhuǎn)換,必須強(qiáng)制轉(zhuǎn)換,而不是通過(guò)編譯器隱式轉(zhuǎn)換;如有可能會(huì)導(dǎo)致內(nèi)存溢出的strcpy/memcpy等庫(kù)函數(shù),在使用時(shí)需格外小心,保證不會(huì)發(fā)生內(nèi)存溢出。在DS6-60開發(fā)中,使用符合MIRSA C 2004且對(duì)C語(yǔ)言有更多約束的C語(yǔ)言安全子集。

      2)采取二取二的安全比較機(jī)制,雙CPU在運(yùn)行中比較邏輯的輸入和輸出值,如不一致,做故障處理。

      3)雙CPU采用不同編譯器,防止共模錯(cuò)誤。

      3 防護(hù)技術(shù)三:防御性編程

      數(shù)據(jù)溢出、指針?lè)欠?、關(guān)鍵數(shù)據(jù)被改寫這些安全性問(wèn)題經(jīng)常困擾著軟件開發(fā)工程師,一旦發(fā)生,排查問(wèn)題需要花費(fèi)很多的時(shí)間和精力。防御性編程的使用可以大大增加軟件設(shè)計(jì)的安全性。顧名思義,防御性編程是一種細(xì)致、謹(jǐn)慎的編程方法。防御性編程的目標(biāo)是通過(guò)處理已知的由硬件隨機(jī)性故障或軟件系統(tǒng)性故障引起的軟件故障,從而提供軟件健壯性。

      下面從兩個(gè)方面來(lái)說(shuō)明防御性編程:一方面是故障檢測(cè);另一方面是錯(cuò)誤檢測(cè)。

      3.1 故障檢測(cè)

      Fun(UINT8_T * pSrc)

      {

      UINT8_T temp;

      temp = g_num ;

      }

      在段代碼中,pSrc指針沒(méi)有任何防護(hù),局部變量也未初始化,局部變量如果不做顯性的初始化,局部變量的初始值是不確定的,完全依賴于編譯器。關(guān)鍵全局變量g_num未做防護(hù)。

      修改后的代碼如下。

      Fun(const UINT8_T * pSrc)

      {

      /*參數(shù)合法性校驗(yàn)*/

      if(pSrc != NULL)

      {

      UINT8_T temp = 0U;/*無(wú)符號(hào)型的常量加U*/

      /*關(guān)鍵全局變量合法性校驗(yàn)*/

      if (g_num <= MAX_NUM)/*MAX_NUM 為g_num的最大合法值*/

      {

      temp = g_num ;

      }

      else

      {

      …/*全局變量不合法故障處理*/

      }

      }

      else

      {

      …/*參數(shù)不合法故障處理*/

      }

      }

      這里說(shuō)明一點(diǎn),并不推薦對(duì)系統(tǒng)的所有全局?jǐn)?shù)據(jù)進(jìn)行合法性校驗(yàn),但是關(guān)鍵全局?jǐn)?shù)據(jù)在使用前應(yīng)加以校驗(yàn)。當(dāng)然故障檢測(cè)除了范圍的檢測(cè),還有資源上的防護(hù)等。比如在軟件中對(duì)關(guān)鍵靜態(tài)變量做周期性的校驗(yàn),防止關(guān)鍵靜態(tài)數(shù)據(jù)被非法改寫。在多任務(wù)的程序設(shè)計(jì)中,應(yīng)當(dāng)慎用共享變量進(jìn)行各任務(wù)間數(shù)據(jù)交換。因?yàn)镃PU對(duì)多任務(wù)程序進(jìn)行調(diào)度執(zhí)行時(shí)可能造成數(shù)據(jù)不一致。確需使用共享變量時(shí)應(yīng)當(dāng)作為臨界資源保護(hù)起來(lái),以控制對(duì)該臨界資源的互斥訪問(wèn)。

      比如操作系統(tǒng)與應(yīng)用軟件之間的防護(hù)關(guān)系:一方面操作系統(tǒng)如何保護(hù)應(yīng)用軟件,包括調(diào)度和內(nèi)存等資源管理,并保證不同應(yīng)用軟件運(yùn)行之間不會(huì)沖突等;另一方面應(yīng)用軟件故障/異常行為不會(huì)影響操作系統(tǒng)的正常工作。這些在設(shè)計(jì)階段都需要考慮。

      3.2 錯(cuò)誤檢測(cè)

      這里所說(shuō)的錯(cuò)誤檢測(cè)專指檢測(cè)通信會(huì)話中出現(xiàn)的數(shù)據(jù)丟失或損壞。一般經(jīng)常使用的檢測(cè)方法為:奇偶校驗(yàn)位、校驗(yàn)和、循環(huán)冗余校驗(yàn)碼等。一般采用檢錯(cuò)重發(fā)技術(shù)。

      4 結(jié)論

      采用二取二安全機(jī)制時(shí),需要考慮很多故障場(chǎng)景,以便實(shí)現(xiàn)真正意義上的二取二;工具安全性分析,不容易被重視,卻最終可能會(huì)導(dǎo)致故障安全平臺(tái)發(fā)生所謂的“詭異”問(wèn)題,編譯器、鏈接器等工具可能帶來(lái)的風(fēng)險(xiǎn)需要增加防護(hù);防御性編程可以提高軟件的健壯性,對(duì)于使用類似C語(yǔ)言的非強(qiáng)類型語(yǔ)言,建議在使用中對(duì)C語(yǔ)言的行為做出約束,使C語(yǔ)言的行為更加安全可控。

      除了上述3種安全防護(hù)措施,在故障安全平臺(tái)研發(fā)中,可能還會(huì)用到其他的安全防護(hù)措施,系統(tǒng)根據(jù)自身的特點(diǎn),選用適合本系統(tǒng)的安全防護(hù)技術(shù),最終使故障安全平臺(tái)安全可靠的運(yùn)行。

      [1] EN50128:2011鐵路應(yīng)用:通信、信號(hào)和處理系統(tǒng) 鐵路控制和防護(hù)系統(tǒng)用軟件[S].

      [2] EN50129:2003鐵路應(yīng)用:鐵路控制系統(tǒng)領(lǐng)域的安全相關(guān)電子系統(tǒng)[S].

      猜你喜歡
      編譯器編程工具
      我家有只編程貓
      我家有只編程貓
      我家有只編程貓
      我家有只編程貓
      波比的工具
      波比的工具
      基于相異編譯器的安全計(jì)算機(jī)平臺(tái)交叉編譯環(huán)境設(shè)計(jì)
      “巧用”工具
      讀者(2017年18期)2017-08-29 21:22:03
      通用NC代碼編譯器的設(shè)計(jì)與實(shí)現(xiàn)
      編譯器無(wú)關(guān)性編碼在微控制器中的優(yōu)勢(shì)
      南昌县| 湟中县| 晋城| 辽宁省| 德州市| 乐昌市| 石林| 灵丘县| 鄂伦春自治旗| 鄱阳县| 巨野县| 临洮县| 尼玛县| 尉氏县| 昭平县| 新竹县| 云龙县| 武鸣县| 独山县| 东阿县| 德庆县| 东莞市| 夹江县| 弋阳县| 元氏县| 凤山县| 自治县| 沅陵县| 巨野县| 宣汉县| 海林市| 盖州市| 县级市| 喀什市| 临泉县| 通海县| 淮滨县| 开原市| 沅江市| 清苑县| 浦江县|