Multics

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

テンプレート:Infobox OS Multics(マルティックス)は1960年代に開発されたタイムシェアリングオペレーティングシステムであり、後世に多大な影響を与えた。名前は「multiplexed information and computing service」に由来している。プロジェクトは1964年にマサチューセッツ州ケンブリッジで始まった。最後まで使われていたカナダ国防省のシステムは、2000年10月30日に退役した[1]

概要

Multicsの元の計画と開発は1964年に、MITフェルナンド・J・コルバトら)を中心として、AT&Tベル研究所およびゼネラル・エレクトリック(GE)社の独創的な共同プロジェクトとして始まった。しかし1969年にベル研が見切りをつけ脱落(これが結果としてUNIXを生んだ)、さらに翌年GEのコンピューター部門がハネウェルにMulticsもろとも買収されている。

MulticsはGE社が商品化しようとしており、結果としてハネウェルが商品化したが、あまり成功しなかった。しかし、コンピュータ市場に与えた影響は大きく、様々な斬新で貴重なアイデアが盛り込まれている[2]

高可用性を目指して様々な機能が盛り込まれ、電話電力サービスのような「コンピュータ・ユーティリティ」を目標としていた。そのためソフトウェア構造のモジュール化だけでなく、ハードウェアもモジュール化され、必要なリソース(計算機能、主記憶、ディスク装置など)を追加するだけで拡張可能な構造を目指した。ファイル毎のアクセス制御リストによって柔軟な情報共有が可能だが、必要に応じて完全なプライバシーも提供できる。技術者がシステムの性能を分析できる機構も標準で組み込んでいて、様々な性能最適化機構も組み込まれた。

斬新なアイデア

Multicsは単一レベル記憶と呼ばれるデータアクセス法を実装した。これは、(Multicsではセグメントと呼ばれる)ファイルプロセスアドレス空間の明確な区別をなくした考え方である。プロセスのメモリはセグメントをそのアドレス空間にマップすることで構成される。その読み書きにはプロセスは通常のCPUの命令を使い、オペレーティングシステムがその更新内容がディスクに反映されるよう働く。POSIXの用語で言えば、これは全てのファイルがmmap()で扱われることと同じである。しかし、MulticsにはUNIXなどにあるようなファイルをマッピングする以外のプロセスのメモリという概念がなかった。「全て」のメモリが何らかのセグメント(ファイル)の一部であり、ファイルシステムに対応する場所が存在する。これはプロセスやカーネルのスタックなどに使われるメモリでも同様である。

この方式の問題点は基本概念の問題ではなく、それが動作していたマシンのアーキテクチャの問題であった。セグメント(ファイル)のサイズが256K×36ビットワード(約1Mバイト)で制限されたのである。従って、それ以上のサイズのファイルを扱うには特別な処理が必要で、これをマルチセグメントファイルと呼んだ。もっとも、巨大なデータベースやグラフィックが使われる以前だったため、この制限にひっかかることはほとんどなかった。

これが次の大きなアイデアを生み出すこととなった。動的リンクである。動作中のプロセスは新たなセグメントをそのアドレス空間に追加するよう要求でき、そのセグメントにはコードが入っていて実行できるのである。これにより、アプリケーションは最新版のルーチンを自動的に使用可能となり、各ルーチンは別々のセグメントとなっていて、最初にそのルーチンを呼び出そうとしたときに読み込まれるようになった。異なるユーザーが実行させている異なるプロセスの間では、このようなライブラリセグメントの検索ルールを個別に設定でき、ユーザー毎に異なるバージョンのルーチンを自動的に使用することができた。Multicsのセキュリティ機能を適切に設定すると、あるセグメント内のコードが別のプロセス内のデータ構造にアクセスできるという重要な機能もあった。

