マイクロカーネルは、モノリシック カーネルよりも、最も内側の最も信頼できるモードで実行する必要があるコードが少なくて済みます。これには、次のような多くの側面があります。
- マイクロカーネルを使用すると、基本的でない機能 (接続されていない、または使用されていないハードウェアのドライバーなど) を自由にロードおよびアンロードできます。これは、モジュールを介して Linux でほとんど実現可能です。
- マイクロカーネルはより堅牢です。カーネル以外のコンポーネントがクラッシュしても、システム全体が影響を受けることはありません。バグのあるファイルシステムまたはデバイス ドライバーは、Linux システムをクラッシュさせる可能性があります。 Linux には、コーディングの実践とテスト以外に、これらの問題を軽減する方法がありません。
- マイクロカーネルの信頼できるコンピューティング ベースは小規模です。そのため、悪意のあるデバイス ドライバーやファイル システムでさえ、システム全体を制御することはできません (たとえば、最新の USB ガジェットの疑わしい起源のドライバーは、ハード ディスクを読み取ることができません)。
- 前のポイントの結果として、通常のユーザーはモノリシック カーネルのカーネル コンポーネントとなる独自のコンポーネントをロードできます。
Unix GUI は、ユーザーランド コード (ビデオ デバイス ドライバー (の一部) を除く) である X ウィンドウを介して提供されます。最新のユニックスの多くは、一般ユーザーが FUSE を介してファイルシステム ドライバーをロードできるようにします。 Linux ネットワーク パケット フィルタリングの一部は、ユーザーランドで実行できます。ただし、デバイス ドライバー、スケジューラ、メモリ マネージャー、およびほとんどのネットワーク プロトコルは、依然としてカーネルのみです。
Linux とマイクロカーネルに関する古典的な (古いものである場合) の読み物は、Tanenbaum-Torvalds の討論です。 20 年後、Linux は非常にゆっくりとマイクロカーネル構造に向かって進んでいると言えます (ロード可能なモジュールは初期に登場し、FUSE はより最近のものです) が、まだまだ道のりは長いです.
もう 1 つの変更点は、デスクトップおよびハイエンドの組み込みコンピューターでの仮想化の関連性が高まったことです。目的によっては、カーネルとユーザーランドの間ではなく、ハイパーバイザーとゲスト OS の間に関連する区別があります。
マイクロカーネルは、ユーザー空間ではなく、システムがカーネル モードにある時間を可能な限り最小限に制限します。
カーネル モードでクラッシュが発生すると、カーネル全体がダウンします。つまり、システム全体がダウンします。ユーザーモードでクラッシュが発生した場合、そのプロセスだけがダウンします。 Linux はこの点で堅牢ですが、意図的または偶然に、カーネル サブシステムが他のカーネル サブシステムのメモリを上書きする可能性があります。
マイクロカーネルの概念は、ネットワークやデバイス ドライバーなど、従来はカーネル モードであった多くのものをユーザー空間に配置します。マイクロカーネルは実際には多くのことを担当していないため、よりシンプルで信頼性が高いことも意味します. IP プロトコルがシンプルで愚かであることによって、複雑さをエッジに追いやり、コアを無駄のないものにすることで、実際に堅牢なネットワークにつながる方法を考えてみてください。
この問題の反対側を読む必要があります:
エクストリーム ハイ パフォーマンス コンピューティングまたはマイクロカーネルがダメな理由
ファイル システムはカーネルに属します