マイクロカーネルアーキテクチャの利点の1つは、システム全体を再起動することなく、ネットワークやファイルシステムなどの重要なサービスを停止/開始できることです。しかし、最近のLinuxカーネル(常にそうなのでしょうか?)がモジュールを使用して同じ効果を達成するオプションを提供していることを考えると、マイクロカーネルの(残りの)利点は何ですか?
マイクロカーネルアーキテクチャの利点の1つは、システム全体を再起動することなく、ネットワークやファイルシステムなどの重要なサービスを停止/開始できることです。しかし、最近のLinuxカーネル(常にそうなのでしょうか?)がモジュールを使用して同じ効果を達成するオプションを提供していることを考えると、マイクロカーネルの(残りの)利点は何ですか?
回答:
マイクロカーネルは、モノリシックカーネルよりも、最も内側の最も信頼できるモードで実行するために必要なコードが少なくなります。これには、次のような多くの側面があります。
Unix GUIは、ユーザーウィンドウのコードであるXウィンドウを介して提供されます(ビデオデバイスドライバー(の一部)を除く)。現代の多くの大学では、普通のユーザーがFUSEを使用してファイルシステムドライバーをロードできます。Linuxネットワークパケットフィルタリングの一部は、ユーザーランドで実行できます。ただし、デバイスドライバー、スケジューラ、メモリマネージャー、およびほとんどのネットワークプロトコルは依然としてカーネルのみです。
Linuxおよびマイクロカーネルについての古典的な(古くなった場合)の読み物はTanenbaum–Torvaldsの議論です。20年後、Linuxは非常にゆっくりとマイクロカーネル構造に向かっていると言うことができます(ロード可能なモジュールは早くから登場し、FUSEはより新しい)が、まだ長い道のりがあります。
変更されたもう1つの点は、デスクトップおよびハイエンドの組み込みコンピューターでの仮想化の関連性の向上です。目的によっては、カーネルとユーザーランドの間ではなく、ハイパーバイザーとゲストOSの間の区別があります。
マイクロカーネルは、ユーザー空間とは対照的に、システムがカーネルモードにある時間を可能な限り最小限に制限します。
カーネルモードでクラッシュが発生すると、カーネル全体がダウンします。つまり、システム全体がダウンします。ユーザーモードでクラッシュが発生した場合、そのプロセスだけが停止します。Linuxはこの点で堅牢ですが、カーネルサブシステムが他のカーネルサブシステムのメモリを意図的または偶然に上書きする可能性があります。
マイクロカーネルの概念は、ネットワークやデバイスドライバーなど、従来はカーネルモードであった多くのものをユーザー空間に配置します。マイクロカーネルは実際には多くの責任を負わないため、よりシンプルで信頼性が高いことも意味します。IPプロトコルが単純で愚かであることを考えると、複雑さを端まで押しやり、コアを無駄にせず、堅牢なネットワークを実現します。
モノリシックカーネルは、マイクロカーネルよりもはるかに古いです。マイクロカーネルのアイデアは1980年代の終わりに登場しましたが、Unixで使用されています。
モノリシックカーネルを備えたOSの例はUNIX、LINUXであり、マイクロカーネルを備えたOSはQNX、L4、HURD、最初はハイブリッドカーネルに変換された最初のMach(MacOS Xではありません)です。MINIXでも、デバイスドライバーはカーネルの一部としてコンパイルされるため、純粋なマイクロカーネルではありません。
モノリシックカーネルは、マイクロカーネルよりも高速です。最初のMachマイクロカーネルは、モノリシックカーネルよりも50%遅いです。L4のような後のバージョンは、モノリシックカーネルよりも2%または4%遅いだけです。
モノリシックカーネルは一般にかさばりますが、純粋なマイクロカーネルはサイズが小さく、プロセッサの第1レベルキャッシュ(第1世代のマイクロカーネル)に収まる必要があります。
モノリシックカーネルでは、デバイスドライバーはカーネルスペースにあり、マイクロカーネルデバイスドライバーはユーザースペースにあります。
デバイスドライバーはカーネル空間に常駐するため、モノリシックカーネルはマイクロカーネルよりも安全性が低くなります(ドライバーの障害によりクラッシュする可能性があります)。マイクロカーネルは、モノリシックカーネルよりも安全であるため、多くの軍事用デバイスで使用されています。
モノリシックカーネルは信号とソケットを使用してIPCを保証し、マイクロカーネルアプローチはメッセージキューを使用します。1 番目の彼らは、コンテキストスイッチの遅かったので、マイクロカーネルのgenが不十分IPCを実装しました。
モノリシックシステムに新しい機能を追加するということは、再コンパイルせずに新しい機能やパッチを追加できる一方で、カーネル全体を再コンパイルすることを意味します
Linuxカーネルは、モノリシックカーネルとマイクロカーネルのハイブリッドです。純粋なモノリシック実装では、実行時にロードされるモジュールはありません。
用語monolithic kernel
とすることはmicrokernel
、彼らはカーネルの設計(サイズ対構造)の異なる側面を説明するように真剣に比較することはできません。
典型的なモノリシックカーネルはSunOS-4.xカーネルであり、Linuxは基本的なカーネルのコンテンツを手動で構成するため、依然として類似しています。
Solarisカーネル(1992年の2.1以降)は、すべてのドライバーがオンデマンドで自動的にロードされ、初期ブート中にごく一部しかロードされないため、モノリシックと呼ぶことはできません。
SunOS-4.xおよびSolaris(SunOS-5.x)およびLinuxはすべてシングルコンテキスト実装です。コード全体が単一のMMUコンテキストで実行されます。
Mac OS XはMachに基づいており、MMUコンテキストによって分離されたいくつかのプロセスを備えたマルチコンテキスト実装として実行されます。この概念では、ドライバーは別個のプロセスと別個のMMUコンテキストにあります。
多くの人がMac OS Xを「マイクロカーネルシステム」と呼んでいますが、基本的なカーネルはSolarisの基本的なカーネルよりも小さくないかもしれません。
だから、single context kernels
対について話す方が良いと思われるmulti context kernels
。
microkernel
とにかく用語 は間違っているので、それは通常、呼び出されるべきものに使用されmulti context kernel
ます。