【OS】プロセスとPCBの関係
OSとプロセスの関係
オペレーティングシステム(OS)は、コンピュータのハードウェアリソース(CPU、メモリ、入出力デバイスなど)を管理し、ユーザーが実行するプログラム(=プロセス)がこれらのリソースを効率的に利用できるようにする役割を担っています。
プロセスは、カーネルが管理する実行単位であり、その状態や属性に関する情報がすべてプロセス制御ブロック(PCB)に格納されています。このPCBは、カーネル空間に存在し、カーネルのみがアクセス可能です。
OSのプロセス管理の主な役割
プロセスの生成と終了
プロセスを開始したり、完了したプロセスを終了させたりします。
スケジューリング
複数のプロセスが同時に実行できるように、どのプロセスにCPUを割り当てるかを決定します。
同期と通信
複数のプロセスが互いに連携し、適切に動作するように調整します。
リソース割り当て
メモリやファイルなどのリソースを各プロセスに割り当てます。
※プロセスが生成されると、そのプロセスを管理するためのすべての情報がプロセス制御ブロック(PCB)に格納され、OSはこれを活用してプロセスを管理します。
PCBの役割
これらのプロセス管理を行なうために、OSはプロセス制御ブロック(PCB)というデータ構造を利用します。
PCBは、プロセスに関するすべての重要な情報(プロセスID、状態、プログラムカウンタ、CPUレジスタ情報、メモリ管理情報など)を記録しています。
これは、いわばプロセスの「パスポート」や「IDカード」のようなものです。
コンテキストスイッチ(実行中のプロセスを切り替える操作)を行なう際、OSは現在のプロセスの状態をPCBに保存し、次に実行するプロセスのPCBから情報を読み込んでCPUにロードします。
これにより、OSは複数のプロセスを効率的に切り替えながら実行しているように見せかけているのです。
OSはPCBに記録された情報を利用してプロセスの管理を行なっており、そのPCBはカーネル空間に存在します。
プロセスとPCBの関係
プロセスは、ユーザーが実行するプログラムの実体であり、実行中のプログラムを抽象化したものです。
一方、PCBは、そのプロセスに関するメタデータ(プロセスID、状態、レジスタ情報、メモリ管理情報など)を保持するデータ構造です。
プロセスの生成とPCB
ユーザーが新しいプログラムを実行しようとすると、OSは以下のステップを踏んでプロセスを生成します。
新しいPCBの作成
OSは、その新しいプロセス専用のPCBをカーネル空間に割り当て、作成します。
情報の格納
プロセスID、プロセスが実行するプログラムの場所、初期状態(例えば「新規」)、実行に必要なリソース(メモリサイズなど)といった、プロセスを管理するために必要な情報がこのPCBに書き込まれます。
スケジューリング
プロセスが実行可能になると、OSのスケジューラはPCB内の情報(プロセスの優先度など)を参照して、どのプロセスにCPUを割り当てるかを決定します。
PCBとOSのプロセス管理
PCBは、OSがプロセスを管理する上での「司令塔」のようなものです。
OSがプロセスの状態を把握し、適切に制御するために不可欠なデータ構造です。
状態の管理
プロセスが「実行中」「待機中」「準備完了」といったどの状態にあるかをPCBに記録します。
これにより、OSは現在どのプロセスがアクティブで、どのプロセスがリソースを待っているかを把握できます。
コンテキストスイッチ
CPUの実行権をあるプロセスから別のプロセスへ切り替える際(コンテキストスイッチ)、OSは現在のプロセスの状態(CPUレジスタの値など)をそのプロセスのPCBに保存し、次に実行するプロセスのPCBから情報を読み込んで復元します。
リソース管理
プロセスが使用しているメモリ、開いているファイル、ネットワーク接続などのリソースに関する情報もPCBに記録され、OSがこれらのリソースを効率的に管理するのを助けます。
PCBがカーネル空間に存在する必要性
PCBがカーネル空間に存在する必要がある理由
保護とセキュリティ
もしPCBがユーザー空間にあった場合、悪意のあるユーザーがPCBの内容を改ざんし、他のプロセスの情報を盗んだり、システムを不安定にさせたりする可能性があります。
カーネル空間に置くことで、カーネルがPCBへのアクセスを厳格に制御し、システムの整合性を保ちます。
カーネルによる管理
プロセススケジューリング、コンテキストスイッチ、メモリ管理など、プロセスのライフサイクルに関わる重要な操作はすべてカーネルが行ないます。これらの操作を実行する際、カーネルはPCB内の情報に頻繁にアクセスする必要があります。PCBがカーネル空間にあることで、カーネルは効率的にこれらの情報を取得し、管理することができます。
補足:メモリ上のプロセスとPCB
メモリ上では、プロセスは通常、ユーザー空間とカーネル空間の2つの領域に分かれています。
ユーザー空間
プログラムのコード、データ、スタック、ヒープなどが格納されます。
これはユーザープロセスが直接アクセスできる領域です。
カーネル空間
オペレーティングシステム(カーネル)のコードとデータが格納されます。
この中に、各プロセスのPCBも含まれます。
したがって、ユーザーが実行しているプロセス(ユーザー空間)は、そのプロセスを管理するPCB(カーネル空間)によって支えられている、という構造になります。
参考URL
Discussion