/ «2006-06-04 (Sun) ^ 2006-06-10 (Sat)» ?
   西田 亙の本:GNU 開発ツール -- hello.c から a.out が誕生するまで --

Categories Books | Hard | Hardware | Linux | MCU | Misc | Publish | Radio | Repository | Thoughts | Time | UNIX | Writing | プロフィール


2006-06-05 (Mon)

[Thoughts] PDP-11 に学び、救われる

Real programmers and PDP-11

Ken and Dennis in front of a PDP-11 記念すべき再開第一回は、一片のモノクロ写真からはじめましょう。右の写真は、往年の名機 PDP-11 の前で端末に向かう、若き日の Ritchie 博士と Thompson 氏の姿をおさめた貴重なショットです(Yet Another PDP-11 Page より)。

"Computer science 界の母" ともいえる PDP-11 は、ふたりの手により、C言語と UNIX を産み出した訳ですが、現代の若い人達がこの写真を目にすれば「これほど巨大なコンピュータを手足のように操った彼らは、天才に違いない!」と思うことでしょう。

確かに、このふたりは類い希なる資質を持ち合わせていましたが、PDP-11 自身は現代のパソコンに比べれば、遙かに単純な仕組みから成り立っていたのです。PDP-11 の全盛期から30年以上を経た今、残念ながら、その設計哲学と優れた構造は忘れ去られつつありますが、幸い PDP-11 のありし日の姿を封じ込めた一冊の名著が残されています。

MINICOMPUTER SYSTEMS

MINICOMPUTER SYSTEMSその本の名は、MINICOMPUTER SYSTEMS。副題として ORGANIZATION, PROGRAMMING, AND APPLICATIONS (PDP-11) と名付けられ、1970年代のハッカーやエンジニアから愛読された往年のベストセラーです。共著者の1人である Eckhouse 元教授は、執筆当時 Digital Equipment Corporation (DEC)社に勤務しており、PDP-11 アーキテクチャに関する詳細な解説を行っています。その内容は他書の追随を許さず、行間からは DEC エンジニアの同製品に対する誇りと惜しみない愛情が伝わってくるようです。

ちなみに、この本は一昨年米国の Amazon.com から取り寄せた古本ですが、値段は確か1ドル未満でした。ベストセラーだけあり、中古市場には未だに相当数の同書が流れていることが低価格の原因のようですが、これだけの歴史的名著が "バナナの叩き売り状態" とは、得した一方で何やら物悲しい、複雑な感慨を持ったものです。

なお、従来米国の中古書籍販売店のほとんどは海外発送不可であったため、私は別途転送業者を経由して古本やマニュアルを入手していたのですが、最近は日本のアマゾンからも手軽に注文できるようになりました。ただし到着まで2週間前後はかかりますし、米国 amazon.com に比較すると amazon.co.jp を経由した場合、高値が付けられた古書のみ選択的にリストアップされている点に注意する必要があります。例えば、本日の時点で MINICOMPUTER SYSTEMS は米国では $0.73 スタートの古本22冊が登録されていますが、日本では 5000円以上の値段がついた2冊のみです。転送料や配送料を考慮すると、結局同じぐらいの値段になるのですが、米国 amazon.com が誇る豊富な古書群は、何者にも代え難い魅力と言えるでしょう。

PDP-11 System Block

PDP-11 System Block 同書より引用した右の図は、PDP-11 システム全体像をブロック図で概念化したものです。CPU 内部は ALU とステータスレジスター, 8個の汎用レジスターから構成され、UNIBUS を介してメモリ, TTY, ラインプリンター, ディスクなどのI/O装置と連結しています。巨大なラック群から構成されるミニコンピュータの内部とは思えないほどの単純さです。

俄には信じがたいのですが、次のブートストラップコードを見れば、当時の PDP-11 がいかにシンプルであったかが、お分かり頂けるのではないかと思います。

Bootstrap code

14 words bootstrap code

