プログラミング
「Unixタイムシェアリングシステム」について学ぶ
Learning about "The Unix Time-Sharing System" (playtechnique.io)
要約
この記事は、Dennis RitchieとKen ThompsonによるオリジナルのUnixタイムシェアリングシステムに関する記事を解説しています。Unixの初期の設計思想、特にファイルシステムやコマンドファイル(シェルスクリプト)の概念がどのように生まれ、その後のコンピュータサイエンスに与えた影響について、当時の技術的な背景と共に掘り下げています。著者は、Unixの歴史から学ぶべき規律や自己改善の重要性を説き、読者に原文を読むことを推奨しています。
全文翻訳
皆さん、こんにちは。
今月のニュースレターの特集は、Dennis RitchieとKen Thompsonによる「The Unix Time-Sharing System」です。
このニュースレターの目標は、Unixの初期の歴史に関する実際の詳細を明らかにすることです。これらのツールをより自信を持って使えるようになるために、私はLinux、インフラツール、スクリプティング、デザインなどに関する1対1の指導を提供しています。詳細はメンターシップをご覧ください。
背景
Linuxのデザインは偉大な頭脳から生まれましたが、その偉大な頭脳は私ではありません。Linuxのデザインの功績は、Kernighan、Ritchie、Thompsonに与えられるべきです。Linus Torvalds、非公式インタビュー、2011年
最初のバージョンは、私たちの一人(Thompson)が、利用可能なコンピュータ設備に不満を持ち、ほとんど使われていないPDP-7を発見し、より快適な環境を作り出そうとしたときに書かれました。この(本質的に個人的な)努力は十分に成功し、もう一人の著者と数人の同僚の関心を引きました。Dennis Ritchie、「The Unix Time-Sharing System」
Unixは当初、Ken Thompsonによって書かれました。彼の雇用主であるAT&Tは、Multicsというオペレーティングシステムプロジェクトから撤退しました。私たちの大半にとって、雇用主がプロジェクトを離れるとき、私たちは新しい割り当てを与えられます。しかし、Bell Labsは異なっていました。それは主に自己主導の研究のためのシンクタンクであり、研究者は自分の興味を追求するために自由に任されていました1。Kenは、手持ち無沙汰になったので、自分が何に興味があるかを知っていました。彼はMulticsのために購入されたが、今はアイドル状態だったGE-645コンピュータにアクセスできました。それはドラムディスクを持っており、彼はディスクのスループットを最適化したいと考えていました。誰もそれを以前に解決していませんでした。
彼の言葉を借りれば、「周辺機器は素晴らしかった...想像を絶するほど高速なディスクセットがあり、ドラムのシークアルゴリズムを書きたい、ドラムのスループットを得たいと思っていました。なぜなら、コンピュータセンターやMulticsで私が知っていたすべてが、ドラムをうまく扱えなかったからです...基本的に彼らは「読み込み」と言って、読み込みが終わるのを待っていましたが、やりたいことは同時に複数の読み込みを並行して行うことでした。基本的にそれは楽しかったですが、それが私の人生であり、私のすべてです。」Ken Thompson、Turing Award Interview
彼は、新しいディスクレイアウトとアクセススキームを使用してインタラクティブな端末セッションを開始する準備ができたとき、そのマシンへのアクセスを失いました。それを置き換えるために、彼は「ほとんど使われていないPDP-7」を見つけ、ディスクレイアウトの研究を続けるためにそれを使用しました。彼は、ほぼ完全なオペレーティングシステムができあがっており、それを完成させるのに約3週間しかかからないことに気づきました。
再び、彼の言葉を借りれば、「ファイルシステムがありました。ディスクドライバーがありました。I/Oペリフェラルがありました。コンパイラ、エディタ、アセンブラ、ローダー、そして複数のユーザーを実行するためのユーザー保護機能以外は、すべてありました。」
Kenの妻は偶然にも3週間の休暇を子供と一緒に過ごしたので、Kenは残りのいくつかの細かい部分を完成させました。あなたが誰と対峙しているのかを確実に知るために、はい、Ken Thompsonは3週間で、アセンブリ言語で書かれたコンパイラ、エディタ、アセンブラ、ローダー、そしてユーザー保護機能を書きました。
ファイルオープンの革命
この論文にはコメントすべき数万の小さな歴史的詳細がありますが、注意しないと気づかない、本当に奇妙なものをカバーしたいと思いました。
Multicsにはシングルレベルストアと呼ばれるものがありました。引用はこちらです。
「オープンまたはクリエイトシステムコールの目的は、明示的または暗黙的に名前が付けられたディレクトリを検索することにより、ユーザーが指定したパス名をi-numberに変換することです。ファイルが開かれると、そのデバイス、i-number、および読み書きポインタは、ファイルディスクリプタによってインデックス付けされたシステムテーブルに格納され、ファイルディスクリプタはオープンまたはクリエイトによって返されます。したがって、その後のreadまたはwrite呼び出し中に、ディスクリプタはファイルにアクセスするために必要な情報と簡単に照合できます。」Dennis Ritchie & Ken Thompson、「The Unix Time-Sharing System」
これは非常にありふれた声明ですが、私たちはその中で生きています。Open...ファイルを開きます。当時、何が現代的だったのでしょうか?幸いなことに、Ken Thompsonは私たちにこう語りました。
Multicsはページフォールトを持つ仮想メモリシステムであり、データとプログラムを区別しませんでした。データとして、あるいは命令としてページインされたセグメントにジャンプしました。読み書きできるファイルはありませんでした。それは悪い考えだと思いました。この巨大な仮想メモリ空間はMulticsの根底にある統一概念であり、プログラミングの万能理論が模索されていた時代に試みられましたが、私はそれが大きな間違いだったと思います。データと命令は非常に異なるため、私はデータとプログラムを分離したかったのです。ファイルを読み取るときは、データがシーケンシャルに読み取られるとほぼ確信しており、ページインして+1を読み取っても驚きません。さらに、キャッシュから命令を削除する方が、データを削除するよりもはるかに困難です。そのため、私はexecシステムコールを追加しました。「これをプログラムとして呼び出す」と言います。Multicsでは、命令をページインしてそれにジャンプしていました。Ken Thompson、「Unix And Beyond」、1999年
Kenは、今日私たちに大きな影響を与え続けているもの、つまり異なるものを異なるように扱うべきであるということに偶然気づきました。
Comfiles
ここにもう一つ、より深い秘密を隠している楽しい引用があります。
「したがって、シェルが次のように指定された入力ファイルでコマンドとして実行される場合:sh <comfile comfile内のコマンドは、comfileの終わりまで実行されます。その後、shによって呼び出されたシェルのインスタンスは終了します。」Dennis Ritchie & Ken Thompson、「The Unix Time-Sharing System」
では、comfileとは何でしょうか?明らかに、それはシェルスクリプトですよね?では、なぜcomfileと呼ばれるのでしょうか?それは「command files」の略です。DennisとKenの共同研究者でありチームリーダーであるDoug McIlroyは、この名前の由来を明らかにしています。そして、BSDを愛するすべての聴衆にrc.localの慣習がどこから来るのかを教えてくれます。
「シェルは、それが呼び出したプログラムと同じ標準入力からコマンドを読み取りました。したがって、コマンドとデータはコマンドファイル、または「runcoms」(現在は通常シェルスクリプトと呼ばれます)にインターリーブされていました。[A] Runcomは、バックグラウンドで短いコマンドスクリプトを実行できるプログラムであり、MITのCTSSが呼び出し可能なシェルに最も近いものでした。名前の痕跡は、ブートスクリプト/etc/rcに残っています。」Doug McIlroy、「A Research Unix Reader」
結論
Unixの歴史を知らない私たちの大半にとって、それがすぐに成功したと仮定するのは簡単すぎます。この論文は、「PDP-11 Unixが1971年2月に稼働して以来、600以上のインストールがサービスに投入されました」と述べて、開かれています。私がリンクしている論文のバージョンは1977年に公開されました。それはKenとDennisの6年間の人生です。6年間の規律:少数のシステムコールに固執し、プログラミング言語を発明し、それを洗練し続けること。6年間、健全なパターンを特定し、Unixを発明者が望むものにし、他の人々に価値を提供すること。これは私が教えている種類の規律です。あなたが立ち往生しているもの、信頼できないビルドパイプライン、またはあなたがつまずき続けている言語を持ってきてくれれば、あなたがそれを十分に理解するまで一緒に取り組みます。Unixの歴史は私たちに教訓を与えてくれます。そして、私はそれらを無料で共有するのが好きですが、自己改善には集中とハードワークが必要です。「The Unix Time-Sharing System」を読むことをお勧めします。それは、あなたのコミュニティの過去から現代のあなたへのラブレターのようなものです。あなた自身の6年間の挑戦に取り組む際に、あなたの味方になってくれる人が欲しいなら、メンターシップにサインアップして、一緒に頑張りましょう。
Gwendolyn James
P.S. 今日はご清聴ありがとうございました。このようなギークな歴史を愛する他の人々に、ぜひ転送してください。これらの手紙は、励まし、情報を提供し、インスピレーションを与えるためにここにあります。そして、このリストが成長し続けるのを見たいと思っています。
[1] この魅力的な職場について、Jon Gertnerによる書籍「The Idea Factory」またはRichard Hammingによるエッセイ「You and Your Research」を参照してください。Richardのエッセイは、個人的に何に取り組むべきかを決めることについて書かれた最高のものですので、ぜひ読んでください。しかし、持っているのも良いことです。