モノリシックカーネルとは?長所や短所を踏まえた活用方法を解説!
kernel
モノリシックカーネルとは?長所や短所を踏まえた活用方法を解説!
アンドエンジニア編集部
2021.07.11
この記事でわかること
モノリシックカーネルとは、単一の塊で構成されているカーネルの設計方式です
モノリシックカーネルは古くから用いられており、基幹業務システムでも数多く利用されています
新規モジュール開発ではマイクロカーネルも活用されており、アプリケーション特性を踏まえて最適化を図ります

モノリシックとは?

monolithic

まず、モノリシック(Monolithic)の語源であるモノリス(Monolith)について説明します。モノリスとは、単一の岩や石から成る地学的な特徴を表しており一枚岩という際に指す単語です。モノリシックとは単一の塊で構成されている設計構成を指します。モノリシックの設計構成は巨大なものであったり、安全で堅牢な構造を意味します。

オペレーティングシステムとは?

カーネルの話をする上で前提となる、オペレーティングシステムについて説明しましょう。

オペレーティングシステム(OS)とは、コンピュータシステムを動作する際にユーザーとハードウェアを仲介するシステムソフトウェアを指します。OSは以下の基本機能を提供することで、ユーザーの利便性を向上します。

ハードウェアシステムの操作と管理機能 システムを稼働するためには、多くの実装ハードウェアを理解する必要があります。ユーザーが直接ハードウェアを操作することは容易ではありません。OSがハードウェアを操作し実行する形式をとります。ハードウェアアクセスはOSの他、ユーザーアプリケーションからもリクエストされる場合があります。そのため、ユーザーアプリケーションからのアクセスについてはハードウェアを隠蔽し、標準APIを提供することで管理性を向上させることが可能です。

システム資源の管理機能 コンピュータシステムはCPU・メモリー・ストレージをシステムバスで接続し、データ転送とコマンドリクエストを発行し処理します。これらのCPU・メモリー・ストレージ等をシステム資源と呼び、最適な管理が求められます。OSはシステム資源の利用と管理を効率的に行うことを目的としています。

その他にも、マン/マシンインターフェイスとなるマウス・キーボード・モニターや各種USBデバイス等の制御が必要です。同様に、通信装置や通信ポートの制御並びにプロトコル制御も発生します。そのため、OSは各デバイスに対応するドライバーを提供し、デバイス制御や通信プロトコルの制御を実行します。また、OSの各機能を提供するモジュール間の整合性をとり同期することでシステム資源の利用効率を向上します。さらに、システム資源へのアクセス方法をハードウェア性能を最大に発揮できるよう調整することがOSの主要な役割です。

ユーザーアプリケーションの実行と最適化機能 コンピュータシステムを利用する目的は、ユーザーが求める処理や手続きをコンピュータを利用し効率的に実行することです。OSはユーザーアプリケーションを実行するための標準APIを提供し、スケジューラ―機能により優先順位付けたり、システム資源を占有したりすることでより効率的にアプリケーションを利用可能にします。

カーネルとは?

カーネルとはOSの中核機能で、メモリー管理やCPU管理あるいはI/O管理等をプロセッサの特権を使って効率的に制御する機能を指します。ユーザーシステムコールによりカーネルへ要求を発行し、処理を依頼します。カーネルはユーザーのプログラムをプロセスとして管理し、要求に応じてシステム資源を割り当てファイルやI/Oのアクセス要求を受け付けます

OSの構成要素は?

OSは前述の機能を提供するために、次に挙げる代表的なモジュール群で構成されています。

カーネル OSの中核となる機能で、ユーザーアプリケーションとハードウェアを仲介します。電源投入後、ローダーによってメモリーにロードされ、ハードウェア管理と監視を開始し利用可能な状態に設定します。

デーモン ユーザーアドレス空間のメモリーに常駐し、サービスを仲介したり監視したりするプログラムを指します。主に、OSロード時にバックグラウンドで起動し常駐プロセスとして処理を行います。ユーザー空間に常駐しているため、プロセスステータスを確認するコマンドで稼働状況が確認可能です。

コマンド OSの処理を実行するシステムコマンドと、ユーザー処理を実行するコマンドやユーティリティーが提供されます。

ライブラリー OSの提供APIとなるシステムライブラリーや関連ライブラリーが提供されます。SDK等の開発環境として提供される場合もあります。

モノリシックカーネルとは?

monolithic kernel

モノリシックカーネルとはカーネルの実装方法の1つで、長い歴史を持ちます

カーネルの設計には信頼性を高めたり、処理能力を最大限に発揮させたりすためにプロセッサの特権やハードウェアの特定の処理を実行する必要があります。信頼性を高めるために不正アクセスを防止する機能を実装し、システム障害耐性を高めています。

実装方法として処理能力向上のため、カーネル内部のモジュールをスレッド化し一塊のプログラムとして動作させる方式です。それをモノリシックカーネルと言います。代表的なOSは、Unix系OSであるLinuxやFreeBSD等があります。

マイクロカーネルとは?

近年OSの保全性を高めるために、必要最小限の機能のみをカーネル空間に割り当てて、それ以外のサーバー機能群をユーザー空間で実行させる仕組みが実装されています。そのカーネル構造を、マイクロカーネルと言います。

代表的なOSは、AIXやmacOS等があります。マイクロカーネルは保全性が高いのですが、ユーザー空間とカーネル空間のやり取り(コンテキストスイッチ)が多発するため、性能効率は若干低下します。

