web-dev-qa-db-ja.com

Linuxがモノリシックカーネルと呼ばれるのはなぜですか?

Linuxはモノリシックカーネルであることを読みました。モノリシックカーネルとは、完全なカーネルコードをコンパイルして実行可能ファイルにリンクすることを意味しますか?

Linuxがモジュールをサポートできる場合、すべてのサブシステムをモジュールに分割し、必要なときにそれらをロードしてみませんか?その場合、カーネルは最初にすべてのモジュールをロードする必要はなく、モジュール内の関数のインデックスを維持し、必要に応じてロードできます。

189
Boolean

モノリシックカーネルは、すべてのサービス(ファイルシステム、VFS、デバイスドライバーなど)とコア機能(スケジューリング、メモリ割り当てなど)が同じスペースを共有する緊密なニットグループであるカーネルです。これは、マイクロカーネルに直接反対します。

マイクロカーネルは、コア機能がシステムサービスとデバイスドライバー(基本的には単なるシステムサービス)から分離されているアプローチを好みます。たとえば、VFS(仮想ファイルシステム)とブロックデバイスファイルシステム(minixfs)は、カーネルのスペースの外側で実行される別個のプロセスであり、IPCを使用してカーネル、他のサービス、およびユーザープロセスと通信します。つまり、Linuxのmoduleの場合、マイクロカーネルのserviceであり、分離されたプロセスを示します。

用語modularカーネルをモノリシック以外のものと混同しないでください。一部のモノリシックカーネルは、モジュラー(たとえばLinux)にコンパイルできます。重要なのは、モジュールがコア機能を処理する同じスペース(カーネルスペース)に挿入され、そこから実行されることです。

マイクロカーネルの利点は、失敗したサービスを簡単に再起動できることです。たとえば、ルートファイルシステムがアボートをスローした場合にカーネルが停止することはありません。ただし、これは非常に重大なバグを隠すことができるため(または問題が継続的に修正されるため、それほど重大ではないように見えるため)、デメリットと見なすこともできます。展開したものを簡単に修正できないシナリオでは、これは大きな利点と見なされます。

マイクロカーネルの欠点は、特に fibrils が実装されている場合、非同期IPCメッセージングのデバッグが非常に難しくなる可能性があることです。さらに、FS /書き込みの問題を追跡するだけで、ユーザー空間プロセス、ブロックデバイスサービス、VFSサービス、ファイルシステムサービス、および(おそらく)PCIサービスを調べることを意味します。空白を取得した場合は、IPCサービスを確認してください。多くの場合、モノリシックカーネルの方が簡単です。 GNU Hurd には、これらのデバッグの問題があります( reference )。複雑なメッセージキューを処理するときは、チェックポイントを設定することすらしません。マイクロカーネルは、弱い人向けではありません。

動作する安定したカーネルへの最短パスは、モノリシックアプローチです。どちらのアプローチでもPOSIXインターフェイスを提供できます。この場合、カーネルの設計は、特定の設計で実行するコードを単に記述したい人にとってはほとんど関心がありません。

実稼働環境ではLinux(モノリシック)を使用しています。ただし、カーネル開発の学習、ハッキング、またはいじくりのほとんどは、マイクロカーネル、具体的には HelenOS になります。

編集

私の非常に長い答えからこれまでのところ、「 カーネル設計に関するTorvalds-Tanenbaumの素晴らしい議論 」を読むのは楽しいでしょう。 2013年の記事は、20年以上経ってから読むのがさらにおもしろい。最も面白い部分は、最後のメッセージの1つにあるLinusの署名でした。

Linus "my first, and hopefully last flamefest" Torvalds

明らかに、それはTanenbaumのx86がすぐに時代遅れになるという予測以上には実現しませんでした。

NB:

「Minix」と言うとき、Minix 3を意味しません。さらに、The HURDに言及するとき、(ほとんど)Machマイクロカーネルを参照しています。他人の最近の作品を軽disするつもりはありません。

268
Tim Post

ここに私の短い答えがあります...以下の画像を見つけます。両方のタイプのカーネルについて明確なアイデアが得られます

enter image description here

21
Dhiral Pandya

モノリシックカーネルとは、オペレーティングシステム全体がカーネルモードで実行されることを意味します(つまり、ハードウェアによる高度な特権)。つまり、OSのどの部分もユーザーモード(低い特権)で実行されません。 OSの上にあるアプリケーションのみがユーザーモードで実行されます。

Windowsなどの非モノリシックカーネルオペレーティングシステムでは、OS自体の大部分がユーザーモードで実行されます。

どちらの場合でも、OSは高度にモジュール化できます。

13
CesarGon

From Wikipedia

モノリシックカーネルは、オペレーティングシステム全体がカーネル空間でスーパーバイザーモードとして単独で動作しているカーネルアーキテクチャです。他のアーキテクチャとは異なり、モノリシックカーネルは、プロセスハードウェア、同時実行、メモリ管理自体などのすべてのオペレーティングシステムサービスを実装するプリミティブまたはシステムコールのセットを使用して、コンピューターハードウェア上の高レベルの仮想インターフェイスのみを定義しますモジュールとしてのデバイスドライバー。

一方、Windowsの最近のバージョンでは、 ハイブリッドカーネル を使用しています。

ハイブリッドカーネルは、コンピューターのオペレーティングシステムで使用されるマイクロカーネルとモノリシックカーネルアーキテクチャの側面を組み合わせたカーネルアーキテクチャです。モノリシックカーネルとの類似性のため、このカテゴリは議論の余地があります。この用語は単純なマーケティングとして一部の人によって却下されました。従来のカーネルカテゴリは、モノリシックカーネルとマイクロカーネルです(ナノカーネルとエキソカーネルは、マイクロカーネルのより極端なバージョンと見なされます)。

8
Bob

; tl-dr-いいえ、Linuxは常にモノリシックです。

Linuxmodulesは、何らかの意味でmodularを意味する場合があります。他の人が指摘したように、モノリシックは通常、マイクロカーネルモノリシックカーネルを表します。従来のマイクロカーネルにはこれらの機能しかありませんが、

  1. スケジューリング
  2. メモリ管理
  3. プロセス間通信

ハードウェアドライバーはありませんプロトコルスタックfilesystemssuspend/resumeクロック管理、メインカーネルなど。これらはすべてのユーザータスクに対してidenticalです(ただし、MMU /スケジューラーを介して異なる特権を持っている場合があります)。


Tanenbaumの予測

  1. マイクロカーネルは未来です
  2. x86が消滅し、RISCアーキテクチャが市場を支配する
  3. (それから5年後)全員が無料のGNU OSを実行します

PCとサーバーのプログラマーは笑うかもしれませんが、2つと3つは確かに存在する携帯電話の大半に当てはまります。 BlackBerry QNXが成功した場合、タネンバウムはすべてのアカウントで正しいでしょう。

また、多くの L1-hypervisors の下に micro-kernel があります。これは、ハイパーバイザーは通常、contextスイッチの横ではあまり機能しないためです。

どうやら3人がLinuxの成功を予測しているようです。 ;-)


microkernelsの引数は、すべてのモノリシックサブシステムが一度に複数の値を同期する必要があるということです。これを行うには、ロックを使用する必要があり、並列アーキテクチャに拡張すると Amdahlの法則 の影響を受けます。カウンターは、microkernelsが多数のIPCメッセージをもたらすことです。

主要な開発は、モノリシックカーネルでの競合を回避するための lock-free プログラミングの使用です。これにより、モノリシックカーネルでのロックを回避しながら、IPCオーバーヘッドも削減されます。最近、すべてのCPUがISAを拡張して、lock-freeアルゴリズムのより良いプリミティブを含めるようになりました。そのため、Linuxはおそらくしばらくの間モノリシックカーネルのままでしょう。

7
artless noise

このコンテキストでの「モノリシック」とは、単一の大きな実行可能ファイルのことではなく、あなたが言うように、Linuxは実行時のカーネルモジュールの動的な読み込みをサポートします。カーネルについて話すとき、「モノリシック」とは、オペレーティングシステム全体が「特権」モードまたは「スーパーバイザー」モードで実行されることを意味します。「マイクロカーネル」などのカーネルタイプを使用する他のタイプのオペレーティングシステムとは異なり、機能セットは特権モードで実行され、ほとんどのオペレーティングシステムはユーザー空間で実行されます。

マイクロカーネルの支持者は、コードが小さいほどバグが少なくなり、スーパーバイザーモードで実行するバグはユーザースペースコードよりもはるかに大きな問題を引き起こす可能性があるため、これが優れていると言います(セキュリティの脆弱性やシステムクラッシュが'カーネルパニック'​​)。一部のマイクロカーネルは、「形式的に検証」できるほど十分に小さいため、仕様に従ってカーネルが「正しい」ことを数学的に証明できます。 L4 はこの良い例です。

5
David Claridge

モノリシックカーネルは、単一のアドレス空間で完全に実行される単一の大きなプロセスです。単一の静的バイナリファイルです。すべてのカーネルサービスが存在し、カーネルアドレス空間で実行されます。カーネルは関数を直接呼び出すことができます。モノリシックカーネルベースのOSの例は、Linux、Unixです。

この投稿は、コンセプトをより理解するのに役立つと思います。

http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html

2
JIN007