web-dev-qa-db-ja.com

Apollo 11ミッションのコードに使用された開発プロセス?

アポロ計画の技術はポケット電卓ほど複雑ではありませんでした。

リンク here から、Apollo Guidance Computer(AGC)に関する情報があります

オンボードのアポロガイダンスコンピューター(AGC)は、約1立方フィートで、2Kの16ビットRAMと36Kのハードワイヤードコアロープメモリで、銅線が小さなものに通されているか通されていない磁気コア。16ビットワードは、通常14ビットのデータ(または2つのオペコード)、1つの符号ビット、および1つのパリティビットでした。サイクルタイムは11.7マイクロ秒でした。プログラミングはアセンブリ言語および解釈言語で行われました。言語、逆ポーランド語。

だから、私はそこに何があったのかを調べたときにいくつかのソースコードに出会いました、そして私は素晴らしいコメントに気づきました(例えばTEMPORARY、I HOPE HOPE HOPE)

VRTSTART    TS  WCHVERT
# Page 801
        CAF TWO     # WCHPHASE = 2 ---> VERTICAL: P65,P66,P67
        TS  WCHPHOLD
        TS  WCHPHASE
        TC  BANKCALL    # TEMPORARY, I HOPE HOPE HOPE
        CADR    STOPRATE    # TEMPORARY, I HOPE HOPE HOPE
        TC  DOWNFLAG    # PERMIT X-AXIS OVERRIDE
        ADRES   XOVINFLG
        TC  DOWNFLAG
        ADRES   REDFLAG
        TCF VERTGUID

宇宙船の実際のプログラムは コアロープメモリ に保存されました。これは、ビットがフェライト素材の物理的なリングである、布地/ロープを(文字通り)織ることによって作られた古代のメモリ技術です。 「コア」メモリは宇宙線に耐性があります。宇宙空間で放射線が当たってもコアビットの状態は変化しません。

仮想アポロガイダンスコンピューター(AGC)ソフトウェアもGITHUBにあります!

ドキュメントの一部がここにあります。

素晴らしいコメントを含むソースコードの別のサンプル。

033911,000064: 32,3017    06037        FLAGORGY        TC       INTPRET      #  DIONYSIAN FLAG WAVING

    034090,000243: 32,3241    13247        BZF      P63SPOT4               #  BRANCH IF ANTENNA ALREADY IN POSITION 1
    034091,000244: 
    034092,000245: 32,3242    33254        CAF      CODE500                #  ASTRONAUT:     PLEASE CRANK THE
    034093,000246: 32,3243    04616        TC       BANKCALL               #                 SILLY THING AROUND
    034094,000247: 32,3244    20623        CADR     GOPERF1                               
    034095,000248: 32,3245    16001        TCF      GOTOP00H               #  TERMINATE
    034096,000249: 32,3246    13235        TCF      P63SPOT3               #  PROCEED        SEE IF HE'S LYING


    034101,000254: 32,3251    04635        TC       POSTJUMP               #  OFF TO SEE THE WIZARD ...
    034102,000255: 32,3252    74126        CADR     BURNBABY

ここでの私の質問はこれです:

  • 当時のツールを考えると、チームはこれほど多くのコードを記述して機能させることができましたか?

なぜなら、Apollo 11で使用されていた多くのコードをコンパイルすると、数日から数週間もかかるからです。私はプログラマーが当時すべてを偶然に起こしたままにしていたことを真剣に疑っています。

57
Josip Ivic

John 'Jack' Garmanが「優先順位がスケジュールされたマルチプログラミングオペレーティングシステム」を「発明」しなければならなかったことについて私が追いかけようとしている素敵なドキュメンタリーがありました。これは着陸船モジュールに関連している可能性があります。着陸船に着陸するときは、次の15秒間のキャビン内の温度など、墜落して燃やされても実際には問題にならないため、ガイダンスを優先するほうがよいという話です。最初のショットでは、コンピューターが過負荷になり、いくつかのサブルーチンが実行されなかったため、アラームが発生し始めました。ロードされた数は多すぎますが、ガーマンが予見して組み込んだ優先度の概念のおかげで、低優先度のルーチンが優先度の高い着陸ルーチンを妨げることはありませんでした。

当時のドキュメンタリーを見ていると、管理者に何も言わずにコードの大規模なリファクタリングを行っているような印象で、作業の予定が遅れていたために解雇されそうになりました。ただし、この場合、アラームの理由が調査されたときに、リファクタリングが明らかになりました。 (そして、経営陣はまだ腹を立てていました!:-)

いくつかのリンク:

いいえ、「チェックリストエラー」は最初の月の着陸をほとんど逸脱しませんでした

LUNAモジュールガイダンスコンピューターからのテイル

彼らの作り方:アポロ11号のソフトウェア

NASAジョンソン宇宙センターオーラルヒストリープロジェクト編集済みオーラルヒストリートランスクリプト

NASAのアポロ計画の簡単な歴史 抜粋:降下火傷から5分、月面から1,800 m上にあるLMナビゲーションおよび誘導コンピューターは、いくつかの予期しない "1202"の最初のものを生成し、 「1201」プログラムアラーム。ヒューストンのミッションコントロールセンターのコンピューターエンジニアであるジャックガーマン氏は、降下を続けても安全であると指導官のスティーブベイルズに語った。これらのアラームは「エグゼクティブオーバーフロー」の兆候でした。つまり、ガイダンスコンピューターがすべてのタスクをリアルタイムで完了できず、一部のタスクを延期する必要がありました。

