Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

プリエンプション(プリエンプション)とは | 意味や読み方など丁寧でわかりやすい用語解説

プリエンプション(プリエンプション)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

プリエンプション (プリエンプション)

英語表記

preemption (プリエンプション)

用語解説

プリエンプションとは、オペレーティングシステム(OS)が実行中のプログラムやタスクを一時的に中断させ、別のプログラムやタスクにCPUの実行権を強制的に移す仕組みである。現代のほとんどのマルチタスクOSに不可欠な機能であり、これにより複数のプログラムが同時に動いているように見え、ユーザーは快適にコンピュータを利用できる。

例えば、ウェブブラウザで動画を視聴しながら、同時に文書作成ソフトで作業を行い、さらに裏でOSのアップデートがダウンロードされているといった状況は、プリエンプションによって実現されている。OSがCPUの時間を非常に細かく分割し、それぞれのプログラムに順番に割り当てることで、あたかもすべてのプログラムが並行して実行されているかのように錯覚させるのである。これは、OSが各プログラムの実行を管理し、一つのプログラムがCPUを独占することを防ぐための重要な役割を果たす。

プリエンプションは、OS内の「スケジューラ」と呼ばれるコンポーネントが中心となって管理する。スケジューラは、現在実行可能な状態にあるタスクのリストを保持し、どのタスクをいつ実行するか、どのくらいの時間実行するかを決定する。この決定は、各タスクに割り当てられた優先度や、タスクが待機しているリソースの種類、システム全体の負荷状況など、様々な要因に基づいて行われる。

プリエンプションのトリガーとなるのは、主に「タイマー割り込み」や「I/O完了割り込み」といったハードウェア割り込みである。タイマー割り込みは、一定時間ごとに発生し、OSにCPUの利用状況を確認させる機会を与える。例えば、1ミリ秒ごとにタイマー割り込みが発生するように設定されている場合、OSは1ミリ秒ごとに現在実行中のタスクをチェックし、必要であれば別のタスクに切り替える判断を行う。

この割り込みが発生すると、OSは現在実行中のタスクを中断させ、その時点での状態をメモリに保存する。この状態には、CPUのレジスタの値や、次に実行される命令のアドレスを示すプログラムカウンタなど、タスクが再開される際に必要となるすべての情報が含まれる。このタスクの状態情報を「コンテキスト」と呼び、保存する処理を「コンテキストセーブ」と呼ぶ。

次に、スケジューラは次に実行すべきタスクを選択し、そのタスクが以前に中断された時点のコンテキストをメモリから読み出し、CPUのレジスタに復元する。この処理を「コンテキストリストア」と呼ぶ。コンテキストのセーブとリストア、およびタスクの切り替え全体を「コンテキストスイッチ」と呼ぶ。このコンテキストスイッチによって、CPUの実行権が強制的に現在のタスクから次のタスクへと移るのである。

プリエンプションがもたらす最大の利点は、システムの「応答性」と「公平性」の向上である。ノン・プリエンプティブ(協調的マルチタスク)なシステムでは、実行中のタスクが自発的にCPUを解放しない限り、他のタスクは実行されない。もしあるタスクが無限ループに陥ったり、長時間の処理を独占したりすると、システム全体がフリーズしたように見え、ユーザーは何も操作できなくなる。これに対し、プリエンプティブなシステムでは、OSが強制的にタスクを中断させるため、たとえ一つのタスクに問題があっても、他のタスクやOS自体は応答性を保つことが可能となる。これにより、ユーザーはより安定した操作感を得られる。

また、プリエンプションは、システムの「リアルタイム性」を保証するためにも不可欠である。特定の期限までに処理を完了する必要があるリアルタイムシステムでは、優先度の高いタスクが発生した場合、現在実行中の優先度の低いタスクを即座に中断し、優先度の高いタスクを実行に移す必要がある。プリエンプションはこの要求を満たすための基本的なメカニズムである。これにより、重要度の高い処理が迅速に実行され、システムの信頼性が向上する。

しかし、プリエンプションを実装するには考慮すべき点も存在する。一つは「コンテキストスイッチのオーバーヘッド」である。コンテキストの保存と復元、そしてスケジューラの処理には時間がかかり、あまりに頻繁にスイッチが発生すると、CPUの貴重な実行時間がタスク切り替えの処理に消費されてしまう。これはシステム全体のパフォーマンスに影響を与える可能性があるため、スイッチの頻度とシステムの応答性のバランスが重要となる。

もう一つ重要なのは、「同期メカニズム」の必要性である。複数のタスクが共通のデータやリソース(共有メモリ、ファイルなど)に同時にアクセスしようとすると、データの整合性が失われる可能性がある。プリエンプションによって任意のタイミングでタスクが中断されるため、あるタスクがデータの更新途中で中断され、別のタスクがその不完全なデータにアクセスしてしまう危険性がある。これを防ぐために、ミューテックスやセマフォといった排他制御の仕組みを用いて、共有リソースへのアクセスを一度に一つのタスクに限定するなどの対策が必要となる。

このように、プリエンプションは現代のマルチタスクOSにおいて、複数のプログラムを効率的かつ安定して実行させるための根幹をなす技術であり、システムの性能、応答性、公平性、そして信頼性を大きく左右する重要な概念である。

関連コンテンツ

関連IT用語