近年のコンピュータは高性能なCPU、大容量のメモリ、高速通信が行えるネットワークカードなど、様々な高度な装置によって構成されています。これらの装置の性能を十分に発揮させるためには、しっかりとした管理が必要です。基本ソフトウェア(オペレーティングシステム,OS)は、コンピュータに備わるさなざまな装置を管理するソフトウェアです。

画像参照:https://pc-yougo.com/software/
タスクの状態遷移
タスクの状態遷移とは、OS(オペレーティングシステム)がタスク(プログラム)の実行状況を「実行可能状態」「実行状態」「待ち状態」といった異なる状態間で切り替えることを指し、複数のタスクを効率的に処理するために不可欠な仕組みです。タスクは、CPUを使う準備ができている状態(実行可能)、実際にCPUで処理されている状態(実行)、入出力待ちなどで一時停止している状態(待ち)をイベント(割り込みや時間経過など)に応じて自動的に遷移します。

実行可能状態
実行可能状態とは、プログラムやタスクがCPUが割り当てられればすぐにでも実行できる状態にあるものの、他のタスクがCPUを使用しているため実行できずに待機している状態を指します。タスクは準備完了でCPUを待つ「実行可能状態」、CPUを使って実際に動いている「実行状態」、入出力完了などを待つ「待ち状態」の3つの状態を遷移しながら動作し、実行可能状態は「待ち行列」でCPU割り当てを待つ場所です。
実行可能状態の特徴
- 条件: 必要なデータやリソースは揃っており、実行を妨げる要因はCPUの不在のみ。
- 遷移元:
- 新しいタスクが生成されたとき。
- 実行中のタスクが中断(プリエンプション)されたとき(優先度が高いタスク出現、タイムスライス終了など)。
- 待ち状態だったタスクの入出力処理が完了したとき。
- 遷移先: 実行可能状態からCPUが割り当てられると「実行状態」へ。
実行状態
実行状態とは、コンピュータのタスク(プログラム)がCPU(中央処理装置)に割り当てられ、実際に命令を処理している最中の状態を指します。これは、タスクが「処理できるが待っている状態(実行可能状態)」や「入出力完了などを待っている状態(待ち状態)」とは異なり、CPUを使いこなしている「今まさに動いている」状態のことです。
実行状態になるまでと、そこからの遷移
- 実行可能状態 → 実行状態(ディスパッチ): OSのスケジューラが、実行可能状態のタスクの中から一つ選び、CPUを割り当てること。
- 実行状態 → 実行可能状態(プリエンプション): 実行中のタスクのCPU使用時間が終わったり、より優先度の高いタスクが現れたりした場合、実行を中断(割り込み)され、実行可能状態に戻されること。
- 実行状態 → 待ち状態: 実行中のタスクが、入出力処理など時間のかかる処理を開始した際に、CPUを手放して待ち状態に移行すること。
待ち状態
待ち状態とは、コンピューターのタスク(処理)が、完了しないタスク固有のイベント(主に 入出力処理の完了や外部からの信号)を待っているため、一時的に処理が中断されている状態を指します。CPUが空いていても、そのタスク自体が「どうしようもない」状況で、資源(I/Oデバイスなど)の解放やデータ到着を待つのが特徴で、実行可能状態(CPUを待つ状態)とは区別されます。
待ち状態の主な特徴
- 中断されたタスク: 実行中だったタスクが、I/O処理などで一時停止し、再開されていない状態。
- 特定のイベント待ち: ディスクからの読み書き完了、ネットワークからのデータ受信、タイマーの期限切れなど、具体的な外部イベントの発生を待っている。
- リソースの解放待ち: CPU以外のシステム資源(ディスク、メモリ、ネットワークポートなど)の解放を待つ状態。
- 状態遷移: 実行状態から発生し、完了すると「実行可能状態」へ移り、CPUの割り当てを待つ流れになる。
具体例
- scanf関数: ユーザーがキーボードからの入力を終えるのを待っている状態。
- ファイルの読み書き: ディスクドライブがファイルの読み込み/書き込みを完了するのを待っている状態。
実行可能状態との違い
- 待ち状態: 入出力装置などの完了を待つ。
- 実行可能状態: CPUの空きを待つ。
コンピューターシステムでは、タスクは「実行中」「実行可能」「待ち」の3つの状態を循環しており、効率的なマルチタスク処理を実現しています。
スケジューリングアルゴリズム
スケジューリングアルゴリズムは、ポリシーに従って同時かつ非同期に要求されるリソースを分配するアルゴリズムである。下記のような種類があります。
| アルゴリズム名 | 概要 |
|---|---|
| 優先度順方式 | 各タスクに優先度を設定し、優先度の高いものから順番に実行していくタスクスケジューリング方式です。 |
| ラウンドロビン方式 | ラウンドロビン方式とは、複数の処理対象(プロセス、サーバー、参加者など)に対して、順番に公平な時間やリソースを割り当てていく方式です。 |
| 到着順方式 | コンピューターシステムでタスク(プロセス)を処理する際、実行可能状態になった順番(到着した順番)でCPUの利用を割り当てる最もシンプルで基本的なスケジューリング方式です。 |
コンテキスト切り替え
コンテキスト切り替えとは、実行状態のタスクを切り替えることを指します。切り替えの方式には、プリエンティブ方式とノンプリエンティブ方式の2種類あります。
プリエンティブ方式
プリエンプティブ方式とは、オペレーティングシステム(OS)がCPUの利用を管理し、優先度の高いタスクにCPUを割り当てるために、実行中のタスクを強制的に中断(プリエンプション)するタスクスケジューリングの方式です。これにより、システム全体の応答性が向上し、あるタスクの不具合が他のタスクに影響するのを防ぐことができます。
主な特徴
- 優先度による割り込み: 実行中のタスクよりも優先度の高いタスクが実行可能になると、OSが現在のタスクを中断して、優先度の高いタスクを実行させます。
- OSによる管理: CPUの使用権の管理やタスクの切り替え(ディスパッチ)は、OSのカーネルが行います。
- 強制的な中断: タスクは自らの意思でCPUを手放すのではなく、OSによって強制的に中断されることがあります。これにより、異常終了したタスクがシステム全体を停止させることを防ぎます。
- タイマによる制御: CPUの使用時間が一定時間を超えた場合にも、OSがタスクを中断して別のタスクに切り替えることがあります。
- システム安定性: 1つのアプリケーションの不具合がシステム全体に影響を与えることが少なく、システム全体の安定性が向上します。
- 採用例: 現在のWindows、macOS、UNIXなどの多くのOSで採用されている方式です。
ノンプリエンティブ方式
ノンプリエンプティブ方式(非強制割込方式、協調的マルチタスク)とは、OSがタスクの実行を強制的に中断せず、実行中のプログラムが自らCPUの利用を終えるか、待ち状態になるまでCPUを占有し続けるマルチタスク方式です。OSの負荷は軽いですが、「行儀の悪いプログラム」がCPUを解放しないとシステム全体が停止するリスクがあり、現在主流の**プリエンプティブ方式(強制割込方式)**とは対照的で、Windows 3.1や初期のMac OSで採用されていました。
特徴
- 実行の継続性: 一度CPUを割り当てられたタスクは、自分でCPUを手放すまで止まらない。
- システム負荷: OSの管理がシンプルで負荷が軽い。
- 問題点: アプリケーションがCPUを解放しないと、他のタスクが実行できず、システムがフリーズ(ハングアップ)することがある(無限ループなど)。
- 名称: 「協調的マルチタスク」「疑似マルチタスク」とも呼ばれる。
- 採用例: Windows 3.1、初期のMac OSなど。

コメント