プロセス制御ブロック

プロセス制御ブロック(Process Control Block, PCB)は、オペレーティングシステム(OS)のカーネル内で、各プロセスの状態を管理するために用いられるデータ構造です。OSによっては、「タスク」という用語が用いられ、タスク制御ブロック(Task Control Block, TCB)と呼ばれる場合もありますが、基本的な機能はPCBと同様です。

PCBの概要



PCBには、プロセスを識別するための情報や、プロセスの実行状態に関する情報が格納されています。具体的な実装はOSによって異なりますが、一般的には以下のような情報が含まれます。

プロセス識別子 (PID): 各プロセスを区別するためのユニークな番号です。
レジスタ群の値: プロセスの実行中に使用されるレジスタの値が保存されます。特に、プログラムカウンタの値は、次に実行される命令のアドレスを保持しています。
アドレス空間: プロセスが利用するメモリ領域を管理するための情報です。
オープンファイルとソケットのリスト: プロセスが開いているファイルやネットワーク接続に関する情報です。
* プロセスアカウンティング情報: プロセスの実行時間やCPU使用量など、プロセスに関する統計情報です。

コンテキストスイッチとPCB



コンテキストスイッチとは、現在実行中のプロセスを一時停止し、別のプロセスCPUの実行権を移す操作です。この際、カーネルは実行中のプロセスのレジスタ値をPCBに保存し、次に実行するプロセスのPCBからレジスタ値を復元します。これにより、プロセスの中断と再開がスムーズに行われます。

カレントPCB



カーネル内のコードは、頻繁に現在実行中のプロセスのPCB(カレントPCB)にアクセスします。通常、グローバルなポインタ変数を通じてアクセスしますが、性能向上のために固定の仮想アドレスにマッピングすることもあります。例えば、MIPSアーキテクチャでは、特定のアドレス(例えば、0xFFFFFFFF付近)にPCBをマッピングし、ゼロレジスタをポインタとして使用することで効率的なアクセスが可能です。

カーネル内では、プロセスごとにスタックが用意されますが、ユーザ空間のスタックほど大きくできないため、カーネルコードはスタックの使用量に注意する必要があります。また、再帰呼び出しも避けるべきです。マルチプロセッシング環境では、各プロセッサが異なるプロセスを実行するため、カレントPCBもプロセッサごとに存在します。

ライトウェイトプロセス



ユーザープロセスのマルチスレッドをカーネルが認識して処理する場合(ライトウェイトプロセス)、各スレッドはカーネル内にコンテキストを持ちます。このため、PCBはプロセス全体に関わる情報(アドレス空間など)と、コンテキストスイッチに関わる情報(レジスタ値など)に分けられ、後者はスレッドごとに作成されます。この構造は、プロセス管理の2つの主要な機能(リソース管理と状態管理)に対応しています。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。