モノリシックカーネルとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > モノリシックカーネルの意味・解説 

モノリシックカーネル

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/12/27 01:12 UTC 版)

モノリシックカーネルの概念図

モノリシックカーネルmonolithic kernel)とは、オペレーティングシステム(以下、OSと略記)におけるカーネルの構造、および設計思想を指す。「入出力機能やネットワーク機能、デバイスのサポートなどOSの一般的な機能」をカーネルと同一のメモリ空間に実装・実行する手法を言う。

代表的なモノリシックカーネルOSとしては、古典的なUNIXその派生OSがあげられる。

モノリス(monolith)とは「一枚岩」の意であり、モノリシック(monolithic)とは「一枚板の」という形容詞である。ここでは「一体化したカーネル」という意味で使われている。

マイクロカーネルとの比較

OSの構成要素を単一のメモリ空間で実行するモノリシックカーネルに対し、OSを構成する幾つかの要素・機能をカーネル空間から切り離し、外部モジュール化するなどで実装する手法をマイクロカーネルと呼ぶ。

モノリシックカーネルの設計思想および概念それ自体は旧来より存在するが、マイクロカーネルという概念・実装の登場によって、対概念として要請され、命名された(レトロニム)。

カーネル実装方式とその議論

モノリシックカーネル方式は、より近代的な設計手法とされるマイクロカーネル方式のOSに比べ、OSの機能のほとんどすべてが単一のメモリ空間で行なわれるゆえ、同一の処理を行う際に費やされるコンテキストスイッチプロセス間通信などによるオーバーヘッドは相対的に少ないものとなり、実効パフォーマンスにおいて有利であるといった見解がある。実際にプロセッサの動作クロックが数MHz - 数十MHz程度に留まっていた時代には、乱発されるコンテキストスイッチなどの実行コストの問題は深刻なものであった。1980年代にデビューした商用UNIXは、そのほとんどがモノリシックカーネル方式を採用している。

しかし、プロセッサの処理速度は20世紀末から21世紀初頭にかけて長足の進歩を遂げた。また、マイクロカーネル側の実装における高速化技法の進展、必要に応じて一部パフォーマンスを要求されるサブシステムのみカーネル空間に取り込む実装も登場し、モノリシックカーネルのパフォーマンスにおける原理上の優位性は小さくなった。

2005年現在では、純然たるモノリシックカーネル方式で開発する利点は少ないとする意見に収束して来ている[要出典]。しかし、同等の機能を実装した場合にその原理上実行時の(コンピュータのメモリ上の)OSカーネルのフットプリントを比較的小さなものに留めておきやすいこと、ノンプリエンプティブ (non-preemptive) 制約を付加すれば、サービス実装を行う時に考慮するべきことが減り、開発が楽になることなどが利点として挙げられる。

一方、モノリシックなカーネルにさまざまな機能を取り込むことで巨大化することによる欠点・弊害としては、OSの機能を動的に切り替えたり更新したりすることが(マイクロカーネルと比較した場合に)困難なものになりやすいことなどが挙げられる。

研究開発の世界では、カーネルの機能を最小限にとどめるマイクロカーネルが主流になった1990年代当初、モノリシックカーネルは時代遅れとされてきた。しかし、実装レベルでの差が動作上の致命的な設計問題であるはずもなく、現在では必要な機能を必要な性能レベルで提供できれば問題ないという形での議論終結が図られている。

Solaris / HP-UX / AIXや日本の国産UNIXの系統も全てモノリシックカーネルを基礎とするカーネルを使用している。また、x86系PCでのUNIX互換機能提供を目指して作られたLinux[1]では基本的にモノリシックカーネルを採用しているが、実行時に読み込むカーネルモジュールを設けるなど、実行時の柔軟性を高めている。

Windows NTは、当初よりマイクロカーネル方式での実装を模索していたが、オーバーヘッドを削減するためにNT 4.0でWindowsサブシステムとグラフィクスデバイスドライバがカーネル空間から直接見える様に修正された。さらにWindows 2000以降では、ハードウェア管理機能の一部をマイクロカーネル直轄のモジュールとしての外部モジュールからカーネル制御部本体による制御方式に切り替えており、純粋なマイクロカーネルから外れた実装になっている。NT4.0では800キロバイト弱だったNTOSKRNL(Windows NT系のカーネルシステム)のフットプリントは、Windows XPでは2メガバイト強にまで肥大している(ただしWindows Vistaにおいては、動作の安定性やシステム全体の堅牢性に対する配慮から一部「先祖返り」を起こしている)。 マイクロカーネルとしての構造は依然残されているため、マイクロカーネルとモノリシックカーネルの折衷をとったハイブリッドカーネルとでも呼ぶべき実装になっている。

またMachから派生したmacOSも、BSDサブシステムやファイルシステム、ネットワークなどをカーネル空間に統合しており、純粋なマイクロカーネルから離れた実装になっている。Windowsと同様、マイクロカーネルとモノリシックカーネル両方の利点を活かした設計である。

有名な論争

