トップ 最新 追記

Rogue Engineer's Diary / やさぐれ日記

Categories | CPUの創りかた | Modern Compiler Implementation in ML | NerdTV | PDP-11シミュレータで古代のUNIXを動かしてみる | The Yakumo Project | やさぐれ読書録
最近のツッコミ:1.Dominic(2008-06-23 05:05)  2.CheapestCheapOEMoem(2008-06-17 03:00)  3.NewDownloadCreativAdobOEM(2008-06-12 20:00)
最近のトラックバック:1.濃縮還元オレンジニュース:プロ.. (2006-12-22 22:02)

2004|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|09|

2006-04-24

元々は 「平和利用」のために開発された?(インターネット)ワーム

「ワーム」と言えば、1988年のインターネット・ワーム事件に始まり、Code Red, Nimdaなど、過去二十年近くにわたりインターネット上で数多くの深刻な問題を起こしているプログラムの代表格であるが、その「ワーム」が元々は破壊目 的では なく、分散コンピューティングの一手法として(大げさに言えば「平和利用」のために)開発されたと言ったら信じられるだろうか。

IEN(Internet Experiment Note)

インターネットの前身となったネットワークであるARPANETが、現在のインターネットへと変化していった時期、すなわち 1970年代後半から1980年代初頭にかけては、IEN(Internet Experiment Note)という名前の技術文書が作成されていた。

Vint CerfとBob Khanによって1974年に提案されたプロトコルのコンセプトの実現に向け、ARPAは1977年に『イン ターネット』と呼ばれる研究プロジェクトへの資金の提供を開始した。当時、RFCはARPANETの研究プログラムの産物という位置づけであったため、イ ンターネットプロジェクトではRFCに似た形式の技術ノート、Internet Experiment Notes (IEN)を新たに作ることを決定した。IENのシリーズのエディタには、従来よりRFCの編集を行っていたJon Postelが就任した。

IENのインデックスリストには、1977年の3月から1982年の9月までに発行された204件のIENが登録されている。その 後、全てのARPANETとInternet関連のドキュメントはRFCへ統合されることとなった。

("RFC Editor: Internet Experiment Notes", 福盛秀雄訳)

例えばTCP/IPの仕様を定めた"RFC 791 - Internet Protocol"や、"RFC 793 - Transmission Control Protocol"の"Replaces:"という項を見ると、合わせて 20個近くのIENが、これらRFCの原型、あるいはドラフトとして使われていることが分かる。IENはインターネットの成立にかかわる重要な技術文書が 多く含まれたドキュメント集なのである。

IEN 159 - "Notes on the 'Worm' programs"

その中の一つ、1980年の5月に発行された、IEN 159 "Notes on the 'Worm' programs -- some early experience with a distributed computation"が、インターネット上でのワームについて、世界で最初に言及したドキュメントだ。

「ワーム」プログラムは分散コンピューティング(distributed computation)実現のための一手法である -- このプログラムは複数のマシンにまたがり存在し、アイドル状態のマシンにおいて自己増殖を行う。「ワーム」は複数の「セグメント」と呼ばれる部分から 構成され、セグメントは別々のマシン上で動作する。ワームには、自身を維持するためのメカニズムが備わっている -- 具体的には、別のプログラムが稼動していないマシンを必要に応じ発見し、セグメントを追加するためにプログラムを複製するといったものである。ワームをコ ントロールする方式を作成する際には慎重な設計が要求されるが、このメカニズムにより、ワームは非常にダイナミックかつ堅牢なプログラムを実現している。

これらのテクニックは複数のマシンからなる単純なテストプログラムに始まり、多数のマシンを活用した、リアルタイムのアニメーションシステムに至る、実ア プリ ケーションの構築に利用された。
(……)

IEN 159 "Notes on the 'Worm' programs -- some early experience with a distributed computation", 福盛秀雄訳)

このIEN159だが、実体は1980年の12月に開催された"Workshop on Fundamental Issues in Distributed Computing, ACM/SIGOPS and ACM/SIGPLAN"というワークショップ向け原稿のアブストラクトを流用したものである。

Communications of the ACM - "The 'Worm' Programs"

ワー クショップの原稿は残念ながら見つけられなかったが、その改訂版に当たる"The 'Worm' Programs -- Early Experience with a Distributed Computation"が1982年3月の Communications of the ACMに掲載されていた。(実のところ論文の本体は、ACM のDigital Libraryに加入していないと読めないのだが、Digiral Libraryに加入していない人もこ ちらのリンクから「一応」参照は出来るみたいである。ただし、いつまでも読めるかどうかは無保証)その内容をかいつまんで説明してみ ることにしよう:

・ワームの概要

ワームは、Xerox Palo Alto Research Center内の、Ethernetによりネットワーク接続された合計100台のAlto(1970 年代初頭に開発された、世界最初のパーソナルワークステーション)を対象に製作された。ワームの実装はBCPL(C の祖先に当たるプログラミング言語)により記述されている。通常、夜間にはAltoは空き(ユーザが使用していない)状態となり、その時間帯にはメモリ診 断プログラムが動いていた。これら100台のAltoをマルチプロセッサマシンとして活用する方法の一つとして、ワームは開発されている。

・ワームの実装

各マシンに置かれたワームの構成要素のことをセグメントと呼ぶ。 セグメントは互いに通信を行い、(何らかの原因により)あるセグメントが停止したことを感知すると、他のセグメントが、空きマシン(ユーザが使用していな いマシン)を探し、初期化した後にワームの一部分として加える。

