I-26-1. コンテキストスイッチの仕組み

複数の処理(タスク)を実行するコンテキストスイッチの仕組みを解説する。OSが処理の切り替えを管理するプリエンプション方式の実装方法を説明し、割り込みによるコンテキストスイッチにも触れる。

【学習の要点】

* 各タスクはそれぞれ固有のコンテキストを持つ。コンテキストとは、実行のスケジューリングごとに必要となるCPUのレジスタ状態であり、プログラムの連続した流れとして見ることができる。

* コンテキストスイッチは、スケジューラがあるタスクから別のタスクへ実行を切り替える際に、レジスタの値を退避・復元することにより発生する。

* OSのスケジューラが必要に応じて実行中のタスクを強制的に中断し、別のタスクを実行する方式をプリエンプション方式と呼ぶ。

図I-26-1. コンテキストスイッチの発生する状況

【解説】

1) コンテキストスイッチング

* コンテキストスイッチングとは

- コンテキストとは、実行のスケジューリングごとに必要となるCPUのレジスタ状態であり、プログラムの連続した流れと見られる。

- コンテキストスイッチは、スケジューラがあるタスクから別のタスクへ実行を切り替える際に行うレジスタの値の退避・復元により発生する。

- OSのスケジューラが必要に応じて実行中のタスクを強制的に中断し、別のタスクを実行する方式をプリエンプション方式と呼ぶ。

* コンテキストスイッチングの実装仕様

カーネルのスケジューラがタスク1からタスク2に実行を切り替える時の動作は以下の通り。

- カーネルはタスク1のコンテキストをレジスタに退避する

- カーネルはタスク2のコンテキストを読み込み、タスク2を実行中の状態にする。

- タスク1が再び実行状態に復帰する場合、タスク1はコンテキストスイッチ直前に実行していた実行状態から再開する。

* コンテキストスイッチ時間

- スケジューラがタスク切り替えに要する時間をコンテキストスイッチ時間という。

- 頻繁なコンテキストスイッチを発生させるような設計は、コンテキストスイッチ時間の累積によるパフォーマンスの低下を招く恐れがあり、避けるべきとされる。

2) カーネルコンテキスト

* システムコールなどは、通常のアプリケーションが実行されるユーザモードとは異なり、カーネルモード(I-26-2参照)で実行されるため、カーネルモードの実行に必要なカーネルコンテキストを呼び出す必要がある。

* デバイスドライバなどがハードウェア割り込みを行う場合、カーネルの割り込みハンドラを登録する。

* 割り込み処理を行っている際のコンテキストを割り込みコンテキストという。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。

フォーラム会員企業専用

記事配信

コンテンツ配信

ユーザログイン