従って、デーモンとして動作しているアプリケーションがあったとき、別のユーザープロセスが単純に普通の手続き呼び出しを行うと、そのデーモンにアクセスするコードセグメントが動的にリンクされて実行されるといった仕掛けが可能であった。そのようなコードセグメントはデーモンの持つデータ構造を更新することもできる。要求を登録完了したら、制御は元のユーザープロセスのコードに戻される。

これらを駆使したとき、今日一般に使われているオペレーティングシステムでも不可能なことができるという点は注目に値する。1960年代からコンピュータは格段に進歩しているのにもかかわらずである。もちろん、もっと制限された形でこれらの機能は実現され使われている。

Multicsはまた、積極的なオンライン構成変更をサポートした。CPUもメモリバンクもディスクドライブもシステム動作中に追加したり削除したりすることが可能だった。実際、MITのシステムではこれが普通に行われていた。ソフトウェアの開発においてマルチプロセッサシステムを二つに論理的に分割し、一方を新たなOSの評価に使用するのである。このとき、段階的にリソースを削除していって、通常のタイムシェアリングシステムの構成を小さくし、削除したリソースで2台目のシステムを構成する。この間、タイムシェアリングシステムはそのまま動作し続けていた。これは初期のマルチプロセッサシステムの1つでもあり、今日大型のサーバなどで行われているパーティショニング機能の先駆けでもある。

Multicsはコンピュータセキュリティについても特筆すべきものがあった。Multicsはセキュリティを考慮して設計された最初のオペレーティングシステムの1つである。しかし、初期のMulticsは何度も侵入されている[3]。そのためさらなるセキュリティ強化が行われた。第二世代のハードウェアではリングプロテクションが導入され、侵入はほとんどなくなった。

階層型ファイルシステムを初めて採用しただけでなく[4]、ファイル名を任意の長さで自由に設定できるようにもなっている。ファイルやディレクトリは複数の名前を持ち(長い名前と短い名前)、ディレクトリ間のシンボリックリンクもサポートされた。今日では一般的なカーネル内でのプロセス毎のスタックも初めて採用され、セキュリティリング毎にスタックが分離された。Multicsの主力開発言語は高級言語のPL/1である。当時高級言語を用いてOSを記述した例はほとんどなく、それはUNIXの初期の実装がアセンブラ上で行われていたことからも伺える。ただし、バロース B5000システムはMulticsに先行してALGOLを使用している[5]

プロジェクトの経緯

Multicsは当初GE-645メインフレーム(36ビットシステム)上で開発された。後にハネウェル6180シリーズ上で動作している。UNIX初期の歴史についての重要な著作[6]がある Peter H. Salus は、「彼らはMulticsをもっと多用途で柔軟なオペレーティングシステムにしようとしたが、それはみじめに失敗した」と述べている[7]。しかしそのような見方は、Multicsでの技術革新の多くが現代の商用システムで採用されている現状から見て的を射ていないとされている[2]

ベル研究所は1969年にプロジェクトから撤退した。当時Multicsに関わっていた人々の一部がUNIXシステムの開発に移行した。Multicsの開発はMITとGEで続けられた。

1970年、ハネウェルはGEのコンピュータ部門を買い取り、1985年ごろまでGEの設計に基づいたシステムを開発し続けた。約80ヶ所の大学や研究所や政府機関でMulticsシステムが稼動した。(Bullとハネウェルの関係で)フランスの大学で1980年代初期にいくつか導入されている。ハネウェルが Multics のサポートをやめると、ユーザーはUNIXなど他のシステムに移行していった。最後まで使われていたカナダ国防省のシステムは、2000年10月30日に退役した。

1985年、NSAのNCSC(国立コンピュータ保安センター)の策定したセキュリティ評価基準 Trusted Computer System Evaluation Criteria(通称オレンジブック)のB2レベルのセキュリティを実装したOSであると認証された。このレベルの認証を受けたのはMulticsが最初である。

Bullは1975年から2000年までヨーロッパでMulticsを販売し、Bull HN Information Systems Inc. がアメリカで販売した。2006年、Bull SAS がMulticsのいくつかのバージョンをオープンソース化した[8]

回顧

当時としては巨大と思われたMulticsのカーネルは、135Kバイト以上のコードで構成されていた。MITに最初に設置された GE-645 の主記憶容量は 512Kワードであり(約2Mバイト)、Multics はその約10分の1を占めていたに過ぎない。

他の方法で測定すると、OS以外のPL/1コンパイラやユーザーコマンドやライブラリを含めた全コードは1500個のソースモジュールから構成されている。各モジュールが約200行と仮定すると、コンパイルによって生成されるコードは約4.5Mバイトとなる。これは2006年現在の感覚では小さいが、当時としては巨大だった。

Multics のコンパイラはCPU性能を引き出すことよりもコードサイズを小さくするよう最適化されていた。例えば、「オペレータ」と呼ばれる小さなサブルーチンを多用している。コードサイズを小さくするという選択は Multics のような主記憶が高価なマルチユーザーシステムでは良い選択であった。

Unix に2038年問題があるが、Multics には1900年1月1日午前0時からのマイクロ秒を刻む52ビットのカウンタがあり、1971年5月11日にMSBが0から1になった[9]

Multicsに関する風説

「Multicsは完成せず出荷されなかった」というのが一般通説だが、これは事実ではない。実際にはGE及びハネウェルから商用製品として販売されており、一定の成果を挙げたようである[2]

またUNIXとの対比で常に挙げられるパフォーマンスの悪さは、後に70半ばから80年代に至ってハードウェア性能の向上から解決している。Multicsは新奇なアイデアを貪欲に取り込んだ当時としては先進的なOSであり、現実解をとったUNIXとの比較はそれほど簡単ではない。

影響

GEのGECOS、ハネウェルのGCOS日本電気ACOSは、Multicsの系統といえるOSである。

UNIX

Multicsプロジェクトで仕事をしていたケン・トンプソンデニス・リッチーが最初に開発したUNIXは、コマンドの命名法まで含めた多くの領域で Multics の影響を示している。例えば、lsコマンドは "list segments" の略であり、Multicsのセグメントを一覧表示するものとして命名された。しかし内部の設計思想は全く異なっており、可能な限りシステムを小さく保とうとしていた。つまり、Multics で最も問題と思われた部分で違いを見せたのである。

"Unix"という名称(元々は「Unics」)は「Multics」からの連想である。Multics の M が「multiplexed」(多重化)であるのと逆に、UNIX の U は「uniplexed」(単一化)だと噂された。より現実的で直接的な手法を選び、Multicsを否定した設計者の思想がにじみ出ていると言えよう。Garfinkel and Abelson[10] では別の語源を引用しており、ベル研究所でUNIXのデモンストレーションを見た Peter G. Neumann(Multics開発に関わっていた研究者)が「去勢されたMultics」という意味で "eunuchs"(宦官)と呼び、そこから発音の近いUNICSという名前が付けられたという。

ケン・トンプソンは2007年のインタビューで[11]Multicsについて「設計も開発も何もかもが過剰だった。およそ実用的ではなかった。彼ら (MIT) は未だに大きな成功だったと主張しているが、明らかにそうではない」と述べている。しかし同時に「私が(Multicsの中で)十分採用に値すると考えた機能は、階層型ファイルシステムとシェルだ。シェルはプロセスとして独立していて、好きなものと取り替えることができる」と認めている。

他のOS

テンプレート:仮リンクのオペレーティングシステムテンプレート:仮リンクを、同社の創業者テンプレート:仮リンクは「靴箱の中のMultics」(Multics in a shoebox) と称した。ポドスカは後にアポロコンピュータを創業し、そこでAEGISとDomain/OSというオペレーティングシステムを開発したが、それを「マッチ箱の中のMultics」(Multics in a matchbox) と呼んだりした。Domain/OSはMulticsにネットワークとグラフィックス機能を加えたものである。

ストラタスコンピュータ(現ストラタステクノロジー)のオペレーティングシステム テンプレート:仮リンク はMulticsの強い影響を受けており、ユーザインタフェースも内部構造もよく似ている。Multicsの高信頼性・可用性・セキュリティ機能を強化したもので、高信頼トランザクション処理をサポートするフォールトトレラントシステムで採用されている。VOSはMulticsの直接の子孫として、今も活発に開発が続けられている。

参考文献

Multicsに関しては様々な文献がある。完全なリストはここにある。最も重要な文献を以下に挙げる。

技術詳細に関する参考文献

  • Jerome H. Saltzer, Introduction to Multics (MIT Project MAC, 1974年) 実ユーザーによる非常に長いシステム紹介
  • Elliott I. Organick, The Multics System: An Examination of Its Structure (MIT Press, 1972年) 初期のバージョンに関する標準的資料。ただしここに記されている機能の一部は結局実装されなかった。
  • V. A. Vyssotsky, F. J. Corbató, R. M. Graham, Structure of the Multics Supervisor (AFIPS 1965年) Multicsカーネルの基本構造
  • Jerome H. Saltzer, Traffic Control in a Multiplexed Computer System (MIT Project MAC, 1966年6月) カーネルスタック切り替えに関する最初の記述; 情報工学の古典的論文
  • R. C. Daley, P. G. Neumann, A General Purpose File System for Secondary Storage (AFIPS, 1965年) ファイルシステム、アクセス制御、バックアップ機構について
  • R. J. Feiertag, E. I. Organick, The Multics Input/Output System. 入出力部の詳細について implementation.
  • A. Bensoussan, C. T. Clingen, R. C. Daley, The Multics Virtual Memory: Concepts and Design, (ACM SOSP, 1969年) Multicsのメモリ管理の詳細
  • Paul Green, Multics Virtual Memory - Tutorial and Reflections Multicsのストレージシステムについての良い資料
  • Roger R. Schell, Dynamic Reconfiguration in a Modular Computer System (MIT Project MAC, 1971年) 構成変更機能について

セキュリティに関する参考文献

  • Paul A. Karger, Roger R. Schell, Multics Security Evaluation: Vulnerability Analysis (Air Force Electronic Systems Division, 1974年) 「タイガーチーム」によるMulticsのセキュリティ破りについて
  • Jerome H. Saltzer, Michael D. Schroeder, The Protection of Information in Computer Systems (Proceedings of the IEEE, 1975年9月) 最初のセキュリティアップグレードの背景となる基本思想について; もう1つの古典的論文
  • M. D. Schroeder, D. D. Clark, J. H. Saltzer, D. H. Wells. Final Report of the Multics Kernel Design Project (MIT LCS, 1978年) さらなるセキュリティ強化について
  • Paul A. Karger, Roger R. Schell, Thirty Years Later: Lessons from the Multics Security Evaluation (IBM, 2002年) 数十年前のセキュリティ機能が今日の厳しい環境で役に立つかどうかを考察している。Multicsが2002年の多くの商用システムよりもセキュリティが強いと断定している。

脚注

テンプレート:Reflist

関連項目

外部リンク

  • Multics History
  • 2.0 2.1 2.2 Myths about Multics
  • テンプレート:Cite web
  • Multicians Glossary: File system
  • The Multics PL/1 Compiler R. A. Freiburghouse, General Electric Company, Cambridge, Massachusetts, 1969.
  • テンプレート:Cite book
  • テンプレート:Cite news
  • Multics history MIT
  • unix time
  • Garfinkel, Simon and Abelson, Harold. Architects of the Information Society: Thirty-Five Years of the Laboratory for Computer Science at MIT. MIT Press, 1999. ISBN 978-0262071963
  • Peter Seibel. Coders at Work: Reflections on the Craft of Programming. APress Publications, 2007. ISBN 978-1-4302-1948-4