3.2.2 OS カーネルとは?
OSにとって、カーネルとはその心臓であり、脳であり、脊髄となるものです。カーネルがOSの本質そのものであり、そのほかは豪華なオマケと言っても差し支えありません。カーネル自身が、OSにとっての「インフラ」であるとイメージしてください。
カーネルの主な役目は多数ありますが、重要なのは「裏で何が起きているかを隠いん蔽ぺいし、便利なインターフェースを提供する」という事実です。カーネルが存在することで、開発者は、ハードウェアの詳細を理解せずとも、またほかのアプリケーションへの影響を深く意識せずとも、アプリケーションを作ることが可能となります。
OSとしての処理は、原則的にカーネルを通じて行なわれます。カーネルの役割は多岐にわたりますが、図3.5に6つの機能を挙げました。本章では、そのうちの5つ(1、2、3、5、6)をピックアップしてご紹介します(最後の1つ「(4)ネットワークスタック」は第6章で取り上げます)。
(1)システムコールインターフェース
プロセス/スレッドからカーネルへのインターフェースです。アプリケーションがOSを通じて何かを行ないたいときは、システムコールと呼ばれる命令を利用することで、本インターフェースを通じて、カーネルに対して命令を出します。銀行や役所の、受付窓口をイメージすると良いかもしれません。
たとえばディスク上のデータを読み書きしたい場合や、ネットワーク通信を行ないたい場合、新しいプロセスを生成したい場合など、該当するシステムコールを呼び出せば、その機能を利用できます。その裏で具体的に何が行なわれているか、 プロセスは意識する必要がありません。
図3.6のように、ディスクアクセスもネットワークリクエストも、プロセスから見た場合、カーネルに対するシステムコールという観点では差がありません。
(2)プロセス管理
プロセスを管理します。OS上では数十、数百、数千といった数のプロセスが稼働することができます。それに比べて、物理サーバーでのCPUコア数は、多くても数十といった数しかありません。いつ、どのプロセスが、どれだけCPUコアを利用できるのか、処理優先度をどうつけるか、そういったことを管理するのが本機能の役割です。
たとえば、遠足における引率の先生のようなイメージです。「はい、みんな並んでー」「男子と女子は交互に座ってー」などです。この機能がない場合、そもそもOSが成り立たないので、OSにとって最も重要な機能と言えます。
(3)メモリ管理
メモリ領域を管理します。プロセス管理はCPUコアを考慮しましたが、メモリ管理では物理メモリ空間の上限を考慮します。プロセスが利用する独立したメモリ空間を確保したり、お互いが参照すべきでない領域を守るための独立性を管理したりするのも、メモリ管理機能の役目となります。
この機能がない場合、各プロセスは自分以外のプロセスが利用しているメモリ領域の範囲も把握する必要があり、そのハードウェアの神でもない限り、アプリケーション開発が非常に難しいものとなります。
(4)ネットワークスタック
ネットワークについては、第6章でより詳しく説明します。
(5)ファイルシステム管理
これはファイルシステムへのインターフェースを提供します。図3.7をご覧ください。
ファイルシステムとは、OSの機能の1つとして提供され、物理ディスクに格納されたデータを管理する機能を指します。
皆さんが普段利用する「文書ファイル」や「表計算ファイル」がファイルです。物理ディスクに書き込まれているデータはただの「01011110…」などといった数値の集まりであり、区切りなどもなく、そのままでは非常に扱いにくいものです。ファイルシステムがあるおかげで、アプリケーションは「ファイル」という単位でデータを作成したり、更新したり、削除したりできるようになります。
管理機能には主に、ディレクトリ(フォルダ)構造の提供、アクセス管理、高速化、耐障害性の向上が含まれます。
(6)デバイスドライバー
ディスクやNICなどの物理機器とのインターフェースを提供します。たとえばディスクやNICは、多数のベンダーが独自の製品を提供しています。
それぞれに対応したアプリケーションを作成することは現実的ではないため、カーネルはデバイスドライバーを利用し、その下にある物理デバイスを隠蔽する役目を果たします。各機器のベンダーが、OSに対応したデバイスドライバーを用意し、そのOSの標準的なデバイスとしてカーネル経由で利用できるようにします。