カーネル 【kernel】
概要
カーネル(kernel)とは、オペレーティングシステム(OS)の中核となるソフトウェア。動作中のプログラムの実行状態を管理したり、ハードウェア資源を管理してプログラムがハードウェアの機能を利用する手段を提供したりする。カーネルはコンピュータの起動時にブートローダなどによって一番最初に起動され、特権モードなど強い権限を持つ特別な動作モードで実行される。起動後は電源断や再起動まで常駐し続け、プログラムの起動や終了後の後始末(専有していたメモリ領域の回収など)を行う。
CPUやメインメモリ、ストレージ、入出力機器、ネットワークなど、コンピュータを構成するハードウェア資源(デバイス)を管理する。装置の仕様の違いによらず同じ手順でアプリケーションソフトから利用できるよう抽象化された操作手段を提供する。
また、メモリ空間から各プログラムに必要な容量を割り当てたり(メモリ管理)、複数のプログラムを並行して実行できるようCPUが実行するプログラムを短時間ごとに細かく切り替えたり(プロセス管理)、実行中のプログラム間でデータをやりとりする手段(プロセス間通信)を提供したりする。
カーネルがアプリケーションに提供する機能や、それを利用するために呼び出す命令や関数などのことを「システムコール」(system call)あるいは「スーパーバイザコール」(SVC:supervisor call)などという。
モノリシックカーネルとマイクロカーネル
OSの機能をほとんどカーネル内部に取り込み、巨大な単一のカーネルとして機能させる設計方針を「モノリシックカーネル」(monolithic kernel)、カーネルには最低限の機能しか実装せず、大半の機能をモジュール化して外部化する設計方針を「マイクロカーネル」(microkernel)という。
モノリシックカーネルは全体を緊密に連携でき性能上有利だが、一部の問題がシステム全体を巻き込みやすく安定性を確保するのが難しくなる。マイクロカーネルは外部化されたモジュールと通信するための性能上のロス(オーバーヘッド)が生じるが、問題を局所化しやすく部分的な修正や入れ替えなども行いやすい。
両者の特徴を併せ持ち、全体としてはモノリシックカーネルとして設計されているが、限られた一部の機能をモジュール化してユーザー空間で実行するようにした設計を「ハイブリッドカーネル」(hybrid kernel)という。近年のWindowsやmacOSなどがこれに分類される。