Mach

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)
MkLinux
macOS (Darwin), iOS, iPadOS, tvOS, watchOS (ただし、実行効率のため、実行レベルでは単一バイナリ)


関連項目



分散オペレーティングシステム
マイクロカーネル
Berkeley Software Distribution (BSD)

参考文献



J.ボイキン, D.カーション, A.ランガーマン, S.ロゥバーソ 著、岩本信一(訳) 編『Machオペレーティングシステム -プログラミングと概念-』トッパン、1994年。
乾 和志,菅原 圭資『分散OS Machがわかる本』日刊工業新聞社〈LUNAの本シリーズ〉、1992年。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。