モノリシックカーネルのメリットとデメリットは?

モノリシックカーネルのメリットは、いくつか挙げられます。

モノリシックカーネルは1つの塊で全ての処理が完結する特徴があります。そのため、プロセス間通信不要であり、全体の処理が高速であるメリットがあります。また、カーネル自体はカーネルアドレス空間に存在するため、カーネル開発者にとっては全体デバッグがしやすく全体の堅牢性を高めることができるでしょう。

モノリシックカーネルのデメリットとしては、1つの大きな塊のためメモリー使用量が大きい事が挙げられます。理由としては、1つの塊であるため不要なサービスを含めた全体の機能が組み込まれるためです。さらに、カーネル障害発生時はシステムダウンが発生するため、品質が安定しない場合は影響が非常に大きいです。同様に、カーネル開発者以外はメンテナンスしにくいこともデメリットとなります。

マイクロカーネルのメリットとデメリットは?

マイクロカーネルでは必要最低限の機能をカーネルアドレス空間で実行し、カーネル機能の多くをモジュールとしてユーザーアドレス空間で実行します。そのため、モジュール単位で開発やデバッグ等の品質チェックが可能です。同様に、カーネルのアップデート作業がシステム停止せずに実施できることがメリットとして挙げられます。加えて、必要最低限のサービスのみロード可能なため、メモリー使用量の低減が可能です。

マイクロカーネルのデメリットとしては、カーネルアドレス空間とユーザーアドレス空間を相互に通信する必要があるため通信オーバーヘッドが大きいことです。そのため、性能はモノリシックカーネルに比べて劣ります。その他、通信部分はモジュール間のやり取りが発生するため、通信デバッグについては難易度が高いと言えるでしょう。

カーネル実装方式のおすすめは?

ここでは、いくつかのポイントについてモノリシックカーネルとマイクロカーネルを比較していきましょう。

システム資源の活用方法 システム資源は有限のため、効率的な利用が望まれます。モノリシックカーネルは全ての機能を一括ロードするため、メモリー消費が大きくなります。マイクロカーネルは個々のモジュールを最小化し、必要なモジュールのみロード可能です。これにより効率的なシステム資源の利用が可能です。

問題発生時の影響範囲 モノリシックカーネルではカーネル全体が1つの塊なため、障害発生時のシステム停止リスクがあります。マイクロカーネルでは個々の提供モジュールに問題が生じても、その影響は他のサービスへ伝搬しにくい構造をとっています。同様に、マイクロカーネルでは多くの場合システム停止せずにアップデート作業が可能です。

開発効率や変更対応 モノリシックカーネルでは個々の機能追加の際のデバッグに工数がかかり、マイクロカーネルでは追加機能を中心に変更対応が可能です。旧来のシステムを更新せずに継続使用する基幹系システムでは、すでに堅牢性を高める品質検査が実施済みで実績のあるモノリシックカーネルが選択される傾向があります。

性能最適化 モノリシックカーネルは通信オーバーヘッドが発生しないため、処理性能の最適化が図られます。マイクロカーネルでは新規機能を追加したり、システム資源効率は高いものの通信オーバーヘッドやシステム資源の管理等の関連処理により性能は劣ります。

上記観点で考えると、旧来の変更頻度の少ない業務システムではモノリシックカーネルが適しているといえます。新規開発の効率性を優先すると、マイクロカーネルがおすすめです。なお、この観点はあくまでもカーネル実装上のポイントなため、利用にあたっては別途ユーザーアプリケーションやパッケージアプリケーションの視点での検討が求められるでしょう。

カーネル実装方式の弱点を改善する試みは?

モノリシックカーネルでは高速処理が可能であるメリットがありますが、一塊のカーネルのためコードサイズが大きくメモリー使用量が大きいです。現在では、不要なドライバーのロードを避けるためにカーネルモジュールローダーが利用され極力必要なモジュールのみロードできるよう改良されています。このカーネルモジュールローダー機能により、保全性は大幅に改善されました。

同様に、マイクロカーネルにおいても一部の性能影響の大きいサービスをカーネル空間で動作させる実装が進められています。これをハイブリッドカーネルと呼んでおり、モノリシックカーネルの持つ高速性と構造の単純性を活用し、マイクロカーネルの持つモジュラー管理・保全性に補完機能を取り込んだものです。

カーネルの特徴を理解しアプリケーション開発を効率的に進めましょう

optimization

これまでに、モノリシックカーネルの特徴とメリット・デメリットを紹介しました。今後ナノカーネルと呼ばれるマイクロサービスよりさらにメモリー使用量を削減した技術や、エクソカーネルと呼ばれるアプリケーションからのハードウェアアクセスを直接提供する技術の実験も進められています。そのため、カーネル実装の進化はまだまだ続くでしょう。

なお、実際のシステム構築においてはモノリシックカーネルとマイクロサービスを比較すると同時に、アプリケーション特性に応じた開発手法やパッケージ選定が求められます。そのため、システム選定のスキルを向上しさらなる知識の幅を広げることをおすすめします。

気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【無料個別転職相談会】アプリケーションエンジニア向け!リモート・在宅勤務で働きたい方へ
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【無料個別転職相談会】アプリケーションエンジニア向け!リモート・在宅勤務で働きたい方へ
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT