カーネルとはカーネルモードで動作するプログラムである。
CPUにはカーネルモードとユーザモードの2つがある。
CPUアーキテクチャによってはモードが3つ以上あり、x86_64アーキテクチャは4つのCPUモードがあるが、Linuxカーネルは2つしか使わない。
カーネルは、このモードという機能を使い、プロセスからデバイスに直接アクセスできないようにしている。
CPUがカーネルモードであれば何も制限がないのに対して、ユーザモードで実行中なら特定の命令を実行できないように制約をかけられる。
Linuxの場合はカーネルのみがカーネルモードで動作し、デバイスにアクセスできる。
それに対して、プロセスはユーザモードで動作するため、デバイスにアクセスできない。
そのため、プロセスはカーネルを介して間接的にデバイスにアクセスする。
カーネルは、デバイス制御に加え、システム内のすべてのプロセスが共有するリソースを一元管理し、システム上で動作するプロセスに配分する。