カーネル

カーネル(kernel)とは、アプリケーションハードウェアの間に入ってそのやりとりを管理する重要なソフトウェアのこと。

カーネルはOSの中心となる部分のこと。OSとはオペレーティングシステムのことで、コンピュータを動かすための基本ソフトのことである。このシステムは階層的に構築されており、カーネルはその中心部に位置する。

カーネルの役割は、各アプリケーションが使用するリソースを制御することである。例えば、CPUメインメモリハードディスクなどのリソースを制御することで、各アプリケーションはスムーズに動作することが可能となる。

カーネルはそれ単体では、コンピュータを動作させることはできない。シェルデーモンを含めてあらゆるアプリケーションを制御することでタスクが可能となる。ソフトとハードのインタフェースとしては、システムコールやプロセス管理、デバイス管理などがある。

このうち、カーネルのプロセス管理には、マルチタスクというものがある。CPUの一つのコアが一度にできる作業は一つである。そのため、複数の作業を並行処理することは原則できない。しかし、タスクを短く区切ってCPUへ処理させると、まるで並行処理しているかのように見える。カーネルはこのようなプロセス管理を行っている。

プロセスが発生すると次に実行待ちの待機状態へ移る。そして実行中から終了へと処理が移っていくわけだが、カーネルはプログラムの優先度などを考慮しながらスケジューリングし、それを制御しているのである。

かつてはアプリ自体がプロセッサの空き時間を他のアプリに開放するノンプリエンプティブマルチタスクが多かった。この方法だと、プロセッサを占有し続ける自己中なアプリが存在すると、他のアプリの動作が滞る。そこで強制的に割り込んで作業を行うプリエンプティブマルチタスクが生まれた。

また、複数のソフトやプロセスが一つのCPUを使えるようにするには、プロセッサの状態を保持したり、元に戻したりする必要がある。この過程をコンテキストスイッチという。カーネルは、優先度の高いタスクを実行させるために、実行中のタスクの状態を保存したり復元したりしてコンテキストスイッチを行う。

カーネルの意味を簡潔に説明すると

OSの中核部分となるソフトウェアのこと。