回答:
モノリシックカーネルとは、すべてのサービス(ファイルシステム、VFS、デバイスドライバーなど)とコア機能(スケジューリング、メモリ割り当てなど)が同じスペースを共有する緊密なニットグループであるカーネルです。これは直接マイクロカーネルに対抗します。
マイクロカーネルは、コア機能がシステムサービスとデバイスドライバー(基本的には単なるシステムサービス)から分離されるアプローチを好みます。たとえば、VFS(仮想ファイルシステム)とブロックデバイスファイルシステム(つまりminixfs)は、カーネルの領域外で実行される個別のプロセスであり、IPCを使用してカーネル、他のサービス、ユーザープロセスと通信します。つまり、それがLinuxのモジュールである場合、それはマイクロカーネル内のサービスであり、分離されたプロセスを示します。
モジュラーカーネルという用語をモノリシック以外のものと混同しないでください。一部のモノリシックカーネルはモジュール式にコンパイルできます(Linuxなど)。重要なのは、モジュールがコア機能を処理するのと同じスペース(カーネルスペース)に挿入され、そこから実行されることです。
マイクロカーネルの利点は、失敗したサービスを簡単に再開できることです。たとえば、ルートファイルシステムがアボートをスローしてもカーネルは停止しません。ただし、これは、かなり重大なバグを隠す可能性があるため(または、問題が継続的に修正されるように見えるため、それほど重大ではないように見えるため)、デメリットと見なすこともできます。これは、いったん展開すると何かを簡単に修正できないシナリオでは大きな利点と見なされます。
マイクロカーネルの欠点は、特にフィブリルが実装されている場合、非同期IPCメッセージングのデバッグが非常に困難になる可能性があることです。さらに、FS /書き込みの問題を追跡することは、ユーザー空間プロセス、ブロックデバイスサービス、VFSサービス、ファイルシステムサービス、および(おそらく)PCIサービスを調べることを意味します。それが空白になったら、IPCサービスを見てみましょう。多くの場合、モノリシックカーネルの方が簡単です。GNU Hurdはこれらのデバッグ問題に悩まされています(参照)。複雑なメッセージキューを処理するときは、チェックポイントを設定するつもりはありません。マイクロカーネルは心臓の弱い人には向いていません。
動作する安定したカーネルへの最短経路は、モノリシックアプローチです。どちらのアプローチでもPOSIXインターフェースを提供できます。カーネルの設計は、特定の設計で実行するコードを記述したいだけの人にはほとんど興味がありません。
私はLinux(モノリシック)を本番環境で使用しています。しかし、私のカーネル開発に関する学習、ハッキング、いじくりのほとんどは、マイクロカーネル、具体的にはHelenOSに入ります。
編集する
私の非常に長い時間のかかった答えをここまで読んだ場合、おそらく「カーネル設計に関する偉大なTorvalds-Tanenbaum討論」を読むのが楽しいでしょう。2013年に読むとさらにおもしろくなります。蒸散してから20年以上経っています。最も面白い部分は、最後のメッセージの1つにあるLinusの署名でした。
Linus "my first, and hopefully last flamefest" Torvalds
明らかに、それは、x86が間もなく廃止されるというTanenbaumの予測以上に実現しませんでした。
注意:
「Minix」と言っても、Minix 3を意味するものではありません。さらに、HURDについて言及するときは、(ほとんどの場合)Machマイクロカーネルを参照しています。他人の最近の仕事を非難するのは私の意図ではありません。
モノリシックカーネルとは、オペレーティングシステム全体がカーネルモードで実行されることを意味します(つまり、ハードウェアの特権が非常に高い)。つまり、OSのどの部分もユーザーモード(低い特権)で実行されません。OS上のアプリケーションのみがユーザーモードで実行されます。
Windowsなどの非モノリシックカーネルオペレーティングシステムでは、OS自体の大部分がユーザーモードで実行されます。
どちらの場合も、OSは高度にモジュール化できます。
; tl-dr-いいえ、Linuxは常にモノリシックです。
Linux モジュールは、ある意味でモジュール式を意味する場合があります。他の人が指摘したように、モノリシックは通常、マイクロカーネルとモノリシックカーネルを表しています。従来のマイクロカーネルにはこれらの機能しかありませんが、
メインカーネルには、ハードウェアドライバー、プロトコルスタック、ファイルシステム、サスペンド/レジューム、クロック管理などはありません。これらは、すべてのユーザータスクと同じです(ただし、MMU /スケジューラーを介して異なる特権を持つ場合があります)。
PCとサーバーのプログラマーは笑うかもしれませんが、2つと3つは確かに存在する大多数の携帯電話に当てはまります。BlackBerry QNXが成功した場合、Tanenbaumはすべてのアカウントで正しく機能します。
また、多くのL1-ハイパーバイザーは、持っているマイクロカーネルの下を。これは、ハイパーバイザーは通常、コンテキストの切り替え以外にはあまり機能しないためです。
どうやら3つはLinuxの成功を予測しています。;-)
マイクロカーネルの議論は、モノリシックサブシステムのすべてが一度に複数の値を同期する必要があるということです。これを行うには、ロックを使用する必要があり、並列アーキテクチャに拡張するとアムダールの法則の影響を受けます。カウンターは、マイクロカーネルが大量のIPCメッセージを生成するということです。
主な開発は、 モノリシックカーネルでの競合を回避するためのロックフリープログラミングの。これにより、モノリシックカーネルでのロックが回避され、IPCオーバーヘッドも削減されます。最近、すべてのCPUがISAを拡張して、ロックフリーアルゴリズム用のより優れたプリミティブを含めています。したがって、Linuxはおそらくしばらくは一体型のカーネルのままです。
ウィキペディアから:
モノリシックカーネルは、オペレーティングシステム全体がカーネルスペースで単独で動作し、スーパーバイザーモードとして単独で動作するカーネルアーキテクチャです。他のアーキテクチャーとは異なり、モノリシックカーネルは、プロセス管理、同時実行性、メモリ管理自体などのすべてのオペレーティングシステムサービスと1つ以上を実装するための一連のプリミティブまたはシステムコールで、コンピューターハードウェア上の高レベル仮想インターフェイスを単独で定義しますモジュールとしてのデバイスドライバ。
一方、Windowsの最近のバージョンでは、 ハイブリッドカーネルをます。
ハイブリッドカーネルは、コンピューターのオペレーティングシステムで使用されるマイクロカーネルとモノリシックカーネルアーキテクチャの側面を組み合わせたカーネルアーキテクチャです。モノリシックカーネルとの類似性のため、このカテゴリは物議を醸しています。この用語は単純なマーケティングとして一部では却下されました。従来のカーネルカテゴリは、モノリシックカーネルとマイクロカーネルです(ナノカーネルとエクソカーネルは、マイクロカーネルのより極端なバージョンと見なされます)。
この文脈での「モノリシック」とは、単一の大きな実行可能ファイルが存在することを指しているわけではなく、Linuxは実行時にカーネルモジュールの動的ロードをサポートしています。カーネルについて説明する場合、「モノリシック」とは、オペレーティングシステム全体が「特権」モードまたは「スーパーバイザー」モードで実行されることを意味します。「マイクロカーネル」などのタイプのカーネルを使用する他のタイプのオペレーティングシステムでは、最小限の機能のセットは特権モードで実行され、ほとんどのオペレーティングシステムはユーザー空間で実行されます。
マイクロカーネルの擁護者は、コードが小さいほどバグが少ないことを意味し、スーパーバイザーモードで実行されているバグはユーザー空間コードよりもはるかに大きな問題を引き起こす可能性があるため、これはより良いと言っています'カーネルパニック')。一部のマイクロカーネルは、「正式に検証」できるほど十分に小さいため、仕様に従ってカーネルが「正しい」ことを数学的に証明できます。L4はこの良い例です。
モノリシックカーネルは、完全に単一のアドレス空間で実行される単一の大きなプロセスです。これは単一の静的バイナリファイルです。すべてのカーネルサービスが存在し、カーネルアドレス空間で実行されます。カーネルは関数を直接呼び出すことができます。モノリシックカーネルベースのOSの例は、Linux、Unixです。
この投稿は、概念をより理解するのに役立つと思います。
http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html