Skip to content
oraccha edited this page Jan 14, 2013 · 1 revision

1985〜1994年,CMU の RichardRashid 教授 (現マイクロソフト研究所MSR所長だっけ?)らによるプロジェクト.

  • [http://www.cs.cmu.edu/afs/cs.cmu.edu/project/mach/public/www/mach.html 本家] (CMU)
  • Accentの後継OSらしい.
    • Mach 1.0 は 4.2BSD を拡張する形で作られた.ポートなどIPCサブシステムはAccentが由来らしい.スレッドが導入されたのは 2.0 から.
  • Mach 2.5 は OSF に採用され,その流れは NeXTSTEP や MacOS X に受け継がれる.
  • 名前の由来は Mach 本の巻頭に書かれている.Melange(SF小説DuneとSPICEプロジェクトにかけている) -> MOOSE(Multiprocessor-Oriented Operating System) -> MUCK(Multiprocessor Universal Communication Kernel) -> Mach になったらしい.

マイクロカーネルの代名詞的存在.初期の論文では kernelized kernel と読んでおり,実際にマイクロカーネルになったのは3.0から.

マイクロカーネル化の試みの一つが外部ページャ(externel pager)である. 外部ページャはページのin/out管理をユーザレベルで行なうことができる機構である.

しかし,マイクロカーネルというわりには巨大だとかの中傷(?)もちらほら.これは「マイクロ」という言葉から生まれた誤解だと言えるが,マイクロカーネルの本質は「小さい」ことではない. そして,ExokernelとかL4といったエクステンシブルカーネルやライブラリOSというモデルが派生してきたりした.

Mach,マイクロカーネルで考案されたアイデアはスレッド仮想記憶周り(メモリマップトファイル)などモノリシックカーネルへも多く逆輸入されている.

その後,CMU からプロジェクトを引き継いだ Utah 大 Flux プロジェクトによって Mach 4.0 が開発された.現在は,Mach 4.0 をベースとした OS として Hurd,xMach の開発が進められている.


基本的なコンセプト

  • タスクとスレッド . Unixプロセスをタスクとスレッドに分離した. . タスクは仮想アドレス空間やポートなどの資源の割当て単位.スレッドはプロセッサを使用する基本単位であり,タスク内で複数のスレッドを実行したり,マルチプロセッサシステムでは個々のスレッドが独立したプロセッサで動作する.

    • もともと,スレッドはプログラムの連続的な実行とノンブロッキングシステムコールを両立するために考えられた. . 例えば,ユーザレベルにおけるスレッド,コルーチン(普通は setjmp/longjmp 使うんだろうな)の実装では,一つのコルーチンがシステムコール呼出しを行ないブロッキングしてしまうと,タスク(プロセス)全体が止まってしまう.
  • メッセージ通信 . ユーザタスク間,ユーザ/カーネル間,カーネルサブシステム間の通信(IPC)はポートを介したメッセージ通信で行なう.メッセージは型付けされたデータの集まりであり,ポートはケーパビリティによって保護されたメッセージのキューである.メッセージは特定のタスクやスレッドに対してではなく,ポートに対して送受信できる. . プログラミング言語からメッセージ通信を行なう際のインタフェースギャップを解決するために,MIG(Mach Interface Generater)というスタブジェネレータが用意されている.

    • カーネルはタスクやスレッドを制御するために IPC を利用し,仮想記憶サブシステムは copy on write を実現するために IPC を利用する.また,netmsgserver によって IPC を透過的に分散システムへ拡張することができる.
  • メモリオブジェクト . メモリオブジェクトは仮想記憶を抽象化した概念で,ページの集合,属性,操作,通信用ポートから構成される.メモリオブジェクトとタスクはメモリマネージャ(外部ページャ)によって対応付けられ,タスク間におけるメモリオブジェクトの共有や copy on writeの制御,メモリマップトファイルが容易に実現できる. . カーネルはタスクに線形アドレス空間を提供し,線形アドレス空間はリージョンとよばれる可変長領域の集合として定義される.そして,任意のメモリオブジェクトを任意のリージョンに対応付けることができる.


Machの実装

  • Hurd . GNUのプロジェクト.
  • RT-Mach . 慶応大学の徳田教授らがリアルタイム拡張したRT-Machも有名. NTT 版もある.
  • [http://www.xmach.org xMach] . Mach 4 ベースの 4.4BSD 互換 OS.
  • NeXTSTEP
    • [http://www.nexus.or.jp/local/misc/mach.html OSの働きとMachの機能の概要] . 佐藤徹氏による文書.
  • [http://www.opensource.apple.com/projects/darwin/ Darwin] (MacOSX) . NeXTSTEP は 2.5 ベースだった気がするけど,Darwin は Mach 3.0 ベース. 3.0 ベースであるが,BSD 互換機能は OS サーバではなく,インカーネルに実装されている.デバドラの実装には C++ で記述された I/O Kit と呼ばれるものを使うらしい.
  • Yamit

Mach上のOSパーソナリティ

MachによるUnixエミュレーションの実装は,トランポリン機構と呼ばれている. クライアントがUnixシステムコールを発行した場合,トラップを受け取ったカーネルはクライアントにリンクされているエミュレーションライブラリに要求をリダイレクトする. エミュレーションライブラリはUnixサーバに要求を送り,結果を受け取る.

  • [http://www.cs.hut.fi/~jvh/lites.html BSDLites] . 4.4BSD互換. 既存のソフトウェア資産を活かすこともMachの大きな設計目標だった.
  • [http://yamit.sourceforge.net/ Yamit] . オープンソースによる BSD サーバの開発.

電脳騒乱節によると,当時Machのソースコードは輸出規制がかかっていたらしいね. で,オムロンが作っていたWSにMachが搭載されていてそののTV CMにRashid教授がでていたらしい.

2002-02-28 . うちの教授が OSF の仕事をしていたとき,CMU にまで Rashid 教授(徳田先生も CMU にいた頃)に会いに行ったんだけど,DARPA だか何だ何だかに予算のことで呼び出されて,予約をすっぽかされたという話を聞いた.

Clone this wiki locally