Linuxが一体型カーネルと呼ばれるのはなぜですか?


208

Linuxは一体型のカーネルだと私は読んだ。モノリシックカーネルとは、完全なカーネルコードをコンパイルして実行可能ファイルにリンクすることを意味しますか?

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

回答:


290

モノリシックカーネルとは、すべてのサービス(ファイルシステム、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マイクロカーネルを参照しています。他人の最近の仕事を非難するのは私の意図ではありません。


5
興味深いことに、Linus Torvaldsは、Andew TanenbaumのLinuxを作成したときのMINIXに大きく影響されました。ただし、MINIXはマイクロカーネル設計に基づいていますが、Linuxはモノリシックカーネルを使用しています。
Martin Liversage 2009年

2
@Martin Liversage:影響を受けるよりもイライラする:)私はそれを反映するように私の回答を編集しました。
Tim Post

25
@DigitalRoss:これに答えると、私の受信トレイが表示されます。Linusは、MinixやMachの愛好家に比べて飼いならされています。
Tim Post


3
@p_lマイクロ、モノリシック、ハイブリッドの違いについて話す必要がある時期にかなり近いと思います。それはかなり良い質問かもしれません:)
Tim Post

15

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

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

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


9
Windowsは間違いなくモノリシックカーネルです。
Adam Rosenfield、

7
@アダム:私は同意しません。古いスタイルの16ビットWindows 、Windows 95と同様モノリシックカーネルでした。しかし、すべてのサーバーバージョンとVistaおよび7を含むWindowsベースのNTベースのエディションは、使用する「マイクロカーネル」の定義に応じて、明らかにマイクロカーネルまたはハイブリッドです。
CesarGon 2009年

8
プリンタドライバは、リング0で実行していないからといって、それマイクロカーネル:)ことはありません
CAF

7
@caf:en.wikipedia.org/wiki/Windows_NT_kernelおよびen.wikipedia.org/wiki/Comparison_of_operating_system_kernelsをご覧になることをお勧めします。Windows NTと、Vista、7、およびServersを含むその後継が「ハイブリッドカーネル」として記述されていることがわかります。OSの2つの大きなサブシステムは、プリンタードライバーだけでなく、完全にユーザーモードで実行されます。:-)
CesarGon 2009年

7
私のコメントはやや口の利きそうなものでした。「ハイブリッド」の指定は、情報がないので役に立たないようです。
caf

10

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

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

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

メインカーネルには、ハードウェアドライバープロトコルスタックファイルシステムサスペンド/レジュームクロック管理などはありません。これらは、すべてのユーザータスクと同じです(ただし、MMU /スケジューラーを介して異なる特権を持つ場合があります)。


タネンバウムの予測

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

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

また、多くのL1-ハイパーバイザーは、持っているマイクロカーネルの下を。これは、ハイパーバイザーは通常、コンテキストの切り替え以外にはあまり機能しないためです。

どうやら3つはLinuxの成功を予測しています。;-)


マイクロカーネルの議論は、モノリシックサブシステムのすべてが一度に複数の値を同期する必要があるということです。これを行うには、ロックを使用する必要があり、並列アーキテクチャに拡張するとアムダールの法則の影響を受けます。カウンターは、マイクロカーネルが大量のIPCメッセージを生成するということです。

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


1
はい、私はタネンバウムがハードを意味したことを知っています。しかし、GNUはLinuxに切り替えたので、表現はおかしい。
ノイズ

モバイルデバイスでx86が使用されないのはなぜですか?他のアーキテクチャの利点は何ですか?
Abdul

1
アブドゥルこの質問を見てください。
2015

はい、それらは重要です。x86 SOC(システムオンチップ)を作成することは困難です。SOCベンダー(Broadcom、Freescaleなど)が購入できるx86を作成するための標準HDLコードはありません。
アートレスノイズ2015

9

ウィキペディアから:

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

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

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


7
カーネル空間で何かをする場合は、どこかで「ハイブリッドケルケル」を使用することを忘れないでください。SCNR ;-)
ユルゲンA.エアハルト

1
Windows NTは常にハイブリッドシステムでした。カーネルは厳密にはハイブリッドではないかもしれませんが、カーネルの一部として何を数えるかという疑問にぶつかります(たとえば、winapiはユーザー空間サービスとして実装されています)
p_l

5

この文脈での「モノリシック」とは、単一の大きな実行可能ファイルが存在することを指しているわけではなく、Linuxは実行時にカーネルモジュールの動的ロードをサポートしています。カーネルについて説明する場合、「モノリシック」とは、オペレーティングシステム全体が「特権」モードまたは「スーパーバイザー」モードで実行されることを意味します。「マイクロカーネル」などのタイプのカーネルを使用する他のタイプのオペレーティングシステムでは、最小限の機能のセットは特権モードで実行され、ほとんどのオペレーティングシステムはユーザー空間で実行されます。

マイクロカーネルの擁護者は、コードが小さいほどバグが少ないことを意味し、スーパーバイザーモードで実行されているバグはユーザー空間コードよりもはるかに大きな問題を引き起こす可能性があるため、これはより良いと言っています'カーネルパニック'​​)。一部のマイクロカーネルは、「正式に検証」できるほど十分に小さいため、仕様に従ってカーネルが「正しい」ことを数学的に証明できます。L4はこの良い例です。


ソースを確認してください。ウィキページは引用されていません。www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/...
monksy

2

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

この投稿は、概念をより理解するのに役立つと思います。

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


このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.