亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        登月計劃中的計算機工作

        2019-08-01 02:10:12編譯喬琦
        世界科學 2019年7期
        關鍵詞:程序計算機

        編譯 喬琦

        50年前,3名宇航員帶著2臺數(shù)字計算機奔赴月球。幾天后,5億地球人在電視上看到了尼爾·阿姆斯特朗和巴茲·奧爾德林爬出阿波羅11號登月艙并且在月球靜海的粉塵狀土壤上留下第一個人類腳?。ㄖ噶钆擇{駛員邁克爾·柯林斯則操控指令艙留在了月球軌道上)的模糊畫面。隨后,這3名宇航員立刻成了全球知名的名人。而輔助引導、操控飛船的計算機卻只在技術愛好者的小圈子里贏得了一些名聲。即便如此,阿姆斯特朗為人類邁出的一小步也同樣標志著數(shù)字計算機技術的一次巨大飛躍。

        身處21世紀這個一切都由計算機控制的時代回望往事,我們很難體會到美國宇航局(NASA)在阿波羅飛船上安裝計算機這一決定究竟有多么大膽。當時的計算機體積龐大、容易出錯、特別耗電,但在飛船上,阿波羅導航計算機必須安裝在比隨身行李還小的空間之內,使用的能源不能超過一盞電燈。另外,它還必須100%可靠,一次小小的故障就會置宇航員于萬劫不復的境地。

        盡管阿波羅導航計算機的名頭沒有阿波羅號的宇航員響亮,人們還是完整記錄了它在阿波羅計劃中扮演的角色。至少有5本書講述了它的故事,網(wǎng)絡上的相關信息更多。在所有這些可以查到的資料中,歷史文獻寶庫讓我們能夠非常直接且近距離了解這臺新奇計算機的運作機制。技術愛好者自發(fā)研究了極少量流傳至今的打印輸出文件,把某幾個版本的阿波羅導航計算機軟件轉錄出來并發(fā)布在網(wǎng)絡上。因此,你可以在網(wǎng)上通讀這些指引阿波羅11號登陸月球的程序,甚至可以在一臺“虛擬阿波羅導航計算機”上運行那些程序。

        毫無疑問,這些用深奧且過時的編程語言寫就的冗長機器指令閱讀起來并不容易,哪怕是理解很小一部分程序片段也是異常艱巨的任務。而完成這些任務的回報則是能親眼看到當時的程序員如何解決一些棘手問題,哪怕是今時今日,這些問題也仍舊是軟件工程的巨大挑戰(zhàn)。此外,雖然這些文件本身技術性很強,但其能激起普羅大眾強烈的共鳴,讓我們一窺當時這個高關注度、高風險、高壓力工程項目的文化背景。

        導航、制導和操控

        阿波羅導航計算機(Apollo Guidance Computer)軟件的打印輸出文件堆積起來,形成了一座5.5英尺(約1.68米)高的“文件塔”,這個高度和瑪格麗特·漢密爾頓(Margaret H. Hamilton)的身高相當。漢密爾頓在1963年以程序員的身份加入了登月項目,數(shù)年后成了軟件工程部主任。每沓打印文件都對應著某項任務中的指令艙或登月艙程序。這張照片是1969年阿波羅11號啟航之前在麻省理工學院儀器實驗室拍攝的

        每一次阿波羅登月任務都會攜帶兩臺阿波羅導航計算機,一臺安在指令艙里,另一臺安在登月艙里。兩臺計算機的硬件幾乎一模一樣,但軟件賦予了它們不同功能。

        為了說明計算機在登月任務中開展的工作,我們以登月艙上的阿波羅導航計算機在任務關鍵階段(通過自主動力登陸月球表面)的工作負荷為例。第一個任務就是導航:測算飛船的位置、速度和方向,然后繪制出前往目標登陸點的飛船運行軌跡。其中涉及的數(shù)據(jù)由內部制導系統(tǒng)中的陀螺儀和加速計測算得到,在登陸階段后期,還會用雷達測高計計算從月球表面返回的信號作為補充。

        計算出飛船運行軌跡之后,阿波羅導航計算機必須轉動火箭發(fā)動機的噴嘴,讓登月艙始終保持在既定路線上。與此同時,計算機必須不斷調整推力大小,以便登月艙維持適宜的登陸速度。這些制導和操控任務難度非常大,因為登月艙的質量和質心隨著燃料的消耗在不斷變化,也因為處于火箭廢氣管頂端的飛船從本質上說就不穩(wěn)定,就像一把直立在你手掌上的笤帚一樣。

        除了這些導航、制導以及操控的主要任務之外,阿波羅導航計算機還必須時刻更新駕駛員座艙內的設備運行狀況,回應宇航員發(fā)出的指令,管理與地球指揮中心之間的數(shù)據(jù)交流。這種多任務管理機制在如今的計算機系統(tǒng)中已經(jīng)司空見慣,你手邊的筆記本電腦就可以同時運行幾十個程序。然而,在20世紀60年代初,創(chuàng)造這種交互式“實時”計算環(huán)境的工具和技術都處在非常原始的階段。

        芯片與磁芯

        阿波羅導航計算機由慣性制導先驅查爾斯·斯塔克·德雷珀(Charles Stark Draper)創(chuàng)辦的麻省理工學院儀器實驗室設計和生產(chǎn)。雖然德雷珀的這間實驗室也設計過彈道導彈上使用的數(shù)字化電子設備,但阿波羅導航計算機是該實驗室出產(chǎn)的第一臺完全可編程數(shù)字計算機。

        對于硬件工程師來說,困難之處在于要在非常有限的重量、體積和能耗配額下建造出能達到預期要求的計算機。為此,他們采用了一項新興技術:硅集成電路。每次登月任務中的計算機都包含大約2 800塊硅芯片,而每塊芯片上又有6根晶體管。

        至于記憶系統(tǒng),設計師則使用了磁芯技術。磁芯就是一些微型鐵氧體螺旋管,能且只能在一個方向上磁化,這樣就可以代表二進制中的1或0。大部分要儲存的信息都是在單次任務期間不會發(fā)生任何變化的程序,因此,許多磁芯都是按照只讀模式繞線的,存儲的內容在建造計算機的時候就固定下來。

        邏輯回路和記憶核心都封存在設備艙內的金屬箱中。宇航員通過一件叫作“顯示鍵盤”(DSKY )的設備與計算機互動。顯示鍵盤看上去有點像是微波爐上的操控面板,上面有數(shù)字小鍵盤、幾個其他功能的按鈕以及一塊足夠顯示21位明亮十進制綠色數(shù)字的空間。

        壓縮成15位

        航天器計算機早期設計中的一項關鍵決定就是設定構成一個“字”的位數(shù)(也即比特數(shù))。單個字的位數(shù)越長,所能包含的程序指令就越多,能達到的數(shù)學精度就越高,但體積、重量和能耗也會隨之增加。阿波羅導航計算機的設計者選擇了16位的長度,其中一位用于校驗差錯,因此,只有15位用于表達數(shù)據(jù)、地址或指令(現(xiàn)代計算機都是32位或64位的)。

        一個15位的字可以容納215=32 768種不同比特模式。就數(shù)字數(shù)據(jù)來說,阿波羅導航計算機演繹這些模式的方式通常就是±16 383這個范圍的數(shù)字。將兩個字組合在一起就能產(chǎn)生范圍在±268 435 455之內的雙精度數(shù)字。

        計算機中的字還可以表示程序中的指令。在阿波羅導航計算機的原始計劃中,指令字中的前三位指定為“操作碼”或命令碼,剩下的12位則記錄計算機內存的地址。這個地址可能指向了計算所需的數(shù)據(jù),也可能指向了執(zhí)行下一個指令的位置,具體如何取決于前后程序。

        操作碼只分配到了3位,意味著只有8種不同指令(也就是從000到111的8種二進制模式)。而12位的地址則將內存中的數(shù)字限制在了4 096(212)以下。隨著阿波羅計劃的深入,這些限制帶來了諸多不便,而工程師也找到了方法規(guī)避它們。他們把內存組成若干“庫”:每個指定位置都存放在對應庫里,而獨立運行的寄存器則會顯示哪個庫處于激活狀態(tài)。設計者還額外增加了幾個位數(shù)把操作碼的容量從8提升到了34。

        登上月球的阿波羅導航計算機用于儲存程序的只讀內存有36 864個字,而用于計算的讀寫內存則有2 048個字。全部加在一起的總數(shù)據(jù)容量差不多相當于70 000字節(jié)?,F(xiàn)代筆記本電腦的內存要比它高10萬倍。速度方面,阿波羅導航計算機每秒可執(zhí)行4萬條指令,而現(xiàn)代筆記本電腦可以執(zhí)行100億條。

        軟件基礎架構

        只保留必要元素的框架、少到可憐的內存、簡化到不能再簡化的指令集給設計阿波羅導航計算機軟件的程序員出了一道難題。此外,麻省理工學院的這個軟件工程團隊要開發(fā)的不僅是阿波羅任務期間可以運行的程序,還有大量用于支持開發(fā)過程的軟件基礎架構。

        一件至關重要的工具就是匯編程序,它可以將符號指令(例如,用AD表示加法,用TC表示傳送控制)轉化成阿波羅導航計算機硬件可以識別的二進制編碼。這套匯編程序的主要開發(fā)者是工程師休·布萊爾-史密斯(Hugh Blair-Smith),他在那個時代的大型計算機編程方面擁有深厚背景知識。匯編程序并不直接在阿波羅導航計算機上運行,而是在大型主機上運行。所有飛行控制程序都會在飛船發(fā)射升空前就完成匯編并存入只讀內存,這樣就沒必要在飛船上安裝解析匯編程序的機器。

        阿波羅導航計算機的數(shù)字仿真程序也是在一臺主機上運行的,這樣就可以在硬件準備就緒之前測試相關程序。隨后,一臺“混合”模擬器會將真正的阿波羅導航計算機和顯示鍵盤組合到一起,一起整合進來的還有飛船剩余部分及其相關環(huán)境的模擬模型和數(shù)字模型。

        另一項工具則是高級編程語言的解譯器,由J·哈爾康姆·拉寧(J. Halcombe Laning)設計,主要撰寫人則是查爾斯·芒茨(Charles A. Muntz),兩人都是麻省理工學院團隊的成員。解譯后的語言就能讓計算機有能力處理基本算術之外的數(shù)學概念,比如矩陣(在表達控制律上很有用)以及三角函數(shù)(在導航中必不可少)。實現(xiàn)這些便利功能的代價就是計算機運行速度會放慢到原來的1/10。不過,解譯指令和匯編語言可以以任意比例自由混合,這樣一來,程序員就可以在確有必要的時候犧牲運行速度,換取更多數(shù)學功能。

        一個名叫“執(zhí)行者”的阿波羅導航計算機程序充當了微型操作系統(tǒng)的作用。這個程序也是由拉寧設計,其保持有一張待執(zhí)行程序的清單,清單中的程序則根據(jù)它們的優(yōu)先級分類。計算機還擁有一個中斷系統(tǒng),以應對外部事件。計算機還允許一些緊急小任務“竊取”小部分內存,而完全不會影響其他程序。這個裝置的作用是為來自慣性制導系統(tǒng)和雷達的脈沖流計數(shù)。

        在代碼迷宮之中

        我第一次閱讀阿波羅導航計算機程序時,發(fā)現(xiàn)它們很神秘。這些程序并不只是難懂的簡潔操作碼,更大的挑戰(zhàn)在于必須學習如何在眾多冗余程序和無關程序中遵循主程序的功能。像傳送控制和保存數(shù)據(jù)這樣的指令都會產(chǎn)生程序分支。一旦遇到這類分支程序,指令序列路徑就會突然跳到其他位置,并且未必會再度返回原來的位置。追蹤指令路徑的過程就像是在玩滑梯和梯子棋一樣。

        阿波羅導航計算機匯編語言的學習強度很高,但難度并不算太大,原因很簡單:它包含的操作碼太少了。然而,要想真正弄懂其中的程序,你必須掌握麻省理工學院團隊為最大程度利用這臺小機器而設計的約定和協(xié)議。程序打印稿上的一些源程序片段展示了這些不成文規(guī)則的幾個例子。

        我對調用子程序(從程序中的不同位置調用一段代碼,然后再把控制交還給當前位置)的這種設計尤為感到困惑。在阿波羅導航計算機中,調用子程序的操作碼是TC,它不僅可以把控制傳送到子程序的地址上,還可以根據(jù)TC指令將相關命令的地址保存到叫作Q寄存器的地方。子程序完成自己的工作之后,只要執(zhí)行TC Q指令就可以回到主程序。這個流程我理解得還比較透徹。然而,事實證明子程序竟然可以自行更改Q寄存器中的內容,從而改變自己的返程目的地。阿波羅導航計算機中的許多程序都會充分利用這個便利條件。在打印稿上列出的源程序片段中,某個子程序擁有3個返回地址,分別對應某次查詢的3種可能回應。在我弄明白這些規(guī)則之前,這些源代碼簡直無法理解。

        如今的軟件工程規(guī)范不提倡使用這種復雜且容易誤解的程序,因為它們會讓代碼變得難以理解、難以維護。不過,符合現(xiàn)代標準的軟件是塞不進70 000字節(jié)的內存里。

        旁注

        與神秘、難懂的操作碼和地址相比,阿波羅導航計算機軟件的另一部分則要好理解得多。代碼旁邊的注釋清晰明了,甚至有些好玩。這些旁注是程序員在開發(fā)軟件時加進去的,完全是為了方便人類理解,對機器沒有任何幫助。

        這些注釋中的大多數(shù)都直接解釋了相關程序的功能,比如“清除第7位和第14位”“查看上一個運行周期中高度是否小于35 000英尺”。一些語氣嚴厲的警告性注釋則標記出了嚴禁修改的代碼。有一行代碼被標記為“別動”,而某個常數(shù)表程序的標注就是更加專橫的“禁止觸摸”(Noli Se Tangere,源自圣經(jīng)的拉丁文)。每個程序旁邊的注釋風格都不相同,這很有可能是因為其作者不同。

        最有趣的是那些大膽擺脫了技術文檔刻板、冷漠特征的旁注。一位心懷歉意、緊張不安的程序員將兩行代碼標注為“只是暫時的,后面我會改的,會改的,會改的”。某個常數(shù)被標記為“神秘數(shù)字”。一次內存不足的情況被加上了“旅店客滿”的注釋。某些地方的注釋語氣則變得輕松愉快起來。打印輸出稿的一段文字上寫著下面這個請求:“宇航員:請你把這個蠢玩意兒轉動一下?!蹦硞€程序的作用是檢查宇航員有沒有遵照規(guī)定行事,于是它的旁注是這么寫的,“看看這兄弟有沒有撒謊”。有讀者不禁會問:宇航員會深入研究這些源代碼嗎?對此,我的回答是,某些宇航員(其中最出名的是巴茲·奧爾德林)是阿波羅導航計算機誕生地儀器實驗室的???。

        這些搞怪的提示在子程序名稱和標簽的選擇上也有體現(xiàn)。與警報和故障有關的部分軟件用上了“哭泣”“緊急救助”“完蛋了”“災難”這樣的符號。我們還在其他地方碰上了某些面巾紙、橡皮擦和灌腸劑品牌的商標。還有一些則用了花生漫畫中的梗作注釋,比如“萊納斯=毯子”(譯注:花生漫畫是美國的一部著名長篇漫畫,萊納斯是其中的一個漫畫形象,出場時常常與毯子為伴)。飛船登陸月球時啟動火箭發(fā)動機的程序名叫“燃燒吧,寶貝”,這明顯是參考了1965年洛杉磯瓦茨騷亂時打出的標語:燃燒吧,寶貝,燃燒!

        源代碼中的這些輕浮、戲謔的標記或許并沒有那么令人意外。程序員大多很年輕,而且顯然都很聰明。在這樣一群人組成的工作小組中,無論任務有多重大、多嚴肅,都肯定會衍生出許多內部笑話。此外,他們也都在麻省理工學院任職,這個地方有著悠久的“黑客文化”搞怪歷史。另一方面,這個項目由NASA監(jiān)管,軟件的每次更迭都必須經(jīng)過各級聯(lián)邦官僚機構審查并批準。因此,驚喜之處并不在于程序中埋藏的這些俏皮話,而在于寫下這些俏皮話的人并沒有被某些嚴肅刻板的官員開除。

        在一次郵件交流中,我向瑪格麗特·漢密爾頓(Margaret H. Hamilton)詢問此事。漢密爾頓起初是位數(shù)學家,后來改行當了程序員,在1963年加入阿波羅導航計算機小組,之前已經(jīng)在麻省理工學院的其他幾個項目工作。她后來成了麻省理工學院儀器實驗室的軟件工程(軟件工程這個詞就是她發(fā)明的)部主任。她在郵件中寫道:“大家都會認真對待自己的工作,但與此同時,他們也會在各方面的幽默調侃行為中獲得樂趣,就比如給飛船上的部分飛行軟件起一些滑稽或神秘的名字?!蓖瑫r,她也坦承NASA否決了一些他們的搞怪發(fā)明。

        宇航員可以通過安裝在指令艙和登月艙控制面板上的“顯示鍵盤”與艙內的阿波羅導航計算機取得聯(lián)系,他們還能通過輸入一段程序、一個動詞或者一個名詞(所有這些都用二進制數(shù)表示)來完成預先設定好的動作。圖中展示的顯示鍵盤來自史密森航空航天博物館,從未安裝在阿波羅飛船上

        哪里可能出錯呢?

        漢密爾頓說過,阿波羅計劃提供了“讓各種人為的差錯成為可能的機會”。不用費太多力氣,我們就能想到一長串本來有可能出錯但最終沒有出錯的隱患清單。

        例如,阿波羅導航計算機有兩種表達帶符號的數(shù)字的形式:1的補碼和2的補碼。這兩種形式一旦混用就會造成數(shù)值誤差。類似,飛船的位置和速度的計算單位是米,但展示給宇航員看的時候單位卻是英尺和英尺/秒。只要出現(xiàn)一次計算疏忽,沒有轉換單位(或者雙重轉換),就可能引起巨大危害。另一項始終存在的危險則是算術溢出:如果某個數(shù)字超過了14位字所能表達的最大正值,那么就會“掉過頭”來,變成一個負數(shù)。

        你或許會覺得這種差錯永遠都不可能通過嚴格的航天任務審查程序,但歷史告訴我們,真實的情況恰恰相反。1996年,一個算術溢出導致的差錯致使阿麗亞娜五號火箭墜毀,一同陪葬的還有火箭上搭載的4顆衛(wèi)星。1999年,一個測量單位沒有轉換的錯誤導致我們痛失了火星氣候軌道器。

        阿波羅導航計算機的體積受限一定增加了程序員的認知負擔,這里又可以使用子程序設計的例子加以說明。在更大的計算機中,一種叫作“棧”的數(shù)據(jù)結構會自動追蹤子程序的返回地址,哪怕主程序是深度嵌套的。也就是一個程序會調用另一個,而另一個則會調用第三個,以此類推。而阿波羅導航計算機并沒有負責追蹤返回地址的棧,它只有Q寄存器,其大小只夠儲存一個地址。無論何時某子程序調用了另一個子程序,程序員都必須找到安全的地方保存返回地址,隨后再把它恢復。這個過程中出現(xiàn)的任何意外都會讓整個程序徹底迷失。

        作為一個想象自己正在為這樣一臺機器編程的門外漢,我最擔心出現(xiàn)錯誤的地方是多任務機制。當有多項任務需要完成時,“執(zhí)行者”程序總是會先處理優(yōu)先級最高的任務。然而,我們也必須保證所有任務最后都能完成,這些目標很難調和。

        中斷操作就更加危機四伏了。外部環(huán)境中發(fā)生的任何事件(比如宇航員按下了顯示鍵盤上的按鍵)都可以在幾乎任何時刻暫停正在進行的計算工作并且接管處理器。中斷程序必須把可能受到影響的所有寄存器中的內容都保存下來,并且在中斷操作結束后把這些內容都恢復出來,這就像是某個盜賊強行進入了民宅,在里面做頓飯,之后為了逃避偵查又把所有東西放回原位。

        然而,哪怕有中斷-恢復協(xié)議的保護,有些進程也是嚴禁中斷的(比如在各項工作中進行切換的執(zhí)行者主程序)。因此,阿波羅導航計算機提供了一個嚴禁中斷的指令和另一個解除這種禁制的指令。但這種機制本身也帶來了風險:如果禁止中斷操作的時間過長,那么某些重要外部事件可能被忽視。

        時至今日,中斷操作與多任務處理之間的協(xié)調仍舊是對設計者的巨大智力挑戰(zhàn)。這些機制引入了對隨機行為與不確定行為的度量:只是掌握系統(tǒng)現(xiàn)在的狀態(tài)還不足以預測其未來的狀態(tài)。它們的存在加大了我們對程序進行推理或者測試程序所有路徑的難度。最令人煩惱、最不常見和最難以預料的故障的根源常??梢宰匪莸礁偁庍M程之間的某些意想不到的沖突。

        觸發(fā)了5次警報的登陸行動

        值得慶幸的是,所有阿波羅導航計算機在執(zhí)行空間任務時都沒有出現(xiàn)大的故障,但還是出現(xiàn)了一些我們不想看到的時刻。當阿波羅11號登陸艙朝著月球表面降落時,顯示鍵盤上突然跳出 “程序警報”,代碼是1202。阿姆斯特朗和奧爾德林不知道是否應該繼續(xù)登陸。作決定的重擔落到了身處休斯敦任務控制中心的指揮員史蒂夫·貝爾斯(Steve Bales)身上。他手上拿著警報代碼的備忘單,并且可以和NASA以及麻省理工學院的幕后專家聯(lián)系。他最后做出決定,“繼續(xù)登陸”。在登陸艙最終降落在月球表面之前的時間里,登陸艙還發(fā)出了4次程序警報,貝爾斯都選擇了繼續(xù)登陸。

        在麻省理工學院,阿波羅導航計算機開發(fā)團隊的成員也在關注著這些變化,并且手忙腳亂地求證1202警報的含義以及可能的起因。相關程序旁邊的注釋寫著“無法提供更多核心集”。每當執(zhí)行者程序啟動一項新任務時,它都會專門為這個新進程分配大小為11個字的讀寫內存,這就是一個核心集。而為這類核心集預留出的空間最多只能同時容納8個核心集(也就是說,執(zhí)行者程序最多只能同時執(zhí)行8項任務)。如果有進程要求執(zhí)行者程序提供8個以上的核心集,后者就會發(fā)出1202程序警報并且跳轉到名為“緊急救助”的主程序上去。

        在登月艙降落到月球表面期間,從不需要同時執(zhí)行8項任務,那么它又怎么會要求執(zhí)行者程序提供超過8個核心集呢?在需要執(zhí)行的任務中有一項任務比較繁重:這就是“服務器”程序,它會執(zhí)行導航、制導和操控所需的所有計算。按照設定,這個程序每2秒運行1次,并且應該在一個運行周期中完成它當時的任務,之后就會關閉,釋放自己占用的核心集。2秒后,一個新的服務器程序進程就會帶著一個新的核心集啟動。然而,由于某些原因,這個程序中的計算工作花費的時間要比設定的長。于是,當下一個服務器程序進程啟動時,上一個卻還沒完成自己的工作,這就導致了未完成任務的積壓,并同時繼續(xù)占用了本應釋放的核心集,最后就出現(xiàn)了程序警報。

        這個現(xiàn)象的起因倒算不上很神秘。實際上,這個現(xiàn)象在測試飛行硬件時就出現(xiàn)過。兩個不同步的電源驅動雷達發(fā)出大量偽脈沖,而阿波羅導航計算機則負責把這些脈沖忠實記錄下來。每一次脈沖都要消耗一個計算機內存運行周期,持續(xù)大約12毫秒。雷達每秒可以發(fā)出12 800個脈沖,足以占用計算機內存容量的15%。為此,設計者給每個程序運行周期留出了10%的時間余量。

        討論這種異常情況起因的文章已經(jīng)很多,它們在誰該為此負責以及如何避免再次出現(xiàn)這種情況這兩個問題上還沒有形成統(tǒng)一觀點。我更感興趣的是,計算機在面對這種異常情況時是如何回應的。在許多計算機系統(tǒng)中,關鍵資源耗盡是致命錯誤,錯誤發(fā)生后,屏幕會變得一片漆黑,鍵盤也不聽使喚,唯一還能工作的就是電源鍵。阿波羅導航計算機的反應則與此不同,它會盡力處理這種意外情況并且盡力保持運行。每當程序警報出現(xiàn)時,緊急救助程序會把所有在執(zhí)行者程序下運行的任務清理掉,然后再重啟其中最重要的幾個。這個過程很像是重啟計算機,但只需要幾毫秒時間。

        計算機屏幕上突然出現(xiàn)的煩人警報現(xiàn)在已經(jīng)司空見慣,但漢密爾頓指出,這種情況在20世紀60年代還是新鮮事。阿波羅導航計算機的核心是優(yōu)先級驅動下的多任務工作機制,這樣程序警報才可能出現(xiàn)在顯示鍵盤的屏幕上。這種警報機制的功能還不止于此:它們不僅有“膽量”中斷其他程序,甚至有膽量在必要的時候中斷宇航員自己的操作。

        令人緊張不安的工作

        阿波羅導航計算機項目的一些老人每月會聚餐一次。50年后,這伙人仍舊保留著這個習慣,這表明阿波羅計劃在他們的生命中畫上了多么濃墨重彩的一筆。(這還表明他們當時是那么年輕。)2017年的時候,我碰巧有機會參加了一次他們的聚會。我發(fā)現(xiàn)有兩個問題是自己會對遇到的每個人都問的。第一個問題是:在隨時可能出現(xiàn)錯誤的雷區(qū),你是如何制造如此好、如此可靠的東西?第二個問題是:在如此重壓下,你沒有驚慌失措嗎?

        就第二個問題來說,桌邊的某人將阿波羅導航計算機的開發(fā)行動描述為“令人緊張的工作”。不過,其他人則稱,自己當時只想著怎么解決這些技術問題,完全沒有仔細思考過出現(xiàn)錯誤的后果。布萊爾-史密斯指出,開發(fā)團隊的非正式座右銘是“我們一定能做到”,這可不只是勇敢而已。他們堅信:憑借自己的能力能夠搞定這一切。

        至于他們究竟是如何做到這一切的這個問題,則引發(fā)了熱烈討論,但我無法將其中的任何一條歸結為他們取得成功的秘密。他們非常小心,他們工作非常努力,他們測試也非常徹底;所有這一切都千真萬確,沒有任何問題,但許多其他軟件項目也有才華橫溢、勤勞勇敢的成員參與,最后為什么出問題了呢?真正讓阿波羅導航計算機項目變得與眾不同的究竟是什么呢?

        回想起1202警報事件,我問他們成功的關鍵是不是追求彈性而非追求完美。如果不能做到完全不出錯,是不是至少能減小出錯造成的破壞呢?結果,他們斷然否決了這個答案,他們的目標始終都是開發(fā)出一款完美無缺的產(chǎn)品。

        我在郵件中也向漢密爾頓提出了類似的問題,她也提到“永遠專注于把每件事都做得盡可能完美”。她還認為,中斷系統(tǒng)和基于優(yōu)先級的多任務處理機制(這兩個我之前認為是潛在隱患的地方)保證了程序能夠“檢測到突發(fā)狀況并且實時從中恢復的靈活性”。

        就我而言,“他們如何完成了這個偉大成就?”仍舊是個開放問題,并且也是值得引起學術圈關注的問題。工程學傳統(tǒng)要求我們對事故和故障做出細致入微的剖析,但研究那些非常成功的案例也許能對我們有所幫助。

        保護與展示

        史密森航空航天博物館收藏了大約3 500件阿波羅計劃的文物,但阿波羅導航計算機軟件并沒有在那展出。一些規(guī)模較小的博物館分別保存了一些軟件打印稿,但現(xiàn)在這些程序之所以能夠廣泛傳播,幾乎完全是因為業(yè)余熱心人士的努力。

        2003年,羅納德·伯奇(Ronald Burkey)觀看了電影《阿波羅13號》(Apollo 13)。電影講述的是阿波羅13號在奔赴月球途中因一次爆炸事故而陷于險境,其中有多個場景出現(xiàn)了顯示鍵盤的畫面。在嵌入式計算機系統(tǒng)行業(yè)工作的伯奇看到后就開始學習更多有關阿波羅導航計算機的知識。一開始并不怎么在意的一些小問題最后演變成了對原始文件的不懈追求。他的目標就是開發(fā)一臺可以執(zhí)行阿波羅導航計算機程序的模擬器。

        伯奇得知儀器實驗室把部分阿波羅11號上使用的軟件存放在了麻省理工學院的圖書館,但捐贈條款不允許這些資料隨意擴散。經(jīng)過漫長的談判,博物館收藏處主任黛博拉·道格拉斯(Deborah Douglas)確保了這些打印文件公開后的安全性,并且安排伯奇負責文件的掃描事宜。接著就是一項枯燥乏味的工作:把3 500頁掃描出來的圖像轉換成可供機器閱讀的文檔。幸好有幾位志愿者加入了進來,分擔了任務。

        與此同時,伯奇忙著開發(fā)的還不只是那個叫作“虛擬阿波羅導航計算機”的模擬器,他還在開發(fā)一款新匯編程序。(起初,他無法訪問原始匯編程序的源代碼,因為這些程序無論如何也不可能在現(xiàn)代硬件設備上運行。)檢驗這一切努力的關鍵測試是通過新匯編程序運行轉錄的阿波羅11號源代碼,并且將產(chǎn)生的二進制輸出與1969年的原始輸出作比較。經(jīng)過幾輪校對和修正(某些掃描文件幾乎完全看不清),測試產(chǎn)生的新二進制數(shù)據(jù)終于和原始數(shù)據(jù)一一對應。

        這幾年來,伯奇和他的伙伴還拿到了其他幾次阿波羅任務軟件的打印件,主要由那些保留著個人備份的麻省理工學院軟件開發(fā)團隊成員提供。那些程序同樣經(jīng)過了掃描、轉錄和重新匯編的流程。所有這些掃描件和轉錄的源代碼都可以在虛擬阿波羅導航計算機軟件網(wǎng)站(http://ibiblio.org/apollo)上找到。同時在網(wǎng)站上展示的還有編程手冊、工程繪圖以及大約1 400份備忘錄、報告和其他同期文件。

        阿波羅計劃可能是20世紀美國技術優(yōu)勢的巔峰體現(xiàn),而阿波羅導航計算機則是這個輝煌成就的關鍵組成部分。因此,當我發(fā)現(xiàn)大型博物館和檔案館對阿波羅導航計算機軟件如此興致寥寥,甚至把保護、轉錄、傳播這些珍貴歷史材料的工作都交給業(yè)余愛好者的時候,我感到奇怪與不安。另一方面,這些活力四射、充滿創(chuàng)造力的業(yè)余愛好者取得的成果是如此耀眼,是他們把這段屬于美國的輝煌歷史帶回到了人們的視線之中。他們的成功幾乎和當初那些阿波羅導航計算機項目的程序員一樣光彩奪目。

        猜你喜歡
        程序計算機
        計算機操作系統(tǒng)
        穿裙子的“計算機”
        基于計算機自然語言處理的機器翻譯技術應用與簡介
        科技傳播(2019年22期)2020-01-14 03:06:34
        計算機多媒體技術應用初探
        科技傳播(2019年22期)2020-01-14 03:06:30
        試論我國未決羈押程序的立法完善
        人大建設(2019年12期)2019-05-21 02:55:44
        失能的信仰——走向衰亡的民事訴訟程序
        信息系統(tǒng)審計中計算機審計的應用
        消費導刊(2017年20期)2018-01-03 06:26:40
        “程序猿”的生活什么樣
        英國與歐盟正式啟動“離婚”程序程序
        創(chuàng)衛(wèi)暗訪程序有待改進
        国产精品成人va| 日本真人添下面视频免费| 国产免费艾彩sm调教视频| 少妇激情av一区二区| 欧美亚洲另类国产18p| 国产天堂av在线播放资源| 精品人妻大屁股白浆无码| 日日av拍夜夜添久久免费 | 国产啪精品视频网站丝袜| 亚洲国产精品一区二区第一| 美女草逼视频免费播放| 青青草亚洲视频社区在线播放观看| 欧美成人在线视频| 69精品免费视频| 吃下面吃胸在线看无码| 蜜桃国产精品视频网站| 97se亚洲国产综合自在线观看 | 日本高清视频在线一区二区三区| 狼人伊人影院在线观看国产| 久久99国产精一区二区三区 | 国产一区二区在线视频| 亚洲AV无码一区二区三区ba| 国产一区二区三区特黄| 日本高清在线一区二区三区| 亚洲色欲色欲www在线播放| 亚洲国产福利成人一区二区| 一区二区高清免费日本| 久久99精品久久水蜜桃| 久久99欧美| 国产一区二区三区不卡在线播放| 国产精品久久国产精品99 gif| 午夜毛片不卡免费观看视频| 国产69精品久久久久9999| 欧美精品高清在线xxxx| 国产精品一区av在线| 国产女人高潮叫床视频| 老色鬼永久精品网站| 五月婷婷丁香视频在线观看| 国产精品久久久久久久| 国产高清视频91| 亚洲伊人伊成久久人综合|