ホーム › コラム › 【仕組み解説】Linuxカーネルはどうやってコンピュータを動かしているのか — OS の心臓部を図解 Feb 19, 2026 最終更新: Feb 19, 2026 【仕組み解説】Linuxカーネルはどうやってコンピュータを動かしているのか — OS の心臓部を図解 OS・コマンドLinuxカーネル仕組み解説 Linuxカーネルのレイヤー構造 ユーザー空間 アプリ シェル ライブラリ システムコール(open / fork / read / write ...) カーネル空間 プロセス管理 fork / exec スケジューラ メモリ管理 仮想メモリ ページング ファイルシステム VFS / ext4 inode デバイス ドライバ カーネルモジュール CPU メモリ ディスク NIC / GPU Linuxカーネルのレイヤー構造 ひよこ Linuxカーネルってよく聞くけど、そもそもカーネルって何なの? ペンギン先生 カーネルは「OSの心臓部」だよ。アプリケーションとハードウェアの間に立って、CPUやメモリ、ディスクなどのハードウェア資源を管理してくれる中核プログラムなんだ。カーネルがいないと、アプリは直接ハードウェアを操作しなきゃいけなくなって、大混乱になるよ ひよこ ユーザー空間とカーネル空間っていう区別があるって聞いたけど、なんで分かれてるの? ペンギン先生 セキュリティと安定性のためだよ。カーネル空間はハードウェアに直接アクセスできる特権モードで、ユーザー空間は普通のアプリが動く制限されたモード。もしアプリが自由にメモリやディスクを触れたら、他のアプリのデータを壊したり、OS自体をクラッシュさせたりできちゃうからね。この境界を越えるときに使うのが「システムコール」なんだ ひよこ システムコールってどういうもの? ペンギン先生 アプリがカーネルに「これやって!」とお願いするための窓口だよ。たとえばファイルを開くときの open()、プロセスを作るときの fork()、データを読むときの read() とかがシステムコールだね。アプリはこの窓口を通さないとハードウェアに触れない仕組みになっているんだ。Linuxには400以上のシステムコールがあるよ ひよこ プロセス管理ってどういうことをしてるの? fork とか exec って何? ペンギン先生 プロセスは「実行中のプログラム」のことで、カーネルはこれを生成・管理・終了させる役割を持ってるよ。fork() は今のプロセスをコピーして子プロセスを作る仕組みで、exec() はそのプロセスの中身を別のプログラムに置き換える仕組み。たとえばターミナルでコマンドを打つと、シェルが fork() で自分のコピーを作り、exec() でコマンドのプログラムに差し替えて実行するんだ。さらにスケジューラがCPU時間を各プロセスに公平に配分してくれるから、複数のアプリが同時に動いているように見えるんだよ ひよこ メモリ管理はどうなってるの? 仮想メモリとかページングとか聞いたことあるけど… ペンギン先生 各プロセスには「仮想メモリ空間」という自分専用のメモリ領域が与えられるよ。実際の物理メモリとは別のアドレスを使っていて、カーネルがページテーブルで変換してくれるんだ。メモリは「ページ」という4KBの小さなブロック単位で管理されていて、これをページングと呼ぶよ。物理メモリが足りなくなったら、あまり使われてないページをディスクに退避させる「スワップ」という仕組みもある。だから物理メモリ以上のメモリを使えるように見えるんだね ひよこ ファイルシステムの管理もカーネルがやってるの? VFS とか ext4 って何? ペンギン先生 そうだよ。Linuxには VFS(仮想ファイルシステム)という抽象化レイヤーがあって、ext4 でも XFS でも NFS でも、アプリからは同じ open() / read() / write() で操作できる仕組みになっているんだ。ext4 はLinuxで一番よく使われるファイルシステムで、ファイルの実体は「inode」という管理情報と実際のデータブロックで構成されてるよ。inode にはファイルサイズ、パーミッション、タイムスタンプ、データブロックへのポインタが入ってるんだ ひよこ デバイスドライバもカーネルの仕事なの? ペンギン先生 そう、デバイスドライバはハードウェアを操作するためのカーネル内のプログラムだよ。ネットワークカード、GPU、USBデバイスなど、あらゆるハードウェアにはドライバが必要なんだ。面白いのは「カーネルモジュール」という仕組みで、ドライバを再起動なしに動的に読み込んだり取り外したりできること。lsmod コマンドで今ロードされてるモジュール一覧が見られるし、modprobe で追加もできるよ ひよこ カーネルモジュールがあるから、全部のドライバを最初から入れなくていいってこと? ペンギン先生 そのとおり!必要なときだけモジュールをロードすればいいから、カーネル本体をコンパクトに保てるんだ。これはLinuxカーネルが「モノリシックカーネル」でありながら柔軟性を持っている理由の一つだね。ちなみにLinuxカーネルのソースコードは3000万行以上あって、世界中の開発者が協力して開発している、人類最大級のオープンソースプロジェクトでもあるんだよ ひよこ 3000万行ってすごい…! カーネルのバージョンアップでも互換性は保たれるの? ペンギン先生 Linuxカーネルには「ユーザー空間のABIは壊さない」という厳格なルールがあるよ。つまりシステムコールの互換性は維持されるから、古いアプリでも新しいカーネルで動くんだ。これはLinus Torvalds自身が強く守っているポリシーで、カーネル内部はどんどん変わっても、外から見える部分は安定しているのがLinuxの強みだね