モノリシックカーネルとマイクロカーネルの違いを例を挙げて説明してください。カーネルの他の分類も?
モノリシックカーネルは、単一のアドレス空間で完全に実行される単一の大きなプロセスです。単一の静的バイナリファイルです。すべてのカーネルサービスが存在し、カーネルアドレス空間で実行されます。カーネルは関数を直接呼び出すことができます。モノリシックカーネルベースのOSの例:Unix、Linux。
マイクロカーネルでは、カーネルはサーバーと呼ばれる個別のプロセスに分割されます。一部のサーバーはカーネル空間で実行され、他のサーバーはユーザー空間で実行されます。すべてのサーバーは別々に保持され、異なるアドレス空間で実行されます。サーバーは、IPC(プロセス間通信)を介してメッセージを送信することにより、互いに「サービス」を呼び出します。この分離には、1つのサーバーに障害が発生しても、他のサーバーが引き続き効率的に機能できるという利点があります。マイクロカーネルベースのOSの例:Mac OS XおよびWindows NT。
モノリシックカーネル設計は、1980年代の終わりに登場したマイクロカーネルのアイデアよりもはるかに古いものです。
UnixカーネルとLinuxカーネルはモノリシックですが、QNX、L4、Hurdはマイクロカーネルです。 Machは、当初は(Mac OS Xではなく)マイクロカーネルでしたが、後にハイブリッドカーネルに変換されました。 Minix(バージョン3以前)は、デバイスドライバーがカーネルの一部としてコンパイルされたため、純粋なマイクロカーネルではありませんでした。
モノリシックカーネルは通常、マイクロカーネルよりも高速です。最初のマイクロカーネルMachは、ほとんどのモノリシックカーネルよりも50%遅く、L4のような後のものは、モノリシックデザインよりも2%または4%だけ遅くなりました。
モノリシックカーネルはサイズが大きく、マイクロカーネルはサイズが小さい-通常、プロセッサのL1キャッシュ(第1世代のマイクロカーネル)に収まります。
モノリシックカーネルでは、デバイスドライバーはカーネルスペースにあり、マイクロカーネルではデバイスドライバーはユーザースペースです。
モノリシックカーネルのデバイスドライバーはカーネル空間に存在するため、モノリシックカーネルはマイクロカーネルよりも安全性が低く、ドライバーの障害(例外)はクラッシュ(WindowsでBSODとして表示)につながる可能性があります。マイクロカーネルは、モノリシックカーネルよりも安全であるため、軍事用デバイスでより頻繁に使用されます。
モノリシックカーネルはシグナルとソケットを使用してプロセス間通信(IPC)を実装し、マイクロカーネルはメッセージキューを使用します。第1世代のマイクロカーネルはIPCをうまく実装せず、コンテキストスイッチが低速でした。これがパフォーマンスの低下の原因でした。
モノリシックシステムに新しい機能を追加すると、カーネル全体または対応するカーネルモジュール(モジュラーモノリシックカーネルの場合)を再コンパイルすることになりますが、マイクロカーネルを使用すると、再コンパイルせずに新しい機能やパッチを追加できます。
モノリシックカーネル
スケジューラ、ファイルシステム、メモリ管理、ネットワークスタック、デバイスドライバーなどのカーネルのすべての部分は、カーネル内の1つのユニットでMonolithic Kernel
利点
•高速処理
欠点
•クラッシュの安全性•移植の柔軟性•カーネルサイズの爆発
例•MS-DOS、Unix、Linux
マイクロカーネル
IPC(プロセス間通信)、基本スケジューラ、基本メモリ処理、基本I/Oプリミティブなどの非常に重要な部分のみがカーネルに配置されます。通信はメッセージの受け渡しを介して行われます。その他は、ユーザースペースでサーバープロセスとして維持されます。
利点
•耐衝突性、ポータブル、小型
欠点
追加のメッセージの受け渡しによる処理の遅延
例•Windows NT
1。モノリシックカーネル(純粋なモノリシック):all
単一コンポーネントからのすべてのカーネルサービス
(-)追加/削除は不可能、柔軟性が低い/ゼロ
(+)コンポーネント間通信が優れている
例えば:-伝統的なUnix
2.Micro Kernel:few
コアカーネルからのいくつかのサービス(メモリ管理、CPU管理、IPCなど)、異なるレイヤー/コンポーネントからの他のサービス(ファイル管理、I/O管理など)
分割アプローチ[一部のサービスは特権(カーネル)モードで、一部のサービスは通常(ユーザー)モードです]
(+)変更/アップグレードに柔軟に対応
(-)通信オーバーヘッド
例:-QNXなど.
。モジュラーカーネル(モジュラーモノリシック):most
マイクロカーネルとモノリシックカーネルの組み合わせ
モジュールのコレクション-モジュールは->静的+動的にすることができます
ドライバーはモジュールの形で提供されます
例えば:-Linux Modern OS
カーネル設計のスペクトルでは、2つの極端なポイントはモノリシックカーネルとマイクロカーネルです。
たとえば、(古典的な)Linuxカーネルはモノリシックカーネルです(これまでのすべての商用OSもそうです-そうでなければ主張するかもしれませんが)。
そのコードは、上記のすべてのサービスを実装する単一のプロセスを生成する単一のCファイルです。
Linuxカーネルのカプセル化を例示するために、Linuxカーネルは標準Cライブラリにもアクセスできないことに注意します。実際、Linuxカーネルは、printfなどの基本的なCライブラリ関数を使用できません。代わりに、独自の印刷機能(印刷と呼ばれる)を実装します。
このLinuxカーネルと自己包含の隔離は、Linuxカーネルにその主な利点を提供します。カーネルは単一のアドレス空間に存在します1。特に、モノリシックカーネルは、システムのすべてのデバイスドライバーを実装します。
しかし、これはモノリシックカーネルの主な欠点です。サポートされていない新しいハードウェアを導入するには、カーネルの書き換え(関連部分)、カーネルの再コンパイル、OS全体の再インストールが必要です。
さらに重要なことは、デバイスドライバがクラッシュすると、結果としてカーネル全体が影響を受けることです。ハードウェアの追加とハードウェアのクラッシュに対するこの非モジュラーアプローチは、カーネルのその他の極端な設計アプローチをサポートするための主な論点です。マイクロカーネルは、ある意味で、非常に基本的なOSサービス(プロセス管理やファイルシステム管理など)のみを収容する最小限のカーネルです。マイクロカーネルでは、デバイスドライバーはカーネルの外側にあり、OSの実行中にデバイスドライバーの追加と削除が可能になり、カーネルの変更は不要です。
マイクロカーネルとモノリシックカーネルの違いの一部を以下に示します
モノリシックカーネルは、すべてのカーネルサービスとカーネルコア部分を備えているため、重く、速度とパフォーマンスに悪影響を及ぼします。一方、マイクロカーネルは軽量であるため、パフォーマンスと速度が向上します。
wordpressサイトで同じ質問に答えました。表形式のモノリシック、マイクロカーネル、エキソカーネルの違いについては、 here をご覧ください。