【ITニュース解説】Operating Systems — Day 1: Understanding Processes and the PCB
2025年09月22日に「Medium」が公開したITニュース「Operating Systems — Day 1: Understanding Processes and the PCB」について初心者にもわかりやすく解説しています。
ITニュース概要
OSはアプリを動かす際、各処理を「プロセス」として生成し、その情報を「PCB(プロセス制御ブロック)」で管理している。これがアプリをスムーズに動かすOSの基本的な仕組みだ。
ITニュース解説
普段私たちが何気なくスマートフォンやパソコンでアプリを起動すると、そのアプリはまるで魔法のようにすぐに動き始めるように見える。しかし、その裏側では、オペレーティングシステム(OS)が非常に複雑な手順を踏んで、アプリの実行を管理している。OSは単にプログラムを実行するだけでなく、その実行をスムーズに行い、他のアプリと競合しないようにするための様々な仕組みを持っている。
アプリが起動するということは、OSにとって「プロセス」というものを生成し、管理することを意味する。プロセスとは、単なるプログラムのコードそのものではなく、実行中のプログラムと、そのプログラムが動作するために必要なすべての資源(メモリ空間、CPUの状態、開いているファイル、ネットワーク接続など)をひとまとまりにした実行単位のことだ。例えば、ウェブブラウザを起動すればウェブブラウザのプロセスが一つ生成され、ワードプロセッサを起動すればワードプロセッサのプロセスが生成される。複数のアプリを同時に開けば、それだけ多くのプロセスがOSによって同時に管理されていることになる。
OSは、それぞれのプロセスが現在どのような状況にあるかを常に把握している。プロセスは、そのライフサイクルの中でいくつかの異なる状態を遷移する。まず、新しいプロセスが生成される直前の状態を「新規(New)」と呼ぶ。OSがプロセスを初期化し、実行に必要な準備を進めている段階だ。準備が整うと、プロセスは「実行可能(Ready)」状態に移る。これは、プロセスがCPUで実行される準備ができており、あとはOSがCPUを割り当てるのを待っている状態を指す。OSは複数のプロセスを同時に管理しているため、CPUは一度に一つのプロセスしか実行できない。そのため、実行可能なプロセスの中から、OSが次にCPUを割り当てるプロセスを選択する。CPUがプロセスに割り当てられ、実際に命令の実行が始まると、そのプロセスは「実行中(Running)」状態となる。
しかし、プロセスは常にCPUを使い続けるわけではない。例えば、ファイルからデータを読み込んだり、ネットワークを通じて情報を送受信したりするなど、CPU以外の入出力(I/O)処理が必要になった場合、プロセスはI/O処理の完了を待たなければならない。このような状態を「待機(Waiting)」または「ブロック(Blocked)」状態と呼ぶ。待機状態のプロセスはCPUを必要としないため、OSは待機中のプロセスからCPUを解放し、別の実行可能なプロセスにCPUを割り当てることで、CPUを効率的に利用する。I/O処理が完了すると、プロセスは再び「実行可能」状態に戻り、CPUの割り当てを待つことになる。そして、プログラムの実行がすべて完了するか、何らかのエラーが発生して強制終了した場合、プロセスは「終了(Terminated)」状態となる。この状態では、OSはそのプロセスが使用していたすべての資源を解放し、システムから取り除く。
OSがこのように多数のプロセスを同時に、かつ効率的に管理できるのは、「プロセス制御ブロック(PCB: Process Control Block)」という重要なデータ構造のおかげだ。PCBは、各プロセスに関するすべての重要な情報を格納した、まさにプロセスの「身分証明書」や「管理台帳」のようなものだ。OSは、プロセスが生成されるたびに新しいPCBを作成し、プロセスのすべての情報をそこに記録する。そして、プロセスが終了するまでそのPCBを管理し続ける。
PCBには、OSがプロセスを管理するために不可欠な様々な情報が含まれている。代表的なものとしては、以下のような項目がある。 まず、「プロセスID(PID)」がある。これは、OS内で各プロセスを一意に識別するための番号だ。電話番号や社員番号のようなもので、OSはこのPIDを使って特定のプロセスを指示したり、管理したりする。 次に、「プロセスの状態」が記録される。これは前述した「新規」「実行可能」「実行中」「待機」「終了」といった、プロセスの現在の状態を示す情報だ。OSはこれを見て、次にプロセスに何をすべきかを判断する。 「プログラムカウンタ(PC)」も重要な情報の一つだ。プログラムカウンタは、プロセスが次に実行すべき命令のアドレスを記憶している。OSが実行中のプロセスから別のプロセスにCPUを切り替える(これを「コンテキストスイッチ」と呼ぶ)際、現在のプロセスのプログラムカウンタの値をPCBに保存する。これにより、後でそのプロセスが再び実行されるときに、どこから再開すればよいかを正確に把握できる。 同様に、「CPUレジスタ」の値もPCBに保存される。CPUレジスタはCPU内部にある高速な記憶領域で、実行中のプロセスに関する一時的なデータを保持している。コンテキストスイッチの際には、これらのレジスタの内容も保存・復元されなければ、プロセスは正しく動作を再開できない。 さらに、「メモリ管理情報」もPCBに含まれる。これは、プロセスが仮想メモリ空間のどの領域を使用しているか、どの物理メモリに対応しているかなど、メモリに関する情報だ。OSはこれを使って、各プロセスに割り当てられたメモリ領域を適切に管理し、他のプロセスのメモリと混ざり合わないように保護する。 「I/Oステータス情報」も格納されている。これは、プロセスが現在どのファイルを開いているか、どのデバイスを使用しているかといった、入出力に関する情報だ。 最後に、「スケジューリング情報」がある。これはプロセスの優先度や、CPUをどれくらいの時間使ったかといった情報で、OSのCPUスケジューラが次にどのプロセスを実行するかを決定する際に利用される。
これらの情報がPCBに集約されているからこそ、OSはあたかも複数のプロセスが同時に実行されているかのように見せかける「マルチタスク」を実現できる。あるプロセスがCPUを使っている途中でI/O処理のために待機状態に入ると、OSはそのプロセスのCPUレジスタやプログラムカウンタなどの状態をすべてPCBに保存し、別の実行可能なプロセスにCPUを割り当てる。そして、I/O処理が完了して最初のプロセスが実行可能状態に戻ると、OSはPCBに保存されていた情報を使ってそのプロセスの状態を正確に復元し、中断された箇所から実行を再開させることができるのだ。
このように、OSがアプリを動かすためには、「プロセス」という実行単位を生成し、そのすべての状態や資源を「プロセス制御ブロック(PCB)」に記録して管理するという、非常に緻密な仕組みが不可欠である。このプロセスとPCBの概念を理解することは、システムエンジニアを目指す上で、OSの動作原理を深く理解し、システム全体のパフォーマンスや安定性を考慮した設計、開発、運用を行うための第一歩となる。