OS の登場
前回とりあげた、MEMEX から NLS の間というのは非常に長い期間になっています。
今回は、前回と同じ期間で、MEMEX から NLS に至る流れとは別の流れ、「OS の登場」を追ってみようと思います。
目次
1950年のEDVAC の登場で、コンピュータは「技術」の問題ではなく「学術」的研究という俎上に乗せられることになりました。目指すべき方向性が明確に示されたことの影響は大きく、その方向にしたがってさまざまなアイディアが出されます。
こうして、ハードウェアはすぐに安定し、実用的になります。しかし、同時に新しい問題が出てきました。
プログラムの問題です。それまではハードウェアさえ出来ればさまざまな計算に使えると信じられていたのですが、ここに来てプログラムが想像以上に難しいことがわかったのです。
自動プログラミング
当時、プログラムを動かすには機械語コードと1対1で対応するアセンブリコードという物を使ってプログラムを行い、人間が自分の手で対応表を引いて数字からなる機械語コードに変換して、それをパンチカードに穿孔してからコンピューターに入力する、という作業が必要でした。
プログラムが難しいのは、このアセンブリコードがあまりにも単純なことしか出来ないためです。そのため、これを英語のような「人間にわかりやすい言葉」で指示することでコンピューターを動かせないか、というアイディアが出てきました。
これは、後に「自動プログラム」と呼ばれるアイディアです。
コンピューターが、自分自身のプログラムを作り上げる。これは夢のようなアイディアです。人間にも難しいことを、人間が作り出した機械にさせることが可能なのでしょうか?
自動プログラムについては、可能論と不可能論が激しく対立しました。
しかし、IBM にとっては、これは同社の有力商品である「コンピューター」の普及のためにも、ぜひ可能であって欲しい技術でした。
そこで、IBM 内で自動プログラムの研究がスタートしたのです。
最初は、とにかく「自動プログラムは可能である」ことを証明することが重要でした。証明と言っても、数学的な証明なんかは必要ではありません。実際に動くシステムを作ればいいだけです。
そこで、もともとコンピューターの得意分野である「数学計算」に的が絞られました。変数を含む複雑な数式を入力し、変数の値を決定してやると、計算結果を表示するプログラム。それが目標でした。
いまでは電卓でも出来るような簡単なことですが、可能かどうかもわからない状況では、十分すぎるほどの研究テーマだったのです。
1957年、システムは完成しました。
数式(FORMULER)を変換(TRANSLATION)するという意味から、「FORTRAN」と呼ばれるその言語は、確かに人間にとってわかりやすい言語を、自動的に機械コードに翻訳(コンパイル)することを可能としたのです。
初期の FORTRAN は制御構造を持たない単純なものでした。
パンチカード1枚に入れられる文字数が 80文字以内に限られていたため、1行は80文字以内に限られました。(現在でも、コンピューターで1行を 80 文字以内にすることが多いのはこの名残)
また、行の先頭に C が来た行は「COMMENT」を意味するなど、文法とは関係のない「決まりごと」も沢山ある言語でした。
それでも、FORTRAN の登場により自動プログラミングが可能であることが示され、COBOL や BASIC 、PL/I などの言語を生み出していくきっかけとなるのです。
FORTRAN モニター
FORTRAN は、パンチカードの1枚を1行(1命令)として、すべてのカードを読み込ませてから機械コードへの翻訳(コンパイル)を行い、その後翻訳された機械コードを実行させることでプログラムを動作させる仕組みになっていました。
そのため、プログラムの動作まで手間がかかります。それに、まだ当時はコンピューターは高価でしたが、これらの作業をしているあいだ、他の人はコンピューターが空くのを待っていなくてはならなかったのです。
1950 年代末から 60年代前半にかけて、これらの制御もコンピューターにやらせてしまおう、というアイディアが生まれます。
カードの束をセットしてプログラムをスタートさせれば、読み込み・コンパイル・実行を自動で行い、紙テープに結果を出力します。
紙テープ出力後は、すぐに次のカードの束の読み込みにかかります。このため、コンピューターを使いたい人はカードの束をセットしたら、しばらくたって結果を受け取りにいけばいいだけになります。
こうした仕組みは、FORTRAN モニターと呼ばれました。そして、これがいわゆる「OS」の最も原始的な姿です。
MULTICS
1960 年代になると、マサチューセッツ工科大学(MIT)の学生達が、非常にユニークなしかけをソフトウェアで実現します。
タイム・シェアリング・システム(時分割システム。以下 TSS と略称)と呼ばれるそのソフトウェアは、コンピューターの動作を非常に短時間で区切って複数のソフトウェアを動かすことで、複数のプログラムを同時に動かすことが可能でした。
高価なコンピューターを、1台で何台分にも使うことの出来るこのシステムは非常に注目されます。
ここで、MIT の TSS は国防総省高等技術研究局(ARPA)からの援助も受けて、GE(ゼネラル・エレクトリック)や AT&Tなどコンピューターに携わる多くの企業が技術を出し合う一大プロジェクトに発展します。
実際にハードウェアを作成していたのは GE だけなので、GE のコンピューター(GE-635)を改良し、MULTICS に必要な機能を持たせ(GE-645)、その機種をターゲットとして OS として作成が開始されます。
さまざまな最新技術・思想が取り入れられたこのシステムは、1台のコンピューターを複数人数で使うことを目標とし、「複数の」という意味の MULTI から、MULTICS と名付けられていました。
MULTICS は今見ても非常に先進的です。その一例をここに記しておきましょう・・・
すでに、当時は外部記憶装置が実用化されていました。MULTICS では、この外部記憶装置を使いやすくするために、データを「ファイル」という単位で管理する方法を取り入れており、しかも同種のファイルを管理しやすくするための「階層化」の概念まで導入されています。
さらに、ファイルを記憶装置だけではなく、システムを制御するすべての構造に適用するようになっています。たとえば、キーボードやディスプレイと言った装置も「特殊なファイル」という位置づけで、プログラムの入力や出力は、すべて自由なファイルに対して行うようになっていました。
これにより、複数人数で使う際に複数のキーボードやディスプレイを接続していても、システムからは「入出力ファイルが異っている」というだけの扱いで済ませることが出来ます。また、出力をファイルに保存しておいたり、ファイルに収められたデータを処理したりするのにも、特別なプログラムは不要になりました。
さらに、MULTICS では、「すべての記憶領域は、プログラムから見れば同じものである」という、先進的な概念を導入していました。単一レベル記憶、と呼ばれます。
いわゆる RAM で構成されたメインメモリも、外部に接続されたハードディスクも、それをバックアップするテープドライブも、「メモリ」であることに変わりはありません。
これらすべてに連続したメモリアドレスが割り振られ、同じようにアクセスすることが可能です。
ただ、アクセスの際に速度が違ったり、電源を切った時に消えるメモリ/消えないメモリがある、というだけのことです。
もちろん「プログラムから見て」同じであっても、特性は違います。
MULTICS では、動いているプログラムは RAM のアドレスに配置され、何らかの理由で停止するとディスクのアドレスに移動するような仕組みが作られました。これで、メモリを効率よく使えます。
先に書いた「すべてのデバイスはファイルである」ことと組み合わせ、ここに壮大な「単一化」が図られることになります。
全てのコンピューター資源へのアクセスは、メモリへのアクセスと同じように行えるのです。
これにより、TSS の問題点を解決することも出来ました。
たとえば、プログラムが停止したとき、TSS 以前ならば停止した状態のプログラムのメモリを調べることで、異常の原因などを探ることが可能でした。
しかし、TSS 以降は複数人数で限られたメモリを使用するため、停止したプログラムをメモリに留めておくことが難しく、原因調査が行いにくくなっていました。
しかし、先に書いたように MULTICS では、プログラムが停止するとメモリ内容を低速なアドレス…ディスク装置に書きだします。現代的に言えば「コアダンプ」と同じことです。
これにより停止した原因を調査し、修正した後で、もう一度プログラムを「起動」すると、高速なアドレス…内部 RAM にプログラムが移動して動き始めるのです。
メモリとディスク間でのプログラムの移動は、OS が自動的に行うものです。高速なメモリが足りなくなると、一時停止中のプログラムなどは低速なメモリに移動されました。
逆に言えば、メモリが足りないと判っているときは、実行中のプログラムを「一時停止」すれば、OS が適切に処理してくれることになります。
現代的な意味での「仮想記憶」とは異なりますが、きわめて原始的な形の仮想記憶が実現されていたことになります。
MULTICS では、アドレスの位置によって内部メモリやディスクを区別できましたが、仮想メモリではどのアドレスが RAM で、どのアドレスがディスクに割り当てられているのか、単純には区別できません。
TSS では、複数人数で使うにもかかわらず、セキュリティ対策は全くされていませんでした。
TSS を作成した MIT の「ハッカー」たちの倫理では、すべての資源は共有するのが当たり前でした。また、他人に危害を加えることは恥ずべきことでした。
ですから、TSS ではセキュリティなど考慮する必要はなかったのです。
しかし、それはハッカーが狭いコミュニティに住んでいたから大丈夫だっただけの話。MULTICS では、セキュリティにも非常に気を使っていました。ファイルはアクセス制限がつけられ、自由な閲覧を許可することもできる一方、誰にも見せないことも可能でした。
結局、MULTICS では、「メモリ」「外部記憶」「周辺機器」などの、コンピューターを構成するさまざまな要素を「ファイル」という、仮想的な単一要素にまとめてしまい、さらにそのファイル単位でのアクセス制限機能を付けたことになります。これは、近代的な OS の最初の形でした。
MULTICS には先進的で非常に優れた機能が多数盛り込まれました。そのため、開発も難航していました。
開発は 1964年に始まりましたが、5年たっても終わりません。そして、その5年目には AT&T が見切りをつけ、プロジェクトから手を引きます。
さらに翌1970年には、GE のコンピューター部門がハネウェル社に売却されます。
世間的には、「MULTICS プロジェクトは失敗した」ように思われました。
2013年以前に記述が間違いであることを知ったのですが、忙しくて修正しないまま、不正確な風説を流し続けていたことをお詫びいたします。
(さらに追記:2015年まで、MULTICS が GECOS に変化した、という記述でしたが、これも誤りでした)
MULTICS に関与した会社が次々手を引いたため、「MULTICS は開発に失敗し、出荷されなかった」という風説を産んでいます。
実際には、ハネウェルは GE のコンピューター部門を合併した直後から MULTICS システムを販売しています。
これは 6080 に、GE-645 に施したのと同じような改良をしたマシン。
MULTICS は、最終的には大学や政府機関、会社など、85個所程度で使われた、とのこと。
当時の大型コンピューターとしては、まずまずの「成功」です。
1985年には NSA (国家安全保障局)が認める「安全な OS」の第1号に選定されています。
しかし、その1985年に、ハネウェルは MULTICS の販売を終了。それまで使用していた機関などは、Unix などにシステム変更していきました。
ヨーロッパではライセンス供与を受けたフランス企業「ブル」が 1975年から MULTICS の販売を始め、ハネウェルの販売終了後の 1991 年にはコンピューター部門を買い取り、2000年までサポートを続けました。
2000年10月30日、カナダの国防総省で使われていた「最後の MULTICS システム」が停止されます。これで、サポートも終了。
現在、ブルは MULTICS をオープンソース化しています。
以下は余談になりますが、以前に「MULTICS は GECOS として販売されていた」と書いてしまっていたので。
MULTICS の「経験を活かして」、GE が作った別 OS が GECOS です。
GECOS は、ハネウェル買収後に GE の名前を外され、GCOS となります。
MULTICS が動作した GE-645 の一部機種には、メモリアドレスの扱いを変更するための、ハード的な切り替えスイッチがついていたそうです。
これで、GE-635 互換モードを選ぶと、GECOS も動作します。そのほかの後継機種でも GECOS が動作します。しかし、MULTICS は GE-645 以外の機種では動きません。
ハネウェル売却後も事情は同じで、6000シリーズでは GCOS が動きますが、6180 でのみ、MULTICS が動きます。
また、日本ではハネウェルと提携していた NEC と、GE と提携していた東芝が、共同で GCOS 互換の ACOS を作成し、販売しています。GCOS は OS の名前ですが、ACOS は GCOS 互換の OS を動作させるコンピューターの名前にもなっています。
気になる人は「三大コンピューターグループ」を検索してみましょう。
東芝はすでに撤退しましたが、NEC の ACOS シリーズは続いています。
まとめると、GCOS ≒ ACOS ですが、GCOS ≠ MULTICS です。