<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 計(jì)算機(jī)系統(tǒng)的容錯(cuò)技術(shù)方法

          計(jì)算機(jī)系統(tǒng)的容錯(cuò)技術(shù)方法

          作者: 時(shí)間:2010-11-17 來(lái)源:網(wǎng)絡(luò) 收藏

            1.3 信息

            信息是通過(guò)在數(shù)據(jù)中附加冗余的信息位來(lái)達(dá)到故障檢測(cè)和容錯(cuò)的目的。通常情況下,附加的信息位越多,其檢錯(cuò)糾錯(cuò)的能力就越強(qiáng),但是這同時(shí)也增加了復(fù)雜度和難度。信息冗余最常見(jiàn)的有檢錯(cuò)碼和糾錯(cuò)碼。檢錯(cuò)碼只能檢查出錯(cuò)誤的存在,不能改正錯(cuò)誤,而糾錯(cuò)碼能檢查出錯(cuò)誤并能糾正錯(cuò)誤。常用的檢錯(cuò)糾錯(cuò)碼有奇偶校驗(yàn)碼、海明碼、循環(huán)碼等。

            1.4 軟件

            由于硬件系統(tǒng)的故障主要來(lái)自生產(chǎn)和使用階段,因此容錯(cuò)可以通過(guò)相同部件的重復(fù),即相同資源的累積設(shè)置來(lái)實(shí)現(xiàn);而軟件故障主要來(lái)自說(shuō)明、設(shè)計(jì)和實(shí)現(xiàn)階段,因此程序的簡(jiǎn)單重復(fù)不能實(shí)現(xiàn)容錯(cuò),它只能防止硬件損壞或者環(huán)境干擾等引起的物理性故障,而不能防止軟件本身缺陷造成的故障。實(shí)現(xiàn)軟件容錯(cuò)的基本,是將若干個(gè)根據(jù)同一需求說(shuō)明編寫的不同程序(即多版本程序),在不同空間同時(shí)運(yùn)行,然后在每一個(gè)設(shè)置點(diǎn)通過(guò)表決或接收測(cè)試進(jìn)行表決。

            最基本的軟件容錯(cuò)技術(shù)是Algirdas Avizienis提出的基于靜態(tài)冗余的N版本編程和B. Randell提出的基于動(dòng)態(tài)冗余的恢復(fù)塊技術(shù)。

            1.4.1 軟件的相異性設(shè)計(jì)

            對(duì)于軟件容錯(cuò),考慮的重點(diǎn)是軟件設(shè)計(jì)的相異性和版本的獨(dú)立性。軟件的相異性設(shè)計(jì)是為了防止由于軟件發(fā)生共性故障而采用的一種設(shè)計(jì)。軟件設(shè)計(jì)時(shí)的共性越小,出現(xiàn)相同故障的概率也就越小,容錯(cuò)性能就越強(qiáng)。

            相異性設(shè)計(jì)要求,對(duì)于同一需求說(shuō)明的軟件功能,不同的研發(fā)設(shè)計(jì)人員及不同的研發(fā)設(shè)計(jì)小組對(duì)于這同一功能的軟件設(shè)計(jì)禁止談?wù)摵蜏贤?,在不同的環(huán)境空間中獨(dú)立進(jìn)行設(shè)計(jì);另外,還要求軟件設(shè)計(jì)的多樣性,如采取不同的設(shè)計(jì)方法、開(kāi)發(fā)工具、編程語(yǔ)言、編譯器、算法等。在航空航天、核電站控制以及鐵路交通的控制等對(duì)軟件的可靠性要求很高的場(chǎng)合,軟件的相異性設(shè)計(jì)可以有效提高軟件的容錯(cuò)能力和軟件的可靠性,對(duì)提高整個(gè)系統(tǒng)的可靠性有很重要的作用。

            1.4.2 軟件容錯(cuò)的基本結(jié)構(gòu)

            軟件容錯(cuò)的基本結(jié)構(gòu)有兩種:

            一種是NVP(NVersion Programming)結(jié)構(gòu)(多版本編程設(shè)計(jì)),這種結(jié)構(gòu)方法是Algirdas Avizienis于1977年在參考文獻(xiàn)[6]中提出的,它是一種靜態(tài)冗余方法,其基本的設(shè)計(jì)思想是用N個(gè)具有同一功能而采用不同編程方法的程序執(zhí)行一項(xiàng)運(yùn)算,其結(jié)果通過(guò)多數(shù)表決器輸出。NVP系統(tǒng)中的多版本是指根據(jù)同一需求說(shuō)明由不同的設(shè)計(jì)人員或由不同的設(shè)計(jì)方法、開(kāi)發(fā)工具、編程語(yǔ)言等開(kāi)發(fā)的具有同一功能的軟件版本,即所謂的版本設(shè)計(jì)的相異性。這種容錯(cuò)結(jié)構(gòu)方法有效避免了由于軟件共性故障所造成的系統(tǒng)出錯(cuò),提高了軟件的可靠性。NNP結(jié)構(gòu)如圖2所示。


          圖2 NVP結(jié)構(gòu)

            另一種是RB(Recovery Block,恢復(fù)快結(jié)構(gòu)),它是Randell于1975年在參考文獻(xiàn)[7]中提出的一種的軟件容錯(cuò)技術(shù),它是一種動(dòng)態(tài)冗余方法。在RB結(jié)構(gòu)中,有主程序塊和一些備用程序塊構(gòu),這里的主程序塊和備用程序塊采用不同編程方法但具有相同的功能。每個(gè)主程序塊都可以用一個(gè)根據(jù)同一需求說(shuō)明設(shè)計(jì)的備用程序塊替換。首先運(yùn)行主程序塊,然后進(jìn)行接收測(cè)試,如果測(cè)試通過(guò)則將結(jié)果輸出給后續(xù)程序,否則調(diào)用第一個(gè)備用塊,依次類推,在N個(gè)備用程序塊替換完后仍沒(méi)有通過(guò)測(cè)試,則要進(jìn)行故障處理。RB結(jié)構(gòu)如圖3所示。


          圖3 RB結(jié)構(gòu)

            其他的軟件容錯(cuò)結(jié)構(gòu)都是基于這兩個(gè)基本結(jié)構(gòu)而來(lái)的,例如NVPP(多版本階段程序設(shè)計(jì)),它要求程序的版本運(yùn)行分多個(gè)階段進(jìn)行,而且每個(gè)階段運(yùn)行的程序都包括適當(dāng)?shù)陌姹緮?shù)量。運(yùn)行一個(gè)階段后,要通過(guò)表決程序來(lái)對(duì)這一階段運(yùn)行的程序進(jìn)行表決,如果得到正確的結(jié)果就結(jié)束運(yùn)行,否則繼續(xù)下一個(gè)階段版本的運(yùn)行,直到得出正確的結(jié)果。

            NVP和RB這兩種基本結(jié)構(gòu)在軟件容錯(cuò)中用得最廣泛,占據(jù)很重要的地位。這里要注意的是,驗(yàn)證表決程序的可靠性以及表決結(jié)果的正確性是個(gè)難點(diǎn),因?yàn)槿绻頉Q程序本身就是錯(cuò)誤的,那表決的結(jié)果就不可信了,所以要用正確性證明技術(shù)來(lái)保證表決程序的正確。

            2 結(jié)論

            本文詳細(xì)介紹了計(jì)算機(jī)容錯(cuò)的各種方法,包括硬件容錯(cuò)、時(shí)間容錯(cuò)、信息容錯(cuò)以及軟件容錯(cuò)等,這些容錯(cuò)方法在其他工業(yè)場(chǎng)合有廣泛的應(yīng)用,現(xiàn)在很多工業(yè)系統(tǒng)都是采用基于三模冗余的容錯(cuò)技術(shù)來(lái)提高系統(tǒng)的可靠性。對(duì)于其他要求可靠性高的場(chǎng)合,計(jì)算機(jī)容錯(cuò)技術(shù)的方法有著良好的應(yīng)用前景。


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();