新聞中心
首先來些基礎(chǔ)的?!昂闷嫣枴被鹦擒囀褂玫氖呛藙恿?,它能持續(xù)的受控的方式提供給火星車能量。這個能量源同時還要負責(zé)平時對火星車進行加熱——這是在火星表面極端天氣環(huán)境下對火星車的必要保障。

成都創(chuàng)新互聯(lián)主營喀左網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件開發(fā),喀左h5成都微信小程序搭建,喀左網(wǎng)站營銷推廣歡迎喀左等地區(qū)企業(yè)咨詢
“好 奇號”基本上是自主控制的。它發(fā)送一條信息可能要用幾分鐘到幾小時的時間,你只能在火星上一天里的有限時間段內(nèi)給它發(fā)送信息?!昂闷嫣枴弊约嚎?以和地球通話,但這條線路速度很慢。它也可以通過圍繞火星飛行的人造衛(wèi)星進行通信,把衛(wèi)星作為上行線路中繼,這樣更快。這種情況表明:火星車必須要能自主 行動。我們不能讓一個人坐在地球上的某個椅子里拿著操縱桿來指導(dǎo)它。
“好奇號”火星車上安裝有兩個完全一樣的計算機。我們注意到美國宇航 局正是按照Joe Armstrong(Erlang編程語言的創(chuàng)造人)的話做的:“要想獲得一個可信賴的系統(tǒng),你需要兩臺計算機”。一個一直處于休眠狀態(tài),一旦另一個由于 異常情況死機,它可以隨時受命接管系統(tǒng)。這樣的做法在Erlang語言系統(tǒng)里、在OpenBSD PF防火墻等其它軟件里都是很典型的接管方案?!昂闷嫣枴鄙鲜褂玫挠嬎銠C是BAE systems RAD750。處理器是PowerPC ISA,速度非常的快。200百萬赫茲, 150或250納米 的制造工藝,它工作時對能允許的溫度范圍的表現(xiàn)非常優(yōu)秀。它是經(jīng)過抗輻射加固的,能經(jīng)受相當(dāng)強的輻射侵襲。內(nèi)存也是抗輻射的?!昂闷嫣枴鄙系挠嬎銠C里的每 個硬件都不是隨隨便便一個東西能勝任的。
“好奇號”的操作系統(tǒng)使用的是VxWorks。它屬于標準的的微內(nèi)核系統(tǒng)。保守的估計,它的內(nèi)核代碼應(yīng)該少于1萬行,而且經(jīng)過了嚴格的測試。也就是說,這個內(nèi)核接近零bug。它的一個主要特征就是隔離?;鹦擒嚿系母鱾€模塊都是相互隔離的。有些子系統(tǒng)對火星車的生命起著至關(guān)重要的作用,而另外一些只是用于科學(xué)觀察的設(shè)備。所以,我們可以肯定這樣一個事實,“好奇號”上的250萬行代碼中,只有一部分代碼是深度測試杜絕了bug的。車上的有些程序并不是生命必須的。
美國宇航局使用了各種辦法來確保代碼質(zhì)量。例如,遞歸調(diào)用是要求避免的,這是這因為C語言編譯器不能保證遞歸堆棧不被撐破。循環(huán)要確保有終止點,這 通過一個靜態(tài)分析器來發(fā)現(xiàn)這些問題。所有的內(nèi)存使用都幾乎是靜態(tài)分配的,這樣避免了突然的內(nèi)存收集產(chǎn)生的混亂和不可預(yù)知的性能問題。我們還可以發(fā)現(xiàn)訊息傳遞(Message Passing)作為子系統(tǒng)間的消息傳遞方式在火星車是被當(dāng)作了***。不存在互斥,不存在軟件事務(wù)性內(nèi)存。同樣,隔離概念也是編碼指導(dǎo)原則上的一部分。通過對內(nèi)存進行保護和數(shù)據(jù)的單一歸屬關(guān)系,子系統(tǒng)之間就很難影響對方。Erlang程序員都很習(xí)慣這樣的做法。
“探路者”號火星車
當(dāng)年的“探路者”號火星車的架構(gòu)設(shè)計事實上也跟Erlang語言系統(tǒng)的理念相似。它有用于傳遞消息的“組件”。組件只在接收消息時才等待,發(fā)送消息的都是無返回值的函數(shù)。它們接受消息采用的是單事件循環(huán),這跟Erlang語言中的 gen_server 工作方式很相似。不同的模塊間通過某種協(xié)議傳遞消息進行通信,你可以訪問其它模塊使用的內(nèi)存,但按照JPL編碼指導(dǎo)原則,這種做法是要避免的。這跟 Erlang語言有所不同,Erlang語言完全禁止這樣操作。火星探測漫游者(勇氣號和機遇號)擁有更多的組件,但軟件基礎(chǔ)上相同的。“好奇號”也不例 外。它本質(zhì)上是在老的軟件上改造出來的。系統(tǒng)中的線程數(shù)有大幾百個,這***的和一個類似的如此規(guī)模的Erlang語言系統(tǒng)中的線程數(shù)相匹配。
機遇號火星車
在 “好奇號”上,他們增加了“組件”的概念,組件由一組組的模塊構(gòu)成,以此用來控制復(fù)雜度。因為有兩臺計算機做冗余,很多子系統(tǒng)為了系統(tǒng)的穩(wěn)固也是 冗余的,組件的概念也是處理這些情況需要的。有趣的是,Erlang語言的設(shè)計者也看到了這一點,只是在Erlang里被叫做Applictions。
對 函數(shù)恒量的校驗。輸入?yún)?shù)必須要滿足前置條件。后置條件約束返回值。各種恒量必須滿足這些條件。Erlang程序員熟悉這種做法。有趣的是,“好 奇號”上的每個函數(shù)的長度限制在60行以內(nèi),這樣它們可以被打印到單張紙上。Erlang程序員也喜歡簡短的函數(shù)體,但沒有這種限制。但都是為了讓代碼簡 單。讓代碼易于理解。
勇氣號火星車
還有另外一個有趣的事情,在過去,有個火星車發(fā)生過優(yōu)先級顛倒的問題。他們在調(diào)試控制臺里向火星車注入了一段糾正信息挽救了火星車。這也跟 Erlang語言系統(tǒng)里經(jīng)常使用的方法相似。我們可以對運行中的系統(tǒng)進行修改,隨時對系統(tǒng)進行升級和改造。我們對運行中的系統(tǒng)進行監(jiān)控,確保它的運行狀態(tài) 跟我們期望的一樣。這種對系統(tǒng)進行熱修復(fù)的能力非常的有用。當(dāng)然,這種開發(fā)是配合了大量的跟蹤和分析——例如使用Erlang QuickCheck/PropEr,錯誤記錄以及跟蹤工具。
很明顯,Erlang語言系統(tǒng)的很多特征都跟火星車上的系統(tǒng)吻合。但我并不認 為這是巧合。各種軟件有自己不同的屬性特征——火星車屬于硬實時 (hard realtime)環(huán)境,Erlang語言系統(tǒng)是軟實時環(huán)境。但大體上,寫出健壯系統(tǒng)的條件是你需要隔離系統(tǒng)中的各個部分。這值得思考,看起來這種方式好用。這些對于高可靠性系統(tǒng)來說都是的重要的特征。也許比靜態(tài)類型校驗還要重要。
總 結(jié)來看,對于火星車上的所有代碼,我們也許并不必保障所有代碼都達到***級別的安全。我們可以把不同的模塊進行隔離測試,對它們實施不同等級的正 確性檢查。換句話說,我可以通過精心的設(shè)計來控制錯誤和管理風(fēng)險。因此,對于某些模塊,我們可以承認它們可能存在某些錯誤。如果上行通信中繼壞了,我們可 以重啟機器,這樣來恢復(fù)它。如果這樣不行,我們還有一個冗余的上行通信通道直接和地球通信,只是速度慢些——但可以替代另外一個通道。這種架構(gòu)意味著只有 多個組件同時失敗時才能導(dǎo)致任務(wù)無法完成。模塊出錯,重啟,恢復(fù),然后就可繼續(xù)拍攝圖片。這種設(shè)計的基本原理是非??煽康模苍S需要根據(jù)情況做一些小的調(diào) 整。畢竟它是經(jīng)過了另外3個火星車的嚴格考驗上發(fā)展出來的。
跟Erlang語言理念不相同的部分跟所對應(yīng)的硬實時和軟實時環(huán)境有關(guān)。在 Erlang語言系統(tǒng)中我們可以暫緩服務(wù)。雖然不好,但可以這么干。在火 星車上,這會成為災(zāi)難。在飛行控制系統(tǒng)中尤其是這樣。如果火箭啟動晚了,你的麻煩就大了。這就是為什么“好奇號”上要使用靜態(tài)分配內(nèi)存和固定堆棧大小,而 不是使用動態(tài)分配的原因。這同樣也是他們不喜歡遞歸的原因。而在Erlang語言系統(tǒng)里,我們不鼓勵通過手動管理內(nèi)存。我們對tail調(diào)用做了革命性的優(yōu) 化,所以我們可以放心的使用它。
長話短說——“好奇號”火星車的軟件在某些特征上跟Erlang語言系統(tǒng)在架構(gòu)上非常是相似。這些特征是一個健壯的軟件系統(tǒng)的基本特征嗎?
本文題目:推測“好奇號”火星車和它搭載的軟件
網(wǎng)頁URL:http://www.dlmjj.cn/article/cceseco.html


咨詢
建站咨詢