モノリシックカーネルとマイクロカーネルについては、Linuxの作者リーナス・トーバルズMINIX(ミニックス)の作者アンドリュー・タネンバウム1992年の論争が有名である。

モノリシックカーネルの採用例

脚注

  1. ^ 初期のLinuxは、モジュールとなるコードをオブジェクトファイルの形でカーネルから分離することができる。ただし、カーネル側に受け皿となるインターフェースがモジュール毎に用意されている必要がある。現在はモジュールのインターフェースに対する抽象化が行われ、モジュールをカーネルの構築状態に依存することなく追加できる。

外部リンク


モノリシックカーネル

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/16 14:38 UTC 版)

カーネル」の記事における「モノリシックカーネル」の解説

詳細は「モノリシックカーネル」を参照 モノリシックカーネルでは、全OSサービスはひとつのカーネル空間内に存在し、カーネルスレッド上で実行されるこの手法は強力なハードウェアアクセスを提供するUNIX開発者ケン・トンプソンは、モノリシックカーネルの方がマイクロカーネルより実装容易だとしている。主な欠点システム構成要素間の依存関係複雑さである。例えば、デバイスドライババグがあっただけでシステム全体クラッシュするし、大きなカーネル保守が非常に困難である。 Unix系OS伝統的に採用してきたモノリシックカーネルは、OS中核機能デバイスドライバ全て含んでいた。デバイスドライバスケジューラメモリ管理ファイルシステムネットワークプロトコルスタックなど、多くプログラムが必要とするがライブラリとしてユーザー空間実行することができない機能は、全てカーネル空間置かれた。それら全サービスへのアクセス可能にするため、数多くシステムコールアプリケーションに対して提供されている。 必要とされないサブシステム伴って最初からロードされるモノリシックカーネルは、より汎用的な意味ではあるが、特定ハードウェア向け設計されたものよりもチューニングが可能である。LinuxFreeBSDなどの現代のモノリシックカーネルはUnix系OSであり、実行時モジュールロードする機能備えており、必要に応じて容易に機能拡張でき、同時にカーネル空間動作するコード量をなるべく最小抑えることができる。モノリシックカーネルには次のような長所がある。 関係するソフトウェア少ないので、より高速である。 カーネル1つソフトウェアであるため、ソースコード量もコンパイル後の実行ファイル大きさ小さくなるコード少ないのでバグ少なく結果としてセキュリティ問題比較少ない。 モノリシックカーネルはシステムコール延長動作する部分がほとんどである。システムコール一般にテーブル構造保持されるインタフェースであり、ディスク操作などのカーネル内サブシステムへのアクセスを行う。プログラム内でライブラリルーチンを呼び出すと、その中で要求チェックしてコピーしシステムコールに渡す。したがってそれほど重い呼び出しではない。Linuxカーネルモノリシックだがかなり小さくできる。これは、ローダブル・カーネル・モジュール機能と、カスタマイズ容易なためである。実際フロッピーディスク1枚カーネルだけでなく多数ユーティリティ搭載しそれだけで完動するOSとすることもできる(最も有名な例として muLinux(英語版) がある)。このカーネル小型化できる能力があるため、Linux組み込みシステム急速に採用増えている(組み込みLinux)。 このようなカーネルOS中核機能デバイスドライバから成り実行時モジュールロードする機能備えている。それらによって、下層ハードウェアについての豊富で強力な抽象化提供する。それらは単純なハードウェア抽象化小さなセット提供しサーバ呼ばれるアプリケーション使ってさらなる機能提供する。この特定の手法ハードウェア上の高度な仮想インタフェース定義しプロセス管理並行性管理メモリ管理といったスーパーバイザモード動作するいくつかのモジュールOSサービス実装し、システムコールでそれらを呼び出せるようにしている。しかし、このような設計には以下のような短所制約がある。 カーネル内コーディング難しい。標準Cライブラリ使えずデバッグにはGNUデバッガなどのソースレベルのデバッガを必要とするためである。そのため、開発中コンピュータ頻繁にリブートする必要がある。これは単に開発者だけの問題ではない。デバッグ難しということはバグをつぶすのが難しということであり、カーネル内バグ残存しやすいということでもある。 カーネル内バグ重大な副作用引き起こすカーネル内関数はどれも特権状態で動作するので、全く無関係なデータ構造を(カーネル空間内でもユーザー空間内でも)容易に壊すことができる。モジュール群は同一アドレス空間動作するので、バグによってシステム全体ダウンさせることがあるカーネル肥大化しやすく、肥大化すると保守困難になるコード結合度強くモジュール化して分離したとしても、その分離を正しく行うのは困難である。 移植性が低い。動作させるアーキテクチャごとに書き直し必須となる。

※この「モノリシックカーネル」の解説は、「カーネル」の解説の一部です。
「モノリシックカーネル」を含む「カーネル」の記事については、「カーネル」の概要を参照ください。

ウィキペディア小見出し辞書の「モノリシックカーネル」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「モノリシックカーネル」の関連用語

モノリシックカーネルのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



モノリシックカーネルのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのモノリシックカーネル (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのカーネル (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS