オペレーティングシステムの基本的概念 3回目
カーネルアーキテクチャ
ほとんどの UNIX カーネルは モノリシックカーネル です。モノリシックカーネルでは、カーネル内の各レイヤが統合され、カレントプロセスの代わりに カーネルモード で動作します。
これに対し、マイクロカーネル 方式のオペレーティングシステムでは、カーネルが提供する機能は最小限に抑えられます。一般的に、マイクロカーネルには以下のような機能のみが実装されます。
- 同期プリミティブ(排他制御やロック機構)
- シンプルなスケジューラ(プロセスのスケジューリングを担当)
- プロセス間通信(IPC)(異なるプロセス間のデータ交換を可能にする)
その他の機能(例:メモリアロケータ、デバイスドライバ、システムコールハンドラなど)は、ユーザ空間で動作するシステムプロセス によって処理されます。
モノリシックカーネル vs. マイクロカーネル
学術的な研究ではマイクロカーネルが注目されていますが、実用上はモノリシックカーネルの方が高速である場合が多いです。これは、異なるレイヤ間の通信にかかるオーバーヘッド(メッセージパッシングのコスト)があるためです。
それでも、マイクロカーネルには以下のような利点があります。
- モジュール化が強制される → システムが分離され、各コンポーネントの独立性が向上
- 移植性が高い → ハードウェア依存のコードがカプセル化されているため、別のアーキテクチャへの移植が容易
- メモリの効率的な使用 → 使われていないシステムプロセスをスワップアウトできる
しかし、性能を維持しつつマイクロカーネルの利点を活かすために、モジュール機能が導入されました。
モジュールとは
モジュールとは、 実行中にカーネルへ動的に組み込む(または削除する)ことができるオブジェクトファイル です。主に、以下のようなカーネルの上位レイヤの機能を提供します。
- ファイルシステム
- デバイスドライバ
- ネットワークプロトコル
- その他のシステムサービス
モジュールは、マイクロカーネルの「ユーザ空間で動作する外部プロセス」とは異なり、カーネル空間で実行されます。つまり、静的にリンクされたカーネル関数と同様に、カレントプロセスの代わりにカーネルモードで動作します。
モジュールの利点
1. モジュール化による拡張性
モジュールは 実行時にロード/アンロードが可能 なため、新しい機能を容易に追加できます。また、モジュールは 明確に定義されたインターフェース を介してデータにアクセスするため、カーネルのコードを直接変更せずに機能を拡張できます。
2. プラットフォーム非依存性
モジュールは特定のハードウェアに依存しません(ただし、特定のデバイス規格に依存することはあります)。たとえば、SCSI デバイスドライバのモジュールは、異なるアーキテクチャ(例:HP Alpha、IBM 互換機)でも動作します。
3. メモリ使用の効率化
必要なときに 動的にロード し、不要になれば アンロード できるため、RAM の節約につながります。特に、メモリの制約がある 組み込みシステム では重要な特性です。
4. 性能の維持
一度ロードされたモジュールは、静的に組み込まれたカーネルコードと同等の速度で実行されます。マイクロカーネルとは異なり、メッセージパッシングのオーバーヘッドがない ため、処理の遅延を最小限に抑えられます。
まとめ
- モノリシックカーネルは高速 だが、モジュール化しにくい
- マイクロカーネルはモジュール化しやすい が、IPC のオーバーヘッドがある
- カーネルモジュール を導入することで、モノリシックカーネルの 性能を維持しつつ、拡張性を向上させることが可能
このように、カーネルのアーキテクチャは 性能・拡張性・保守性 のバランスを考慮して設計されています。