「巨大な飛躍」を思い起こす 抜粋:それが何であるか、そしてそれが起こってはならないことを私たちは知っていました。しかし、私たちは過負荷状態からの回復を懸命に試みるシステムを設計しました。 [NASAのコンピューターエンジニア]ジャックガーマンが「Go、go!」と叫んでいたのを覚えています。そして、彼らは行きました。次に、NeilがLEMを飛んでいく途中で、タッチダウンするのに適した場所を見つけようとするのを聞きました。私たちの新たな懸念は、燃料の不足でした。しかし、最後に連絡先の通知を聞いてから、「イーグルが上陸しました」と言いました。

ジャックガーマンインタビュー

編集:多分これはドキュメンタリーでした: Apollo 11:The Untold Story(2006)

キャスト:ジョンR.ガーマン...
自身-アポロ11号コンピューターエンジニア(ジャックガーマンとして)

(とりわけ)。

更新: 南アフリカのハッカーが宇宙で最初のNASAコンピュータを救出した

14
K.Nicholas

私が正しく理解していれば、開発プロセスはピアレビューと実験でした。

チームは、 "Math Doctors"のような人々で構成されていました-非常に献身的で、インテリジェントで、情熱的で、ディテール志向で、仕事に専念している人々。つまり、ピアレビューとは、数か月(1年以上)にわたる多くのピアレビューを意味します。

これらの開発者は「頭の中でシミュレーションを実行」し、「ソフトウェアを紙にデバッグ」し、多くの開発者が同じコードを何度も何度も見て、それが正しいと確信するまでグループで作業しました。複数のチームがあり、それぞれが全体の一部を担当していました。

オハイオ州立大学(Spring '96)の私の数値解法教授が、ブースターロケットのステージをいつ開始するかを決定するコードを書きました。彼は、Fortranコードの電話帳のサイズ(つまり、8.5 x 11インチの用紙の厚さ2.5〜3.5インチ-フォントサイズについては説明しなかった)であると説明しました。

納得すると、彼らは無人ミサイルを発射し(技術的にはジャイロスコープを持たないロケット)、定期的にビープ音を発するラジオを搭載しました。彼らは、ラジオが月に衝突(衝突してそれ自体を破壊)し、ビープ音が止まると予想するまでビープ音を聞いた。彼らは、見逃した場合、ラジオが計算された影響時間を超えて長い間ビープ音を鳴らし続けることを知っていました。計算された時間の15秒後に衝撃が発生しました。

確かにこの逸話は、医者との訪問の思い出です。彼はとても年をとっていて、それはずっと前のことでした。これが私の最高の思い出です。

32
Lyle S.

AGCは動詞と名詞で制御されます

Apolloコマンドソフトウェアは、ユーザーが今日認識する構文では記述されていません。宇宙飛行士はコマンドを数値で入力し、各2桁の数字は動詞または名詞を表します。動詞は実行されるアクションを説明し、名詞は動詞のアクションによって影響を受けるデータを指定しました。

宇宙飛行士は動詞と名詞の設定を嫌っていました

元のAGCハードウェア開発者の1人であるRamónAlonsoは、このインターフェースは彼らの研究室への訪問者を感動させるために発明されたが、誰もより良いインターフェースを開発しなかったので、フライトのために立ち往生したと述べた。批評家は、それは「科学的な」ものではなく、最初の宇宙飛行士—すべてのエリートジェットパイロット—は、飛行機のコントロールパネルに似たダイヤルとスイッチを好んだと述べました。

「AGCは非常に低速でしたが、非常に信頼性が高く、当時のデジタルコンピュータの歴史では非常に小さなものでした。集積回路を使用するのは最も初期のことでした。」

設計されたソフトウェアは、基本的にMITによってゼロから構築されました。

Apollo Guidance Computerエミュレータプログラムをパソコンにダウンロードしてインストールできます。問題はありません。 Mac OS Xでは次のようになります。

enter image description here

15
Josip Ivic

他のほとんどすべてのソフトウェアプロジェクトと同様に、厳しい期限と品質のプレッシャーの下で行われました。幸いなことに ソフトウェアプロジェクトマネージャーのハワードW.「ビル」ティンダルジュニアからの資料の大きなアーカイブはこちらから入手できます

メモをサンプリングすると、時間、機能、および欠陥の間の通常の競合を非常によく理解できます。他のプロジェクトと同様に、開発が数年にわたって進行したことは注目に値します。

システムの設計は1961年の第2四半期に始まり、NASAは1965年9月22日に宇宙船にブロックIバージョンを設置しました。元のソフトウェア(CORONAという名前)のリリースは1966年1月で、初飛行は8月25日でした。 1966.それから3年足らずで、設計者はプログラムの最終目標を達成しました( http://history.nasa.gov/computers/Ch2-5.html

ソフトウェアがどのように作成されたかについての具体的なリファレンスは見つかりませんが、日付を考えると、「シミュレーション」が手動で行われ、ペンと紙で行われたとしか思えません。プログラムをパンチカードでAGCにロードするためのシステムがあったようです、おそらくロープメモリを製造する必要なしに地上での「迅速な」テストのためです。

8
pjc50