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