Mach (マーク)とは
Mach(マーク)は、
[カーネギーメロン大学]]のリチャード・ラシッド教授を中心とするMachプロジェクトによって開発されたマイクロ
カーネル型の[[オペレーティングシステム]です。実際の開発はアビー・テバニアンが中心となって行われました。その名前は、「複数非同期通信ホスト (multiple asynchronously communication hosts)」に由来します。
開発の経緯
1980年代中頃、アメリカ国防総省高等研究計画局(DARPA)が開発していた実験用マルチプロセッサ
コンピュータ向けのOSとして、Machの開発は1985年に始まりました。当初は「スーパー
コンピュータ・ワークベンチ・プロジェクト」という名称で進められていました。
当時の主要なOSであった4.2BSD
UNIXは、仮想記憶機構の効率の悪さ、マルチプロセッサ環境への非対応、移植性の低いコードなど、多くの課題を抱えていました。Machはこれらの問題を解決するために、以下のような目標を掲げて開発されました。
マルチプロセッサ対応(100プロセッサ程度を想定)
巨大なメモリ空間と十分な実メモリの有効活用
分散システムサポートと高速なプロセス間通信(IPC)
高い移植性
4.3BSDとの完全な互換性
歴史
Machは、4.3BSD UNIXとの互換性を重視し、4.3BSDのカーネルソースコードをベースに修正を加えて実装されました。ただし、マイクロカーネルとしての実装はMach 3.0からであり、それ以前のバージョンは厳密にはマイクロカーネルではありません。
Mach 1.0 (1986年): 研究開発の進捗報告として発表。仮想記憶とIPCが実装されたが、タスクとスレッドは未実装でした。
Mach 2.0 (1988年): タスクとスレッドが実装され、いくつかの改善が加えられました。初期のNeXTSTEPのカーネルとして利用されました。
Mach 2.5: NFS が実装され、Open Software FoundationのOSF/1の
カーネルとして採用されました。
Mach 3.0 (1989年): マイクロカーネル化が実現しました。MkLinuxのカーネルとしても使用されました。macOSのカーネルXNUもMach 3.0をベースとしていますが、実行レベルではマイクロカーネルではありません。
リチャード・ラシッド教授が1991年にマイクロソフトへ移籍した後も、1994年までカーネギーメロン大学でMachプロジェクトは継続されました。その後、Machの開発はユタ大学のMach 4プロジェクト、Free Software FoundationのHurdプロジェクト、カーネギーメロン大学のARTプロジェクトなどに引き継がれました。
ユタ大学のMach 4プロジェクトでは、分散環境を考慮したスレッドとメッセージの改良、Linuxデバイスドライバインターフェースの実装が行われました。GNUプロジェクトでは、Mach 4をベースにGNU Machとして公開しています。ARTプロジェクトでは、分散リアルタイムOSの実現のため、実時間駆動型スケジューラなどがMachに組み込まれ、Real-Time Machとして公開されました。
これらの研究開発は、MachだけでなくBSDにもフィードバックされ、仮想記憶システムを含むいくつかの機能は4.4BSD Liteにも採用されました。
Machの基本概念
Machは、従来のUNIXの概念を拡張し、以下の新しい概念を導入しました。
タスク:
UNIXの
プロセスは計算処理とリソースを一体化していましたが、Machでは計算処理とリソースを分離し、それぞれを独立に制御できるようにしました。タスクは、
CPU実行時間(スレッド)、メモリオブジェクト、アドレス空間、ポートなどのリソースの集合体です。
スレッド: UNIXのプロセスからCPU実行時間をリソースとして分離・抽象化したものです。スレッドはCPUの処理単位であり、並列に動作することができます。スレッドは必ず一つのタスクに属し、そのタスクの全てのリソースにアクセス可能です。1つのタスクは複数のスレッドを持つことができます。リソースの保護はタスク単位で行われるため、スレッドの生成や切り替えが高速に行われ、マルチプロセッサ環境に最適化されます。
ポート:
UNIXではパイプが主なIPC手段でしたが、Machではパイプを拡張したポートという概念を導入しました。ポートは、構造化されたメッセージをやり取りするための通信チャネルです。ネットワーク越しの通信も抽象化し、高速かつ効率的なメッセージの送受信(out-of-lineデータ)を可能にしました。
メッセージ: カーネルが管理するIPCのデータオブジェクトであり、複数の型付けされたデータの集まりです。メッセージはカーネルによって管理され、ポートを通してプロセス間の通信に利用されます。
メモリオブジェクト: Machでは、仮想記憶の管理機能を
カーネル内部(内部ページャ)だけでなく、ユーザーレベル(外部ページャ)にも開放しました。メモリオブジェクトは、ページャが操作するメモリの基本的な抽象概念です。これにより、copy-on-writeやmap-on-referenceといった遅延評価のメカニズムが実装され、メモリ資源の効率的な利用が可能になりました。
これらのMachの基本概念は、その後の
UNIXだけでなく、多くのOSに大きな影響を与えました。
Machの名前の由来
Machの名前は、開発中に「MUCK (multiprocessor universal communication kernel)」というアイデアが冗談で出た際、
リチャード・ラシッド教授の同僚であるイタリア人のDarlo Giuseが「Mach」と聞き間違えたことに由来します。最終的にはコインの裏表で名前が決定したため、原則として英語読みの「マーク」が正しい発音です。
Machを採用したOS
OSF/1
NeXTSTEP (Mach用
OPENSTEP)
GNU Hurd (GNU Mach)
Mk
Linux
macOS (Darwin), iOS, iPadOS, tvOS, watchOS (ただし、実行効率のため、実行レベルでは単一バイナリ)
関連項目
分散
オペレーティングシステム
マイクロカーネル
Berkeley Software Distribution (BSD)
参考文献
J.ボイキン, D.カーション, A.ランガーマン, S.ロゥバーソ 著、岩本信一(訳) 編『Machオペレーティングシステム -プログラミングと概念-』トッパン、1994年。
乾 和志,菅原 圭資『分散OS Machがわかる本』日刊工業新聞社〈LUNAの本シリーズ〉、1992年。