當前位置: 華文星空 > 知識

如何寫出軍工級的程式碼?

2016-07-06知識

看到有人提到友商的系統了,作為競爭對手我也來說兩句:

軍工(和航天)程式碼沒那麽神秘,就是需要準守一些特定的規範,規範就是

@高天

的回答裏寫的那些。

簡單點說,就是整個作業系統的執行必須是確定的:

不能有動態記憶體分配,不能有動態任務建立、刪除……總之一切不確定性的東西都不允許有;

很多人都只有x86的CPU有個超執行緒的概念吧,一個核上跑兩個執行緒,但超執行緒會影響兩個執行緒執行的確定性,在軍工航天領域,超執行緒必須關掉;

現代作業系統都支持虛擬記憶體吧,但缺頁中斷的執行時間是不確定的,所以必須關掉虛擬記憶體,必要的時候關掉頁表也是可以的。

程式碼的確定性可以大概理解為:如果天上有個衛星,上面的OS某個任務跑了10秒,地面上有一個一模一樣硬件配置的電腦同樣的OS,也跑了10秒,在輸入狀態一致的情況下,兩個電腦裏的東西應該是一模一樣的。

軍工航天類的程式碼要求的規範和限制比較多,比如必須符合某某規範才能在飛行器上使用(具體的看這個回答:

如何評價中航電腦所研制的天脈作業系統? - 嵌入式系統

)等等。

要求多並不意味著程式碼質素一定很高 ,因為要求多、限制多,程式碼往往看起來比較奇怪。而且由於歷史原因,如果一個程式碼能工作,輕易是不允許改的, 改動程式碼要經過的審查流程往往比改程式碼麻煩多了 。比如現在個人電子市場早就進入64位元時代了,但軍工航天領域很多還是32位元的,這些程式碼要是放到64位元系統裏肯定掛,但因為軍工航天不需要這些,所以就不能改,也不需要改。

不要對軍工程式碼有什麽神秘感,其實一點都不神秘,就是要求多,測試嚴,審查多。在規範允許的範圍內,程式碼寫的再爛也沒關系。

另外,由於code review是要花錢的,所以程式碼一般都不長,否則對於OS廠商來說,code review的成本就太高了(註:第三方公司負責review,一行大概幾美元)。

美國軍工行業用的Integrity是GreenHills的,這個公司要求所有寫程式碼的人必須是美國公民或者持美國綠卡的人,公司不大,全靠國防部養著,我估計知乎上沒有人能說清楚具體的細節。

國內大部份用的是VxWorks的改版,說是改版,可以理解為合理的學習、復制等等,安全性倒不是問題,因為能拿到的東西都是有源碼的,細節就不展開說了。

如果題主對軍工程式碼有興趣,可以先研究一下ARINC的規範,這東西跟軍工上用的差不太多,不過要找到能支持這種規範的開發環境就很麻煩了,有興趣題主可以自己構造一個,難倒是不難,就是用起來很不舒服。