このショートプログラムはわずか 14 words から構成される PDP-11 用のブートストラップコードです。オペレータはこの 14 words をコンソールパネルの Deposit switches から打ち込み、目的のプログラムコードがパンチされた紙テープを本体 RAM にロードしていました。

機械語の知識がある方であれば、容易に解読できる通り、このプログラムは紙テープリーダのステータスレジスターの最下位ビットをONにし、リーダーを enable にした後、Data ready を確認しては、読み込まれたデータをメモリーに転送するという、単純作業を繰り返しています。

もちろん、記述言語は最も原始的なアセンブリ言語であり、オペレータはいわゆる "Hand assemble" により、即興で機械語をバチバチと入力していたのです。

PDP-11 の解説書は、本書以外にも数多く出版されていますが、MINICOMPUTER SYSTEMS が圧倒的に優れている点は、"Input/Output Programming" と題する第7章に、この Bootstrap をはじめとする、キーボード読み込みや、DECtape 制御, ディスク読み込み, 割り込み処理など、PDP-11 を構成する I/O 装置群の制御コード例が豊富に掲載されていることにあります。しかも、それらのコードリストは、すべて1ページ以下に収まっているのです。

私は、これまで PDP-11 に関する書籍や資料を出来る限り入手してきましたが、この中で MINICOMPUTER SYSTEMS は文句なしの最高傑作、その右に出るものなしと断言できます。

PDP-11/34 processor handbook

pdp11/34 processor PDP-11 プロセッサのレジスタ構成、アドレッシングモード、命令コードなどは、DEC 社のプロセッサマニュアルに記載されていますが、これらの多くは世界中の熱烈な PDP-11 ファンが管理している各地のサイトからダウンロードすることができます(右は amazon.com から入手した古本、値札が付いています)。

ところが、MINICOMPUTER SYSTEMS を熟読して分かったのですが、純正のプロセッサマニュアルにはユーザーの誤解を招くような記載や、不適切な命名が使われている点がいくつかあるのです。恐らく Eckhouse 氏はこの問題に気づいていたようで、プロセッサマニュアル中で誤解を招きやすい部分や分かりづらい点について、補足を加えてくれています。このおかげで、読者は本書を通じて、極めて明快に PDP-11 アーキテクチャを理解することができるのです。

Google pages の限界

昨今は、検索サービスの台頭からか、ネット上の情報さえあれば事足りるという考えが支配的になっているようですが、大変残念なことだと私は思います。PDP-11 アーキテクチャひとつをとっても、Google 上に登録された全てのページをかき集めたところで、一冊のMINICOMPUTER SYSTEMS には遠く及ばないのです。優れた書籍は30年の時を経ても、最新のネットワークデータベースを軽く打ち負かすだけのパワーを秘めているという事実は、一種痛快でもあり、また自分自身、襟を正されるような思いがします。

アーキテクチャを理解する

一昔前に "Lions' commentary on UNIX 6th Edition" が日本でも和訳され話題になりましたが、残念ながらカーネルソースを読むだけでは C言語と UNIX を真に理解することはできないでしょう。システムプログラミングはハードウェアとソフトウェアの両輪の上に成り立つものですから、アーキテクチャの理解は必須です。

しかしながら、現代は UNIX ハッカーが謳歌した時代とはことなり、すべての環境が肥大化の一途を辿った結果、カーネルはもとよりコンピュータアーキテクチャを一個人が理解することは、事実上不可能な事態に陥っています。私達がハードウェアとソフトウェアの "両輪" を理解することは、所詮かなわぬ夢なのでしょうか?

この1年半の間、私は絶えずこの疑問を自分に投げかけてきました。途中、何度も絶望しかかったこともありましたが、MINICOMPUTER SYSTEMS のような優れた書籍や設計哲学に裏付けされたハードウェアに出会うことで、ようやく救われたように思います。

次回は、こうして私が心底惚れ込んだ PDP-11 の "継承者" を紹介する予定です。