コンピュータの電源を入れた瞬間から終了するまで、オペレーティングシステムは数千ものタスクを同時に処理しています。この画面も、キーボードからの入力も、すべてOSの緻密な管理の下で行われています。この記事では、OSが動作する10の主要ステップを分析し、カーネル、仮想メモリ、システムコールなどの主要概念を分かりやすく説明します。開発者なら必ず知っておくべきOSの内部動作原理を、今すぐ確認しましょう。

ブートプロセスとカーネルの始まり
電源供給とファームウェアの役割
電源ボタンを押すと、CPUは最も基本的な状態で起動し、ファームウェアに組み込まれた特定のアドレスの命令を実行します。現代のシステムではUEFI、過去のシステムではBIOSがこの役割を担います。このファームウェアは、ディスクを見つけてブートローダー(GRUB、iBoot、Bootmgr)に制御を渡すことが主な任務です。
カーネルのロードとハードウェア特権の取得
ブートローダーはディスクからカーネルを見つけてRAMにロードします。この時点からCPUはカーネルコードをリング0という最上位の権限で実行します。この権限レベルはCPUが強制する保護メカニズムであり、カーネルだけがすべてのハードウェアに直接アクセスできます。これは、不正なプログラムがシステム全体をダウンさせることを防ぐ核心的な設計です。
仮想メモリの秘密
MMUとページテーブルの動作原理
カーネルは各プロセスに仮想アドレス空間を提供します。これは実際の物理メモリアドレスではなく、MMU(メモリ管理ユニット)がページテーブルを通じて変換する仮のアドレスです。メモリは通常4KBのページ単位で管理され、各プロセスは独立したページテーブルを持ちます。これにより、あるプログラムのエラーが他のプログラムのメモリを侵害することを根本的に防ぎます。
ページフォールトとディスクスワップ
プログラムがRAMにないページにアクセスしようとすると、MMUがページフォールトを発生させてカーネルを起こします。カーネルはディスクから該当ページをロードし、プログラムを再開します。この過程でTLB(トランスレーション・ルックアサイド・バッファ)が最近の変換情報をキャッシュしてパフォーマンスを最適化します。例えば、16GB RAMのシステムで20GBのプログラムを実行できるのは、この仮想メモリメカニズムのおかげです。

ファイルシステムとプロセス管理
inodeとジャーナリングファイルシステム
ファイルはハードディスクにinode(インデックスノード)として保存されます。inodeはファイルのサイズ、権限、タイムスタンプ、実際のデータブロックポインタを含みます。ファイル名はディレクトリに別途保存されるため、1つのファイルに複数の名前をリンクできます。最新のファイルシステム(EXT4、NTFS、APFS)はジャーナリング機能を使用して、書き込み操作の前に意図を記録します。これにより、突然の電源断時のデータ破損リスクを大幅に軽減します。
PID 1とシステムコールの重要性
カーネルの初期化が完了すると、最初のユーザー空間プロセスであるPID 1が生成されます。このプロセスは他のすべてのプロセスの祖先となり、終了するとカーネルパニックでシステム全体がダウンします。以降、すべてのプログラムはハードウェアに直接アクセスできず、システムコールを通じてカーネルに要求する必要があります。Linuxには約400のシステムコールがあり、forkとexecは新しいプロセスを生成する最も重要なシステムコールです。
スケジューラーとスレッドの動作方式
コンピュータに8つのCPUコアがあっても、数百のプロセスを同時に実行するためにスケジューラーが必要です。最新のLinuxは「最も早い適格仮想デッドライン優先」方式を使用して、CPU時間を公平に分配します。また、1つのプロセス内で複数のタスクを並列処理するためにスレッドを使用します。スレッドはメモリとファイルディスクリプタを共有しますが、スタックとプログラムカウンタはそれぞれ独立しています。ただし、共有メモリによるレースコンディションの問題が発生する可能性があるため、GoのゴルーチンやRustの所有権システムなどのツールでこれを防ぐ必要があります。
| プロセス管理方式 | メモリ共有 | 通信方法 | 主な特徴 |
|---|---|---|---|
| プロセス (fork/exec) | 独立 | IPC (パイプ、ソケット) | 安全だがオーバーヘッド大 |
| スレッド (pthread) | 共有 | 共有メモリ | 高速だが同期化が必要 |
IPCと割り込みの連携
異なるプロセス間でデータをやり取りするためにIPC(プロセス間通信)を使用します。1973年に発明されたパイプは今でも最も強力なツールで、catやgrepのような別々のプロセスの出力を入力に接続します。また、キーボードやマウスなどのハードウェア入力は割り込みを発生させ、CPUが即座に反応します。例えば、Wi-Fiでデータを受信すると割り込みが発生し、ネットワークスタックが活性化されてアプリケーションがデータを使用できます。
![]()
オペレーティングシステムの完全な終了プロセス
SIGTERMとSIGKILLシグナルの違い
終了ボタンを押すと、PID 1がすべてのプロセスにSIGTERMシグナルを送信し、クリーンアップを要求します。プロセスは状態を保存して終了しますが、一定時間経過しても応答しない場合はSIGKILLシグナルが送信され、強制終了されます。その後、ファイルシステムがジャーナルをフラッシュし、ドライバーがハードウェアを解放し、カーネルがメモリをディスクに同期します。
OS概念学習の重要性
オペレーティングシステムは単なるソフトウェアではなく、コンピュータのハードウェアとソフトウェアを結ぶ重要な階層です。ブートから終了までのプロセスを理解することで、プログラミング時のパフォーマンス最適化とデバッグ能力が大幅に向上します。例えば、メモリリークの問題を解決する際、仮想メモリとページテーブルの動作を理解していれば、より効果的なアプローチが可能になります。
📅 情報基準日: 2024-05-24
