• 
    

    
    

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

      一個(gè)基于COP的控制軟件安全性增強(qiáng)方法

      2013-07-11 09:35:46陳智勇
      關(guān)鍵詞:執(zhí)行器線程安全性

      陳智勇,徐 鋒,余 萍

      1.南京大學(xué) 軟件新技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,南京 2100462.南京大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)系,南京 210046

      一個(gè)基于COP的控制軟件安全性增強(qiáng)方法

      陳智勇1,2,徐 鋒1,2,余 萍1,2

      1.南京大學(xué) 軟件新技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,南京 210046
      2.南京大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)系,南京 210046

      1 前言

      安全性關(guān)鍵系統(tǒng)(Safety-Critical System,SCS)[1]泛指具有潛在破壞力的一類系統(tǒng),這類系統(tǒng)的失效會(huì)造成設(shè)備的損毀甚至是人員的傷亡。此類系統(tǒng)中,軟件是系統(tǒng)的一個(gè)重要安全因子,軟件的失效導(dǎo)致SCS的運(yùn)行錯(cuò)誤從而造成巨大的損失。軟件安全性(software safety)工作的出發(fā)點(diǎn)是系統(tǒng)安全性。一個(gè)單獨(dú)的軟件本身并不存在安全性問(wèn)題,只有當(dāng)軟件和硬件相互作用,在不同的環(huán)境下運(yùn)行才有可能導(dǎo)致人員的生命危險(xiǎn)、或系統(tǒng)崩潰、或造成不可接受的資源損失時(shí),才涉及到安全性問(wèn)題。因此,Mc-Dermid[2]認(rèn)為,軟件安全性只是軟件在系統(tǒng)上下文中對(duì)系統(tǒng)安全性方面的貢獻(xiàn)的描述。例如在航電軟件中,飛機(jī)在飛行高度低于預(yù)警值時(shí)應(yīng)該及時(shí)發(fā)出警示提醒飛行員。導(dǎo)致軟件失效的原因主要有兩類,一類是程序的邏輯錯(cuò)誤,如某個(gè)公式的代碼描述錯(cuò)誤;另一類是對(duì)軟件在不同環(huán)境中運(yùn)行沒(méi)有正確設(shè)計(jì)。例如1996年6月4日,阿麗亞娜5型運(yùn)載火箭的首航,原計(jì)劃將運(yùn)送4顆太陽(yáng)風(fēng)觀察衛(wèi)星到預(yù)定軌道,但因?yàn)檐浖l(fā)的問(wèn)題導(dǎo)致火箭在發(fā)射39 s后偏軌,從而激活了火箭的自我摧毀裝置。阿麗亞娜5型火箭和其他衛(wèi)星在瞬間灰飛煙滅。后來(lái)查明的事故原因是:代碼重用。阿5型的發(fā)射系統(tǒng)代碼直接重用了阿4型的相應(yīng)代碼,而阿4型的飛行條件和阿5型的飛行條件截然不同。此次事故損失3.7億美元。在現(xiàn)代軟件工程中,代碼重用已經(jīng)成為軟件設(shè)計(jì)的基礎(chǔ)方法之一,但是重用的代碼的安全性需要有可靠的保障。

      SCS系統(tǒng)的控制軟件一般會(huì)通過(guò)同其應(yīng)用功能相關(guān)的傳感器獲取環(huán)境數(shù)據(jù),然后控制執(zhí)行器的行為。但是由于系統(tǒng)運(yùn)行環(huán)境的復(fù)雜性,很多環(huán)境因素會(huì)導(dǎo)致系統(tǒng)進(jìn)入危險(xiǎn)狀態(tài),部分可能已經(jīng)在控制軟件設(shè)計(jì)的時(shí)候考慮到并加以處理。但是對(duì)軟件安全性的研究表明,不論使用多么完善的軟件開(kāi)發(fā)模型,總是不可能在軟件設(shè)計(jì)之初考慮到軟件需要面對(duì)的所有可能出現(xiàn)的危險(xiǎn)環(huán)境。因此,在軟件維護(hù)階段,能增量式地添加對(duì)環(huán)境因素的處理來(lái)提高整個(gè)系統(tǒng)的安全性而又不影響原有軟件在應(yīng)用方面的功能也是軟件安全性研究的一個(gè)重要方面。因此,軟件安全方面功能的開(kāi)發(fā)可以采用軟件開(kāi)發(fā)模型中的增量模型(Incremental Model),一步一步構(gòu)建軟件安全功能。如圖1所示是一個(gè)采用增量模型的安全性增強(qiáng)的實(shí)際系統(tǒng),由一個(gè)原始系統(tǒng)和一個(gè)停機(jī)系統(tǒng)組成[3]。停機(jī)系統(tǒng)是作為原有系統(tǒng)安全功能增強(qiáng)系統(tǒng)設(shè)計(jì),其輸入從原有系統(tǒng)上的傳感器獲得。原始系統(tǒng)根據(jù)其使用的傳感器的數(shù)據(jù)控制執(zhí)行器的行為,同時(shí)一個(gè)停機(jī)系統(tǒng)并行運(yùn)行,當(dāng)診斷發(fā)現(xiàn)需要停機(jī)時(shí),停機(jī)系統(tǒng)能迅速停止執(zhí)行器的運(yùn)行。這里,停機(jī)系統(tǒng)就是作為同原有系統(tǒng)完全獨(dú)立的一個(gè)增量設(shè)計(jì)然后同原有系統(tǒng)整合成一個(gè)新的系統(tǒng)。但是這類如停機(jī)系統(tǒng)的安全功能增強(qiáng)方法是以功能為中心的設(shè)計(jì)方法,增量同原有系統(tǒng)以及增量同增量之間都是完全獨(dú)立的,新增的系統(tǒng)資源也不能被不同功能模塊重復(fù)利用,這就帶來(lái)一些資源如傳感器等的極大浪費(fèi)。

      圖1 停機(jī)系統(tǒng)

      系統(tǒng)安全功能增強(qiáng)以新增的系統(tǒng)資源為中心可以很好地避免上述的問(wèn)題。本文新增的系統(tǒng)資源是指用于檢測(cè)軟件運(yùn)行的環(huán)境上下文的一系列傳感器,因此,設(shè)計(jì)環(huán)境因素應(yīng)該成為安全升級(jí)方法需要考慮的中心問(wèn)題,COP正是一種能準(zhǔn)確直觀地獲取環(huán)境因素,并且提供支撐機(jī)制動(dòng)態(tài)地根據(jù)環(huán)境上下文改變程序行為[4]的編程方法。COP允許程序員通過(guò)實(shí)現(xiàn)一種稱為layer的抽象程序行為集合及其內(nèi)部的局部方法(partial method)來(lái)實(shí)現(xiàn)程序行為的改變。在SCS系統(tǒng)中,對(duì)于不改變執(zhí)行器行為的程序行為切換,目前已經(jīng)存在的COP的支撐機(jī)制如ContextJ[5],EventCJ[6]等都可以實(shí)現(xiàn)。但是對(duì)于控制軟件安全性升級(jí),危險(xiǎn)狀態(tài)的觸發(fā)很有可能需要改變執(zhí)行器的行為,例如停止馬達(dá)的轉(zhuǎn)動(dòng),在危險(xiǎn)消除以后恢復(fù)執(zhí)行器的原有執(zhí)行狀態(tài)。從控制軟件的角度來(lái)看,執(zhí)行器是程序中的臨界資源,軟件的安全相關(guān)部分對(duì)其訪問(wèn)和修改會(huì)影響到應(yīng)用相關(guān)部分原來(lái)的運(yùn)行結(jié)果,而目前的COP支撐機(jī)制并沒(méi)有對(duì)程序行為切換過(guò)程中臨界資源的訪問(wèn)控制提供明確的支持。針對(duì)上面的問(wèn)題,對(duì)EventCJ做了一定的改進(jìn),對(duì)于程序行為切換過(guò)程所影響的臨界資源提供對(duì)其上下文保存和恢復(fù)的支持機(jī)制,并且在Lego NXT上實(shí)現(xiàn)了一個(gè)運(yùn)行支撐機(jī)制。

      2 相關(guān)工作

      軟件的上下文正成為軟件開(kāi)發(fā)要面對(duì)的一個(gè)非常重要的問(wèn)題,但是主流編程語(yǔ)言幾乎沒(méi)有提供準(zhǔn)確地描述上下文的能力,COP編程方法的出現(xiàn)很好地彌補(bǔ)了這一不足。COP中任何計(jì)算訪問(wèn)信息都被視為上下文信息。任何一種COP的方法都應(yīng)該包含以下一些屬性[7]:

      (1)行為變量(Behavioral variations):行為變量表示那些能替代或者改變軟件基本行為的行為集合。

      (2)行為層(Layers):行為層是那些相關(guān)的上下文依賴行為變量的集合。

      (3)動(dòng)態(tài)行為變量激活(Activation):COP編程方法中行為變量能在運(yùn)行時(shí)刻被激活從而影響系統(tǒng)的行為的機(jī)制。

      (4)上下文(Context):所有可計(jì)算的和可獲取的信息都可以成為行為變量所依賴的上下文。

      (5)作用域(Scoping):精確控制激活或注銷Layer的作用域,同一個(gè)行為變量在同一時(shí)刻可能在不同的作用域中分別被激活或注銷。

      COP語(yǔ)言的一個(gè)設(shè)計(jì)問(wèn)題就是對(duì)layer激活的控制,即什么時(shí)候、哪個(gè)Layer應(yīng)該在程序執(zhí)行過(guò)程的什么位置被激活或注銷的問(wèn)題。目前的研究提出主要有兩類方法,一種采用的是稱為塊結(jié)構(gòu)體[6](block-structured)的方法,如ContextJ[5]中的with表達(dá)式。這種方法的特點(diǎn)是上下文環(huán)境的改變和對(duì)應(yīng)行為的激活/注銷是在程序的同一處或者同一個(gè)線程內(nèi)進(jìn)行的,同時(shí)在退出表達(dá)式塊后即注銷了對(duì)應(yīng)的Layer。另一種方法是針對(duì)Appeltauer[5]等人指出的很多l(xiāng)ayer的激活/注銷是由外部事件所引發(fā),而這類行為的激活不適宜采用塊結(jié)構(gòu)體的方法來(lái)實(shí)現(xiàn)。為此Tetsuo等人設(shè)計(jì)了EventCJ[6],采用的是一種稱為事件驅(qū)動(dòng)的方法(Event-based Context Transition),這種方法可以分離上下文環(huán)境的變化檢測(cè)與行為的激活。

      目前大部分的COP語(yǔ)言采用的是塊結(jié)構(gòu)體的方法,這類方法多采用線程粒度的layer激活策略,雖然塊語(yǔ)句可以很方便地表示在一個(gè)具體的方法調(diào)用中何時(shí)激活layer,但是對(duì)于那些由程序執(zhí)行過(guò)程中隨時(shí)發(fā)生的外部事件(如進(jìn)入某座建筑或者傳感器數(shù)據(jù)發(fā)生變化)觸發(fā)的上下文變化并不適用。對(duì)于安全控制而言,危險(xiǎn)狀態(tài)是隨機(jī)發(fā)生并且對(duì)其的響應(yīng)處理需要非常及時(shí),即任何線程的執(zhí)行都有可能隨時(shí)被打斷。因此線程粒度的layer激活不適用于軟件的安全性升級(jí)。

      EventCJ基于事件和由事件觸發(fā)的layer切換規(guī)則來(lái)管理layer的激活。在EventCJ中,事件由類似AspectJ[8]切點(diǎn)的方式定義,layer切換規(guī)則由基于規(guī)則的描述語(yǔ)言定義。EventCJ中事件的發(fā)生可以立即觸發(fā)layer的切換發(fā)生,從而影響程序的執(zhí)行流程,因此對(duì)于軟件的安全控制是合適的,但是EventCJ的不足之處在于,首先其事件的描述能力較弱,它只能描述程序中變量或函數(shù)的當(dāng)前狀態(tài)[9],對(duì)于狀態(tài)的變化過(guò)程則無(wú)法直觀地表達(dá);其次EventCJ雖然提供了layer切換規(guī)則描述,但是對(duì)于切換時(shí)layer的信息沒(méi)有提供保存和恢復(fù)的功能,這對(duì)于前面提到的程序行為切換時(shí)臨界資源的訪問(wèn)控制不能提供明確的支持。

      3 安全升級(jí)模型

      上面提到EventCJ的事件存在的描述能力不足,為此在其基礎(chǔ)上進(jìn)行了改進(jìn),定義了事件(event)和條件(condition)的概念。

      事件:在監(jiān)測(cè)過(guò)程中瞬間發(fā)生的稱為事件。例如監(jiān)測(cè)過(guò)程中,光傳感器采集數(shù)據(jù)一次稱為事件。一個(gè)事件含有值屬性和時(shí)間屬性,其中值屬性是指該事件附屬的值,如光傳感器采集一次數(shù)據(jù)這個(gè)事件,該事件的值屬性就是采集到的數(shù)據(jù)值;時(shí)間屬性是指該事件發(fā)生的時(shí)間信息,如上例,采集數(shù)據(jù)發(fā)生的時(shí)間就是該事件的時(shí)間屬性。有了事件的概念,系統(tǒng)屏蔽了不同傳感器數(shù)據(jù)類型造成的差異性,統(tǒng)一對(duì)接收到的事件做分析處理。

      條件:條件代表在執(zhí)行的過(guò)程中能保持一段時(shí)間的信息,例如(x<1)是一個(gè)條件,因?yàn)檫@個(gè)狀態(tài)只要x不超過(guò)1就能一直保持。

      Condition和Event有如下的語(yǔ)法關(guān)系:

      事件start(c)當(dāng)條件c從false變?yōu)閠rue時(shí)產(chǎn)生,end(c)當(dāng)條件c從true變?yōu)閒alse時(shí)產(chǎn)生。有了條件和事件的概念,就可以結(jié)合傳感器獲取到的上下文信息,描述系統(tǒng)的安全狀態(tài),然后根據(jù)狀態(tài)轉(zhuǎn)換觸發(fā)的事件決定Layer的激活。例如有表示車輛和前方障礙物距離的變量d,小車當(dāng)前的狀態(tài)S={d>10},可以定義Layer激活事件E={end(S)}。通過(guò)使用Event和Condition可以精確地描述系統(tǒng)的當(dāng)前狀態(tài)以及狀態(tài)的變化過(guò)程。

      3.1 Layer定義

      Layer是上下文相關(guān)行為集合的抽象概念,每個(gè)layer都至少有一個(gè)partial method用來(lái)定義同具體的上下文相關(guān)聯(lián)的行為。同ContextJ一樣,本文在Layer中也定義一系列的partial methods。但是所不同的是,首先在Layer中可以定義activate/deactivate對(duì),分別表示layer被激活和注銷時(shí)執(zhí)行的動(dòng)作;其次還可以定義save/restore對(duì),表示對(duì)Layer現(xiàn)場(chǎng)信息的操作,下面會(huì)詳細(xì)介紹。

      3.2 Layer激活

      Layer激活表示程序的執(zhí)行流程轉(zhuǎn)換到被激活的layer的域中,Layer轉(zhuǎn)換的語(yǔ)法如下:

      Layer的切換默認(rèn)是不保存被切換的Layer的信息的,但是如前面所述,Layer的信息在某些情況下顯得非常重要。供前綴和后綴修飾save和restore。save前綴表示保存Operator左側(cè)的Layer的信息;restore后綴則表示激活Operator右側(cè)的Layer以前首先執(zhí)行信息恢復(fù)操作。

      下面是一個(gè)簡(jiǎn)單的例子說(shuō)明:

      這條轉(zhuǎn)換規(guī)則表示當(dāng)RiskEvent發(fā)生時(shí),如果NormalNavi已經(jīng)激活則注銷NormalNavi并且激活RiskNavi;否則僅激活RiskNavi。下面考慮當(dāng)危險(xiǎn)狀態(tài)撤銷后,系統(tǒng)回復(fù)正常狀態(tài)需要載入注銷前的一些信息如速度,方向等信息,上面的簡(jiǎn)單例子改寫(xiě)如下:

      NormalNavi切換到RiskNavi時(shí)保存Layer的信息;相對(duì)應(yīng)地,RiskNavi切換到NormalNavi時(shí)載入Layer信息。

      4 運(yùn)行支撐機(jī)制

      為了說(shuō)明安全升級(jí)模型的應(yīng)用在Lejos上實(shí)現(xiàn)了一個(gè)運(yùn)行支撐機(jī)制,結(jié)構(gòu)如圖2所示。Lejos是基于樂(lè)高機(jī)器人(Lego NXT)的一個(gè)Java程序開(kāi)發(fā)/運(yùn)行環(huán)境[8]。樂(lè)高機(jī)器人包括一個(gè)可編程的類似CPU的控制器,一系列傳感器和馬達(dá)等執(zhí)行器。Lego NXT有豐富的附加組件如傳感器支持,并且其擁有Lejos這樣一個(gè)成熟的Java開(kāi)發(fā)環(huán)境,可以較好地模擬現(xiàn)實(shí)中的SCS系統(tǒng)。運(yùn)行支撐機(jī)制包括了一個(gè)上下文描述語(yǔ)言及其解析器的實(shí)現(xiàn)和layer的定義激活策略。

      圖2 運(yùn)行支撐機(jī)制結(jié)構(gòu)圖

      context information collector是根據(jù)定義的上下文信息收集腳本生成的,并作為原有工程的一部分同原程序一起編譯生成新的可執(zhí)行文件。為此,實(shí)現(xiàn)了一個(gè)將上下文描述語(yǔ)言轉(zhuǎn)換為Java語(yǔ)言的編譯器原型。編譯器包裝成一個(gè)Eclipse plugin。系統(tǒng)維護(hù)人員在使用過(guò)程中,對(duì)一個(gè)包含規(guī)約描述腳本的Java Project,按照規(guī)約描述語(yǔ)言生成一個(gè)新的Project并且編譯鏈接替代原先的Project。Event Recognizer和Checker則是具體設(shè)備無(wú)關(guān)的組件,前者是對(duì)輸入的傳感器數(shù)據(jù)產(chǎn)生對(duì)應(yīng)的事件,后者則是對(duì)事件驗(yàn)證是否觸發(fā)layer的激活條件。

      4.1 上下文信息描述語(yǔ)言

      一個(gè)上下文信息可以用一個(gè)向量<J,S>表示,其中J表示在Java程序中對(duì)應(yīng)的表示變量,S表示對(duì)應(yīng)的傳感器。默認(rèn)一個(gè)傳感器一次采集的數(shù)據(jù)可以在Java中找到對(duì)應(yīng)的數(shù)據(jù)類型來(lái)表示,例如光傳感器采集的光強(qiáng)度值可以用一個(gè)Integer類型來(lái)表示。傳感器S包括屬性向量<N,P,G,S>,分別表示傳感器名稱,傳感器端口,獲取數(shù)據(jù)方法和屬性設(shè)置。屬性的設(shè)置一般包括采樣頻率、數(shù)據(jù)的過(guò)濾方式等。

      上下文信息收集作為一個(gè)單獨(dú)的線程運(yùn)行,可以根據(jù)指定的頻率采集傳感器信息,數(shù)據(jù)發(fā)送到事件處理器,事件處理器和信息收集線程通過(guò)Java提供的管道流PipeInput-Stream,PipeOutputStream通信。

      事件處理器需要隨時(shí)判定定義的事件是否發(fā)生。設(shè)想上下文信息收集線程不斷把監(jiān)測(cè)的傳感器數(shù)據(jù)或者監(jiān)控的函數(shù)的調(diào)用情況發(fā)送到事件處理器,一旦收到傳來(lái)的信息,處理器就需要驗(yàn)證。事件處理器在運(yùn)行過(guò)程中維護(hù)一張保存所有監(jiān)控信息當(dāng)前值的表,當(dāng)收到信息時(shí)就更新該表,然后驗(yàn)證所有定義的事件和條件的真值。

      因?yàn)闂l件是定義在監(jiān)控變量上的一個(gè)布爾表達(dá)式,所以可以直接根據(jù)存儲(chǔ)在表中的監(jiān)控變量的值來(lái)判斷條件是否成立。事件的評(píng)估則要復(fù)雜一些,考慮如下事件start(c),不僅需要知道條件c的當(dāng)前值,而且還需要知道c的更新以前的最后一個(gè)值。事件end(c)亦如此。傳感器數(shù)據(jù)的update事件的監(jiān)測(cè)可以通過(guò)按照一定周期返回值獲得,然而程序執(zhí)行信息,startM和endM則可以采用面向方面的編程方法(Aspect-Oriented Programming),通過(guò)設(shè)置切點(diǎn)的方法獲取。

      4.2 Layer激活

      設(shè)計(jì)了一個(gè)管理所有被激活的layer的優(yōu)先級(jí)隊(duì)列,并且該隊(duì)列是線程安全的。系統(tǒng)反饋線程在隊(duì)列為空時(shí)處于wait狀態(tài),當(dāng)Checker發(fā)出control activation信號(hào),附帶activation序號(hào),并且把一個(gè)layer放入激活隊(duì)列后,喚醒反饋線程。反饋線程的工作流程是,它首先從隊(duì)首取一個(gè)layer,讀取其padding標(biāo)志位,該標(biāo)志位表示這個(gè)layer是否需要在條件滿足期間保持對(duì)反饋線程的占有,不允許其他layer執(zhí)行反饋動(dòng)作。如果padding被置位,則反饋線程會(huì)等待直到Checker發(fā)出的新的activation信號(hào),否則反饋線程執(zhí)行完后取隊(duì)列的下一個(gè)layer執(zhí)行。線程執(zhí)行一個(gè)layer前,如果layer的onSave標(biāo)志被置位,則先調(diào)用save方法;執(zhí)行完成后,檢查onRestore標(biāo)志位,如果被置位則執(zhí)行restore方法,完成后退出。每個(gè)Layer都有一個(gè)用于保存Layer信息的表,在本文的實(shí)現(xiàn)中采用Java的HashMap實(shí)現(xiàn)。暴露兩個(gè)調(diào)用的接口:

      顧名思義,save是將一個(gè)object按照key指定的鍵名保存到hash表中,restore按照key從hash表中取出。系統(tǒng)會(huì)自動(dòng)為每一個(gè)Layer生成一個(gè)唯一的key,可以通過(guò)getKey方法獲得。

      5 實(shí)驗(yàn)系統(tǒng)

      在上面的運(yùn)行支撐機(jī)制上,實(shí)現(xiàn)了一個(gè)保持距離安全的實(shí)驗(yàn)系統(tǒng),給出了具體的規(guī)約腳本,用來(lái)展示本文的安全升級(jí)模型在具體系統(tǒng)中的使用。如圖3所示,在Lejos上有一個(gè)正確運(yùn)行的零件分揀系統(tǒng)SPS-Lejos。SPS-Lejos能夠根據(jù)顏色傳感器對(duì)放入的零件顏色的感知,移動(dòng)軌道上的零件回收盒到相應(yīng)位置,然后機(jī)械臂將零件彈入對(duì)應(yīng)顏色的回收盒中。

      圖3 SPS-Lejos系統(tǒng)

      假設(shè)SPS-Lejos對(duì)于系統(tǒng)的安全性方面有了新的要求如下:新添加一個(gè)用于測(cè)距的傳感器,用于控制移動(dòng)部件和軌道障礙物的距離,如果小于閾值則停止馬達(dá)轉(zhuǎn)動(dòng),當(dāng)障礙物消除后繼續(xù)轉(zhuǎn)動(dòng)馬達(dá)到預(yù)設(shè)角度。下面展示了本文模型對(duì)這一問(wèn)題的解決方案。

      5.1 上下文信息提取

      上下文信息定義腳本pedl.xml定義了兩個(gè)導(dǎo)出的初級(jí)事件:ev_previous_light,ev_current_light。兩者均對(duì)應(yīng)NXT中光傳感器:LightSensor的數(shù)據(jù)變化,對(duì)應(yīng)的是Decision Module中的變量:Controller.previous_light,Controller.current_ light。不同的是兩者獲取數(shù)據(jù)前傳感器的設(shè)置不同,下面表示了ev_current_light的定義。每次S2端口的LightSensor監(jiān)控?cái)?shù)據(jù)發(fā)生變化,就觸發(fā)事件ev_current_light。

      在這里,信息采集是作為一個(gè)單獨(dú)的線程一直處在運(yùn)行狀態(tài)的,必然會(huì)給系統(tǒng)帶來(lái)額外的開(kāi)銷,為了能動(dòng)態(tài)地控制負(fù)載,在setting標(biāo)簽中設(shè)置了period參數(shù)控制數(shù)據(jù)采集的時(shí)間間隔。

      5.2 驗(yàn)證安全條件

      安全條件是根據(jù)光傳感器的數(shù)據(jù)變化來(lái)描述的,當(dāng)前后兩個(gè)傳感器數(shù)值差超過(guò)一定值時(shí)表示傳感器同前方障礙物的距離達(dá)到安全距離閾值。傳感器的數(shù)值可以直接通過(guò)value操作符從事件中獲取,安全條件描述如下所示,定義了兩個(gè)監(jiān)控變量:current_light,previous_light,每次事件ev_current_light和ev_previous_light發(fā)生,驗(yàn)證器就會(huì)重新計(jì)算兩個(gè)監(jiān)控變量及其差值:

      5.3 Layer激活

      定義如下兩個(gè)事件:SafeToRisky,RiskyToSafe。它們的含義如前所述,在實(shí)際中的意義分別是障礙物距離從安全距離和危險(xiǎn)距離之間的相互變化的瞬間。

      當(dāng)SafeToRisky事件被觸發(fā),下面的轉(zhuǎn)換規(guī)則觸發(fā)。如果SafeControl處于激活狀態(tài),則會(huì)首先調(diào)用SafeControl中的restore代碼塊,一般執(zhí)行的是保存SafeControl中的現(xiàn)場(chǎng)信息,然后執(zhí)行deactivate代碼塊,一般斷開(kāi)對(duì)設(shè)備的占用,最后調(diào)用RiskControl中的activate代碼塊。

      RiskyToSafe事件被觸發(fā)時(shí)的執(zhí)行流程類似,它們的轉(zhuǎn)換規(guī)則如下所示:

      5.4 實(shí)驗(yàn)結(jié)果

      在安全升級(jí)前,當(dāng)軌道上有障礙物如圖3中的小人時(shí),移動(dòng)的零件回收盒會(huì)直接撞倒障礙物;對(duì)原有系統(tǒng)的代碼應(yīng)用開(kāi)發(fā)的Eclipse插件轉(zhuǎn)換得到了有COP運(yùn)行支撐機(jī)制的安全增強(qiáng)系統(tǒng)的新系統(tǒng),能夠在軌道出現(xiàn)障礙物時(shí),暫停分揀系統(tǒng)的工作,當(dāng)障礙物移除時(shí),零件收集盒能夠移動(dòng)至預(yù)先指定的位置而不會(huì)因?yàn)橹型颈淮驍喑鲥e(cuò),說(shuō)明了對(duì)于系統(tǒng)在layer激活前后上下文信息的保存是有效的,實(shí)驗(yàn)結(jié)果表明本文的安全規(guī)約對(duì)系統(tǒng)的安全性起到了預(yù)期的增強(qiáng)作用。通過(guò)多次實(shí)驗(yàn)發(fā)現(xiàn),起初從系統(tǒng)距離達(dá)到安全閾值到作出響應(yīng)有0.5~1.0 s的時(shí)延,由于本文采用的是Jvm下的多線程機(jī)制干預(yù)程序的正常運(yùn)行,將Layer激活部分的線程優(yōu)先級(jí)設(shè)為最高可以有效地降低因線程調(diào)度帶來(lái)的時(shí)延,提高系統(tǒng)的響應(yīng)性。

      6 總結(jié)

      本文所描述的基于COP的動(dòng)態(tài)軟件安全性升級(jí)框架,為軟件安全性的升級(jí)維護(hù)提供了一種可靠方便的方法。認(rèn)為軟件的后期維護(hù)同樣需要可靠的安全性升級(jí)模式,COP的思想較好地契合了增量式安全升級(jí)的要求,但是當(dāng)前的COP運(yùn)行支撐機(jī)制又不能很好地滿足需求,因此提出了本文前面描述的方法,可以很好地滿足后期維護(hù)動(dòng)態(tài)升級(jí)安全性的需求。在經(jīng)典的ECA(Event-Condition-Action)模型基礎(chǔ)上,改進(jìn)了Action部分在實(shí)際應(yīng)用中的局限性,提供了一個(gè)以Layer上下文保存為核心的運(yùn)行支撐機(jī)制并且實(shí)現(xiàn)了一個(gè)基于NXT的原型系統(tǒng),編寫(xiě)了安全規(guī)約描述腳本語(yǔ)言的編譯器及其Eclipse插件工具。

      目前本文的模型只適用于那些對(duì)超時(shí)不敏感執(zhí)行器任務(wù),即執(zhí)行器可以被打斷而不對(duì)最后的執(zhí)行效果造成影響,對(duì)于那些要求在某段時(shí)間內(nèi)完成的任務(wù)并不適用,未來(lái)將針對(duì)這一類執(zhí)行器完善本文的模型。

      [1]IsaksenU,BowenJ P,NissankeN.System andsoftware safety in critical systems,RUCS Technical Report RUCS/97/ TR/062/A[R].Berks,UK:Department of Computer Science,University of Reading,1997.

      [2]McDermid J.Software safety:where's the evidence[C]//Proceedings of the 6th Australian Workshop on Industrial Experience with Safety Critical Systems and Software.[S.l.]:Australian Computer Society,2001.

      [3]Kalinsky D.Architecture of safety-critical systems[J].Embedded Systems Programming,2005:14-25.

      [4]Hirschfeld R,Costanza P,Nierstrasz O.Context-oriented programming[J].Journal of Object Technology,2008,7:125-151.

      [5]Appeltauer M,Hirschfeld R,Haupt M,et al.ContextJ:contextoriented programming with Java[J].Computer Software,2011.

      [6]Kamina T,Aotani T,Masuhara H.EventCJ:a context-oriented programming language with declarative event-based context transition[C]//Proceedings of the 10th International Conference on Aspect-oriented Software Development.New York:ACM,2011:253-264.

      [7]Costanza P,Hirschfeld R.Language constructs for contextoriented programming:an overview of ContextL[C]//Dynamic Languages Symposium(DLS)'05.New York:ACM Press,2005.

      [8]Allan C.Adding trace matching with free variables to AspectJ[C]// OOPSLA'05.New York:ACM,2005.

      [9]Kamina T,Aotani T,Masuhara H.Designing event-based context transition in context-oriented programming[C]//COP'10. New York:ACM,2010.

      CHEN Zhiyong1,2,XU Feng1,2,YU Ping1,2

      1.State Key Lab for Novel Software Technology,Nanjing University,Nanjing 210046,China
      2.Department of Computer Science&Technology,Nanjing University,Nanjing 210046,China

      Control software is the core of safety-critical systems,its correctness is crucial to the system safety.However,as systems are facing increasingly complex context environment,which cannot be considered all,system safety is facing new challenges. So it is very important to enhance software safety via an environment-centered,incremental method when maintaining the software.Context-oriented programming is a programming technique which treats software context as a central notion.Current operating mechanisms for COP treat context explicitly,and it provides mechanisms to dynamically adapt behavior in reaction to changes in context.However,some behavior adaptions may interrupt the system actuator's running state,and affect system's results.There still don't have an effective approach to deal with such problems.According to existing COP language,it proposes a control software safety enhancement model based on software context saving and restoring,also,it provides the corresponding runtime support mechanism and programming tools.It shows a parts picking system safety enhancement case to satisfy the model's correctness.

      software safety;Context-Oriented Programming(COP);programming model

      控制軟件往往是安全攸關(guān)系統(tǒng)的核心,其正確性對(duì)系統(tǒng)安全起著至關(guān)重要的作用。然而由于系統(tǒng)面對(duì)的環(huán)境因素越來(lái)越復(fù)雜,軟件設(shè)計(jì)之初不可能考慮到所有可能面對(duì)的環(huán)境變化因素,系統(tǒng)的安全性面臨新的挑戰(zhàn)。因此在軟件維護(hù)階段,以環(huán)境變化為中心,增量式地增強(qiáng)軟件的安全性顯得非常重要。面向上下文編程方法(Context-Oriented Programming,COP)正是一種以軟件運(yùn)行上下文環(huán)境為中心的編程方法?,F(xiàn)有的支撐COP思想的運(yùn)行機(jī)制可以使得系統(tǒng)根據(jù)精確的上下文信息動(dòng)態(tài)地調(diào)整系統(tǒng)的行為,但是有些上下文引發(fā)的系統(tǒng)行為調(diào)整會(huì)導(dǎo)致系統(tǒng)執(zhí)行器的現(xiàn)有運(yùn)行被打斷,對(duì)于這類影響系統(tǒng)執(zhí)行器行為的上下文,現(xiàn)有的COP運(yùn)行機(jī)制還沒(méi)有提供有效處理方法。根據(jù)現(xiàn)有的COP方法,給出了一個(gè)基于軟件上下文保存與恢復(fù)的控制軟件安全性增強(qiáng)的編程模型,并在Lego NXT控制器上實(shí)現(xiàn)了相應(yīng)的運(yùn)行支撐和編程工具,通過(guò)一個(gè)產(chǎn)品分揀系統(tǒng)的安全性增強(qiáng)實(shí)例,初步驗(yàn)證了該編程模型的合理性。

      軟件安全性;面向上下文編程(COP);編程模型

      A

      TP391

      10.3778/j.issn.1002-8331.1208-0522

      CHEN Zhiyong,XU Feng,YU Ping.COP based approach to control software safety enhancement.Computer Engineering and Applications,2013,49(5):64-69.

      國(guó)家重點(diǎn)基礎(chǔ)研究發(fā)展規(guī)劃(973)(No.2009CB320702);國(guó)家自然科學(xué)基金(No.61021062,No.61073030)。

      陳智勇(1988—),男,碩士研究生,主要研究領(lǐng)域?yàn)榭尚庞?jì)算;徐鋒(1975—),男,博士,博士生導(dǎo)師,主要研究領(lǐng)域?yàn)榭尚庞?jì)算、系統(tǒng)安全、軟件可靠性技術(shù)等。E-mail:zychen.nju@gmail.com

      2012-09-07

      2012-10-16

      1002-8331(2013)05-0064-06

      CNKI出版日期:2012-10-31 http://www.cnki.net/kcms/detail/11.2127.TP.20121031.1000.020.html

      猜你喜歡
      執(zhí)行器線程安全性
      新染料可提高電動(dòng)汽車安全性
      某既有隔震建筑檢測(cè)與安全性鑒定
      測(cè)控技術(shù)(2018年12期)2018-11-25 09:37:50
      飛機(jī)裝配預(yù)連接緊固件自動(dòng)化安裝末端執(zhí)行器設(shè)計(jì)
      淺談linux多線程協(xié)作
      ApplePay橫空出世 安全性遭受質(zhì)疑 拿什么保護(hù)你,我的蘋果支付?
      考慮執(zhí)行器飽和的改進(jìn)無(wú)模型自適應(yīng)控制
      一類具有執(zhí)行器飽和的非線性系統(tǒng)抗飽和方法研究
      Imagination發(fā)布可實(shí)現(xiàn)下一代SoC安全性的OmniShield技術(shù)
      Linux線程實(shí)現(xiàn)技術(shù)研究
      鱼台县| 崇州市| 赣州市| 古丈县| 上饶市| 佳木斯市| 大足县| 普兰县| 海原县| 丰城市| 砀山县| 上高县| 司法| 玉田县| 金乡县| 安阳县| 丹东市| 彰武县| 吉首市| 临清市| 将乐县| 海口市| 锡林浩特市| 饶河县| 乌兰浩特市| 兴安县| 收藏| 辽中县| 郸城县| 和田县| 化隆| 蓝田县| 邵东县| 昭苏县| 乐山市| 灵山县| 汤阴县| 门头沟区| 邹平县| 上林县| 海门市|