空きマシンが発見されると、ワームのセグメントはそのマシンに対し、標準のネットワークブート処理を行うよう指示するが、そのときに ブートされるプ ログラムとして、ワームのセグメントを指定する。これにより新たなマシンがワームの構成要素として追加されることになる。ワームの実行処理が 完了した場合には、再びネットワークブート処理を行い、ワームが稼動する前に実行されていたプログラム(メモリ診断プログラム)をロード・実行することに より、元の状態に復帰する。

ワームが移動した先のマシンにはディスクがマウントされていない可能性があるため、(ワーム上で稼動する)プログラムはディスクへのア ク セスを行わないことが要求された。また、ディスクがマウントされた状態のマシンが仮にあった場合でも、ワームによるディスクへの書き込みは「反社会的活動 (profoundly antisocial behavior)」であると考えられていた。Xerox内のネットワークにワームを展開するに当たっては、プログラム内にはディスクドライバが一切含ま れていないことを示し、Altoを利用している他のユーザの理解を受けるなどの配慮が行われた。

・ワームの制御にまつわる課題

ワームの制御は大きな課題であった。実験の初期には、ネットワークでの転送処理に失敗し、不完全な状態で実行されたワーム上のプログラ ムが、実行先 のマシンをクラッシュさせるという現象が発生した。この現象はワームの無制限な増殖を招き、さらに増殖先となるマシンがすべてクラッシュするという結果に つながった。ワーム内にあらかじめ非常停止用のメカニズムを用意していたためにワームの活動はなんとか停止させることが出来たが、問題が収束した頃には、 Xeroxの建物の各所にクラッシュした100台のマシンが散らばるという状況となっていた。

しかし初期のテスト期間に発生した、こういった問題の原因究明と解決を進めた結果、ワーム上でのプログラムは安定して実行されるように なり、数週間以上連続して稼動させることも可能となった。

・ワーム上で動作するアプリケーション

実運用においては、ワームを利用したアプリケーションが数種類、製作・利用された。具体的には、画面上にメッセージやグラフィックス画 像を表示する "The Billboard Worm"、ネットワーク上にある複数台のマシン上にて展開・稼動し、指定された時間が来ると外部ターミナル接続用のサーバ経由で、ユーザに電話をかける "The Alarm Clock Worm"、実時間で三次元アニメーションを生成する"Multimachine Animation Using a Worm"、ワーム間で相互に通信し、ネットワークの診断を行う"A Diagnostic Worm for the Ethernet"などがある。

・ワーム以前に存在した分散アプリケーションについて

ここで紹介された「ワーム」は1980年前後に行われた実験であるが、それよりも古くから、ARPANET上には分散コンピューティン グのさきがけと呼ぶべきアプリケーションがいくつも存在していた。 ARPANETのルーティングアルゴリズムはそれ自体、多数のマシンを使った分散コンピューティングと言える。ARPANETの主要な構成要素の一つであ り、現在のルータの原型ともいえるInterface Message Processor(IMP)はネットワークを経由して絶え間なく情報を交換しており、ネットワーク上でIMPが欠けたり、または増えたりしても対応可能 であった。さらに、それぞれのIMPは近隣のIMPから(システム)ソフトウェアをロードして起動することが出来た。IMPの(システム)ソフトウェアは ARPANET上でマイグレーション(移動)を行いながら活動するプログラムであったと言える。

ARPANET上で自律的に移動した最初のプログラムは、BBN(Bolg Beranek and Newman)のB.Thomasが製作した"Creeper"であった。 これはTenex オペレーティングシステム上で動作し、ファイルを印刷した後、ネットワーク上の別のTenexシステムを探して外部状態や ファイルを含めて自らを転送・実行するというプログラムであった(プロセスマイグレーションの元祖と呼んでも良いかも知れない)。後に"Creeper" の発展形は、ネットワークを移動するだけでなく、複製処理によってネットワーク上で増殖する機能を持つようになった。これに合わせネットワーク上を徘徊 し、"Creeper"を発見したらそれをログアウトさせるという"Reaper"というプログラムも製作された。

「ワーム(worm)」という名前の由来は?

以上、論文"The 'Worm' Programs -- Early Experience with a Distributed Computation"の概要を説明してきたが、実は上記の中で一 点説明を省いたところがある ― 「ワーム(worm)」という名前が、そもそもどこから来たか、というお話だ。

元論文の冒頭部分を読むと分かるのだが、"worm"という名前はJohn Brunnerの"The Shockwave Rider" というSF小説(1975年)に登場する、"tapeworm"に由来している。論文の中には"The Shockwave Rider"からの引用がいくつか登場するが、現在インターネット上で起きている出来事と照らし合わせると非常に興味深い内容が含まれている。"The Shockwave Rider"は先日入手したので、中身については折を見て、改めて紹介できればと思っている。

関連エントリ:

本日のツッコミ(全5件) [ツッコミを入れる]

# 向井 [The Shockwave Rider は『衝撃波を乗り切れ』という邦題で翻訳が出されています(ISBN:4-08-..]

# 福盛 [情報ありがとうございます。『衝撃波を乗り切れ』をamazonで調べてみたら、古本で3万円という値段がついてるのをみて..]

# 鴨澤眞夫 [こんばんは。最近このサイトを見つけ、楽しく眺めております。NerdTVの翻訳など、ものすごく素晴らしいです。 ..]

# 福盛 [> こんばんは。最近このサイトを見つけ、楽しく眺めております。 > NerdTVの翻訳など、ものすごく素晴らしいで..]

# 鴨澤眞夫 [うははは。構いませんよ。原書の方が表紙がかっこいいし。 実のところ、邦訳版の方には勝手に導入された(そして校正..]

本日のリンク元 | 146 | 12 | 11 | 10 | 10 | 8 | 8 | 8 | 6 | 6 | TrackBack(1)


福盛秀雄/Hideo Fukumori

Visitors Count: 127(yesterday) / 18(today) / 272765(total)