マイクロカーネルアーキテクチャの利点の1つは、システム全体を再起動しなくても、ネットワーキングやファイルシステムなどの重要なサービスを停止/開始できることです。しかし、最近のLinuxカーネル(常にそうでしたか?)が同じ効果を達成するためにモジュールを使用するオプションを提供していることを考えると、マイクロカーネルの(残りの)利点は何ですか?
承認された回答:
マイクロカーネルは、モノリシックカーネルよりも、最も内側の最も信頼できるモードで実行するために必要なコードが少なくて済みます。これには、次のような多くの側面があります。
- マイクロカーネルを使用すると、基本的でない機能(接続されていない、または使用されていないハードウェアのドライバーなど)を自由にロードおよびアンロードできます。これは主にLinuxでモジュールを介して達成できます。
- マイクロカーネルはより堅牢です。カーネル以外のコンポーネントがクラッシュしても、システム全体がクラッシュすることはありません。バグのあるファイルシステムまたはデバイスドライバは、Linuxシステムをクラッシュさせる可能性があります。 Linuxには、コーディングの実践とテスト以外に、これらの問題を軽減する方法はありません。
- マイクロカーネルは、トラステッドコンピューティングベースが小さくなっています。そのため、悪意のあるデバイスドライバーやファイルシステムでさえ、システム全体を制御することはできません(たとえば、最新のUSBガジェットの出所が疑わしいドライバーはハードディスクを読み取ることができません)。
- 前のポイントの結果は、通常のユーザーがモノリシックカーネルのカーネルコンポーネントとなる独自のコンポーネントをロードできることです。
Unix GUIは、ユーザーランドコードであるXウィンドウを介して提供されます(ビデオデバイスドライバー(の一部)を除く)。最近のユニスの多くは、通常のユーザーがFUSEを介してファイルシステムドライバーをロードできるようにします。 Linuxネットワークパケットフィルタリングの一部は、ユーザーランドで実行できます。ただし、デバイスドライバー、スケジューラー、メモリマネージャー、およびほとんどのネットワークプロトコルは、依然としてカーネルのみです。
Linuxとマイクロカーネルについての古典的な(日付がある場合)読み物は、Tanenbaum–Torvaldsの議論です。 20年後、Linuxは非常にゆっくりとマイクロカーネル構造に移行していると言えます(ロード可能なモジュールは早い段階で登場し、FUSEは最近のものです)が、まだ長い道のりがあります。
変更されたもう1つの点は、デスクトップおよびハイエンド組み込みコンピューターでの仮想化の関連性の向上です。目的によっては、関連する区別はカーネルとユーザーランドではなく、ハイパーバイザーとゲストOSの間です。
関連:bashオートコンプリートをカスタマイズして、別のディレクトリにあるファイルを一覧表示するにはどうすればよいですか?