隨想錄(安全關鍵系統和rtos)

【 聲明:版權所有,歡迎轉載,請勿用於商業用途。  聯繫信箱:feixiaoxing @163.com】

 

    safety critical system,國內一般翻譯成安全關鍵系統。安全,就是說系統必須能夠長時間穩定運行、並且不可以發生故障,同時任何時候都不能對人造成傷害(包括失效的情況下),比如飛機控制系統、電梯系統、汽車自動駕駛系統等等。但是,我們都知道,即使代碼測試了很長時間,還是存在失效的風險,所以工程師一般會採用多餘度的方法來解決安全的問題。而另外一個詞關鍵,簡單說軟件必須在規定的時間點,或者是規定的時間範圍內做特定的事情。同樣以汽車爲例,假設汽車發現了行人,如果沒有及時進行剎車,那麼勢必會造成十分嚴重的後果。

 

    如果說安全多是從硬件、系統的角度進行設計,那麼關鍵更多的是由軟件來完成的。實現這一方法的重要手段就是使用rtos。那麼是不是使用了rtos就是滿足實時性的關鍵系統了,也不是。

 

1、定時中斷

    滿足實時性的前提,就是在特定的時間點開始任務,並且在特定的時間範圍內完成任務。所以,這個時候,系統任務什麼時候喚醒、優先級如何設計都必須考慮到。越是關鍵的任務,優先級越高。然而,關鍵任務也不能太多。任務多了,實時性可能夠了,但是數據吞吐量就要大大折扣了。所以,一般實時的任務少而精,高吞吐量、非實時的任務可以邏輯稍微複雜一些。

 

2、中斷嵌套

    如果嵌入式硬件提供的中斷過多,那麼系統實時性分析起來就要考慮中斷等各種因素,這對整個系統的設計其實是不利的。很容易在代碼軟件中引入不可控的因素,能用定時輪詢的就不要用中斷了。在軟件開發過程中,也有必要統計一下關中斷、開中斷的最大時間。

 

3、搶佔

    一般的實時系統都會提供關搶佔、開搶佔的功能。但是搶佔一旦被關閉,那麼高優先級的任務就沒有辦法按時執行了。所以,必須少使用或者不使用這個功能,這樣整個流程纔是確定的、也是唯一的。即使使用,也要嚴格判斷關搶佔、開搶佔的最大時間是多少。

 

4、線程通信

    不同線程之間進行數據通信是少不了的。在讀書的時候,一種常用的方法就是pv操作(生產者-消費者),所謂的一個發消息、一個收消息。然而,因爲pv操作會頻繁使用mutex和semaphore,這會涉及到很多的任務切換,所以個人建議關鍵任務最好的方法還是用共享內存的方法來解決。

 

5、時間統計和約束

    任務的時間點都是有嚴格要求的,因此有必要在任務切換的時候統計一下,看看花了多長時間、什麼時候切換進來的、什麼時候切換出去的,總共花了多久時間,有沒有發生超時等等。

 

    網上有一個開源的匿名飛控代碼,大家可以參考一下。它將任務簡單分成了前後臺任務,關鍵任務都是在週期中斷內完成的,其他任務都是放在後臺完成,這也是一種處理方法。不管什麼樣的關鍵系統,它的行爲都必須要是在規定的時間開始、規定的時間結束、整個行爲和流程是確定和唯一的,只要做到這一點,就可以說這是一個滿足硬實時性的關鍵系統。

 

    安全關鍵,安全就是穩定、可靠、有保障,關鍵就是實時、唯一、確定。

 

PS:

    多餘度管理是安全關鍵系統另外一項重要的技術,也是需要好好掌握的。不過相對於分佈式系統,這部分多選用硬件來做,特別是cpld、fpga來完成的居多。常用的系統多以雙餘度、三餘度爲主,少部分系統甚至會採用四餘度。雙餘度意味着如果一套電路失效了,可以依靠另外一套電路緊急接管、處理,並且在短時間內慢慢讓系統停止運行、保證人能夠不受傷害。三餘度則不然,一套電路失敗了,依靠另外兩套板子仍能工作,也就是說三餘度可以接受一套電路完全失效。依次類推,四餘度的話,可以有兩次失敗機會。當然,子系統越多,邏輯也越複雜,成本也越高,這中間需要權衡。

 

 

發佈了558 篇原創文章 · 獲贊 3631 · 訪問量 475萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章