要約

  • Christopher WellesとWalter Millikenは1984年7月のRFC 909で、ネットワーク越しに標的装置をロード、ダンプ、デバッグするアプリケーション層の仕組みを示した。標的にはパケット交換ノードやゲートウェイが含まれる。遠隔ホストから次の命令が来るまで標的を止めるブレークポイントでは、装置のリアルタイム業務に応えられないと著者らは指摘した。
  • 提案は小さなローダー、基本デバッガ、完全なデバッガという累積的な実装段階を定めた。最上位では条件付き命令を装置内に先置きし、イベント発生時に装置自身が実行できる。通信の待ち時間を減らす代わりに、観測対象がデバッグ用の記憶と計算を引き受ける。

観測する道具が停止原因になる

ブレークポイントはソフトウェア開発の便利な停止位置だ。停止したプログラムの状態を読み、次の一手を考える。しかしRFC 909が想定した相手は、独立した実験機だけではなかった。パケット交換ノード、PAD、ゲートウェイのように、利用者の通信を処理し続ける装置も対象だった。著者らは、停止後に遠隔ホストからブレークポイントの命令を送ってもらう方式では、標的のリアルタイムな要求を満たせないと書いた。故障を探す手順そのものが新しい停止を作る。

Loader Debugger Protocol、略してLDPは、遠隔の状態表示だけにとどまらない。ホストがセッションを制御し、標的のメモリを読んだり書いたり、データを移し、実行を始め、例外を受け取る。仕様は四十を超える命令を扱い、異なるCPUのアドレス形式にも対応しようとした。運用者が深く調べられるほど、標的装置が処理すべき診断の仕事も増える。ネットワーク機器では、この増分を通常業務から切り離せない。

文書は全装置に完全なデバッガを要求しなかった。起動用ローダーはコード領域が小さいことがある。LOADER_DUMPERは読み書き、移動、起動と例外通知の基本を持つ。BASIC_DEBUGGERは制御命令と通常のブレークポイントを加える。FULL_DEBUGGERは有限状態機械を使ったブレークポイント命令を備え、ウォッチポイントは任意とした。各段階は前段階を含む。接続開始後のHELLO_REPLYで、標的はバージョン、実装段階、システム種別、アドレス形式を知らせる。ホストは、相手にない機能を送る前に能力を確かめられる。

事件が起きる前に命令を積む

通常のブレークポイントは標的オブジェクトを止め、状態をホストへ報告する。ホストから次の指示が戻るまで、停止は続く。完全な実装では順番が変わる。ホストは条件付き命令のリストを前もって標的に置く。指定されたアドレスが実行されると、装置内の状態変数がリストを選び、条件を評価する。カウンターと二つのポインターも利用できる。瞬間的な事実がある場所で判断し、必要な結果を後から遠隔へ返す設計だ。

この移動は費用を消さない。命令リストは標的のメモリを占め、イベント時には標的の計算を使う。RFC 909は、ブレークポイントの数、状態、条件、リストの大きさに実装上の制限があり得るとした。命令によってはオブジェクトを止めたり制御したりする。設計の利点は「絶対に止まらない」ことではなく、すべての判断を遠いホストの応答待ちにしないことにあった。

各ブレークポイントまたはウォッチポイントは、一つのデバッグ接続と一つのアドレスに結び付く。複数の利用者が同じ標的を調べる想定があったからだ。ただし複数接続を実現するには、下の転送層と標的側にその能力が要る。誰のリストと状態がどの接続に属するかを分ける仕事も標的に増える。多人数の調査が必要な日に、機器のメモリまで人数分増えるわけではない。

故障したホストが唯一の席を占める

セッションの始まりは転送接続とHELLO、HELLO_REPLY。終わりはホストによる接続の閉鎖で、標的は資源を解放する。RFC 909は、その途中でホストが壊れた場合を取り上げた。一接続しか扱えない標的が半死状態の接続を見抜けなければ、新しいデバッグ担当者を受け入れられない。著者らは死んだ接続の検出、または新しい接続による非活動接続の置き換えを挙げた。後者でさえ、古い接続の間に新しい要求を受ける経路が必要となる。

転送にはRFC 908のReliable Data Protocolが推奨され、TCPも資源を多く使う選択肢として示された。確実で順序立ったメッセージ配送と接続の区別が求められた。一つの転送メッセージに複数のLDP命令を入れられる一方、各命令は一つのメッセージ内に完全に収める必要があった。転送が命令を届けても、ブレークポイントが仕事を奪う時間や、死んだホストの席をいつ空けるかは別の判断である。

RFC 909は実験的な提案として公開された。何台の実機が使ったかを示す記録ではない。そこで示された設計上の衝突は具体的だ。装置を深く調べる力を遠隔から与えるほど、調査の仕組み自体が稼働中の装置に乗る。最も正確な停止位置を見つけても、その瞬間にゲートウェイが皆のパケットを止めるなら、調査は利用者に新しい障害を届けてしまう。

原資料