Linux入門

linux カーネルの種類とは?

カーネルの設計にはモノリシックカーネルとマイクロカーネルがあります。それぞれの特徴と、Linuxカーネルの立ち位置、LTSなどのバージョンの種類をまとめました。

暗い部屋で複数のモニターに表示されたコードに向かう人

Linuxは普段目にすることは少ないものの、多くのWebサービスがサーバー側のOSとして利用しており、なくなれば日常生活に支障が出るほど普及しています。このLinuxで中心的な役割を果たすのが、linux カーネルです。ここでは、カーネルの設計の種類であるモノリシックカーネルとマイクロカーネル、そしてLinuxカーネルのバージョンの種類について紹介します。

カーネルとは

カーネルは、OSの中核としてハードウェアとアプリケーションの間に立つソフトウェアです。CPUの時間をどのプログラムに割り当てるか、メモリをどう管理するか、ディスクやネットワークなどの機器とどうやり取りするかを受け持っています。カーネルの基本はlinux カーネルとは?の記事でも紹介しています。

マイクロカーネル

マイクロカーネルは、CPUのスケジューリング、メモリ管理、プロセス間通信(IPC)など、ごく最小限の機能だけをカーネルに置く設計です。デバイスドライバやファイルシステムなど、それ以外の部分はユーザーモードで動く別のプログラム(サーバー)として扱います。

一部の部品に不具合が起きてもシステム全体が止まりにくく、部品の入れ替えもしやすいのがメリットです。その反面、部品どうしがメッセージをやり取りする回数が増えるため、処理のオーバーヘッドが大きくなりやすいといわれます。MachやMINIX 3、組み込み用途で使われるQNXなどが代表例です。

モノリシックカーネル

モノリシックカーネル(「モノシリックカーネル」と書かれることもあります)は、CPUやメモリの管理に加えて、デバイスドライバ、ファイルシステム、ネットワーク機能、システムコールの処理など、幅広い機能を一つのカーネル空間にまとめる設計です。

機能どうしが同じ空間で直接やり取りできるため、処理が速いのがメリットです。一方で、カーネル内のどこかに不具合があると、システム全体が停止してしまう可能性があります。

Linuxはどちらのカーネルか

Linuxカーネルはモノリシックカーネルに分類されます。ただし、必要なドライバや機能を後から読み込める「ローダブルカーネルモジュール」の仕組みを持っており、モノリシックでありながら柔軟に機能を足したり外したりできます。lsmodコマンドを使うと、現在読み込まれているモジュールの一覧を確認できます。

$ lsmod | head

Linuxカーネルのバージョンの種類

Linuxカーネルには、開発の段階や用途によっていくつかの系統があります。

種類特徴
メインライン新機能が取り込まれる最新の開発版
安定版(stable)メインラインのリリース後、修正が加えられる版
長期サポート版(LTS)数年にわたって修正が提供される版。サーバーや組み込み機器で多く使われる

多くの人は、カーネルを直接選ぶのではなく、ディストリビューションが用意したカーネルをそのまま使います。使っているカーネルのバージョンはuname -rで確認できます。