Privacy Policy Cookie Policy Terms and Conditions Multics - Wikipedia

Multics

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Multics1960年代に開発されたタイムシェアリングオペレーティングシステムであり、後世に多大な影響を与えた。名の由来は「Multiplexed Information and Computing Service」による。

目次

[編集] 概要

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

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

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

[編集] 斬新なアイデア

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

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

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

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

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

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

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

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

[編集] プロジェクトの経緯

Multicsは当初GE-645メインフレーム(36ビットシステム)上で開発された。後に ハネウェル 6180 シリーズ上で動作している。

ベル研究所は1969年にプロジェクトから撤退した。当時Multicsに関わっていた人々の一部がUNIXシステムの開発に移行した。表面上、UNIXはコマンドの命名法まで含めた多くの領域で Multics の影響を示している。しかし設計思想は全く異なっており、可能な限りシステムを小さく保とうとしていた。つまり、Multics で最も問題と思われた部分で違いを見せたのである。"Unix"という名称(元々は "Unics")は "Multics" からの連想である。Multics の M が Multiplexed(多重化)であるのと逆に、UNIX の U は Uniplexed(単一化)だと噂された。より現実的で直接的な手法を選び、Multicsを否定した設計者の思想がにじみ出ていると言えよう。

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

最後のMulticsマシンは Canadian Department of National Defence にあるマシンで、2000年10月31日に停止された。

[編集] 回顧

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

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

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

[編集] Multicsに関する風説

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

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

[編集] 参考文献

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年) ファイルシステム、アクセス制御、バックアップ機構について
  • 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年の多くの商用システムよりもセキュリティが強いと断定している。

[編集] 外部リンク

いずれも英文

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu