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

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

実行可能状態
実行可能状態とは、プログラムやタスクがCPUが割り当てられればすぐにでも実行できる状態にあるものの、他のタスクがCPUを使用しているため実行できずに待機している状態を指します。タスクは準備完了でCPUを待つ「実行可能状態」、CPUを使って実際に動いている「実行状態」、入出力完了などを待つ「待ち状態」の3つの状態を遷移しながら動作し、実行可能状態は「待ち行列」でCPU割り当てを待つ場所です。
実行可能状態の特徴
- 条件: 必要なデータやリソースは揃っており、実行を妨げる要因はCPUの不在のみ。
- 遷移元:
- 新しいタスクが生成されたとき。
- 実行中のタスクが中断されたとき(優先度が高いタスク出現、タイムスライス終了など)。
- 待ち状態だったタスクの入出力処理が完了したとき。
- 遷移先: 実行可能状態からCPUが割り当てられると「実行状態」へ。
タイムスライス
コンピュータのOSがCPUの実行時間をミリ秒・マイクロ秒単位の「小さな時間の切り身」に分割し、複数のタスクに順番に割り当てる仕組み。
実行状態
実行状態とは、コンピュータのタスク(プログラム)がCPU(中央処理装置)に割り当てられ、実際に命令を処理している最中の状態を指します。これは、タスクが「処理できるが待っている状態(実行可能状態)」や「入出力完了などを待っている状態(待ち状態)」とは異なり、CPUを使いこなしている「今まさに動いている」状態のことです。
実行状態になるまでと、そこからの遷移
- 実行可能状態 → 実行状態(ディスパッチ): OSのスケジューラが、実行可能状態のタスクの中から一つ選び、CPUを割り当てること。
- 実行状態 → 実行可能状態(プリエンプション): 実行中のタスクのCPU使用時間が終わったり、より優先度の高いタスクが現れたりした場合、実行を中断(割り込み)され、実行可能状態に戻されること。
- 実行状態 → 待ち状態: 実行中のタスクが、入出力処理など時間のかかる処理を開始した際に、CPUを手放して待ち状態に移行すること。
待ち状態
待ち状態とは、コンピューターのタスク(処理)が、完了しないタスク固有のイベント(主に 入出力処理の完了や外部からの信号)を待っているため、一時的に処理が中断されている状態を指します。CPUが空いていても、そのタスク自体が「どうしようもない」状況で、資源(I/Oデバイスなど)の解放やデータ到着を待つのが特徴で、実行可能状態(CPUを待つ状態)とは区別されます。
I/Oデバイス(入出力装置)
コンピュータと外部環境との間でデータや信号をやり取りするキーボード、マウス、モニター、HDD、ネットワークカードなどの機器です。
待ち状態の主な特徴
- 中断されたタスク: 実行中だったタスクが、I/O処理などで一時停止し、再開されていない状態。
- 特定のイベント待ち: ディスクからの読み書き完了、ネットワークからのデータ受信、タイマーの期限切れなど、具体的な外部イベントの発生を待っている。
- リソースの解放待ち: CPU以外のシステム資源(ディスク、メモリ、ネットワークポートなど)の解放を待つ状態。
- 状態遷移: 実行状態から発生し、完了すると「実行可能状態」へ移り、CPUの割り当てを待つ流れになる。
具体例
- scanf関数: ユーザーがキーボードからの入力を終えるのを待っている状態。
- ファイルの読み書き: ディスクドライブがファイルの読み込み/書き込みを完了するのを待っている状態。
scanf関数
C言語の標準ライブラリ(<stdio.h>)で定義された、標準入力(通常はキーボード)から書式付きデータを読み込み、変数に格納する関数です。
実行可能状態との違い
- 待ち状態: 入出力装置などの完了を待つ。
- 実行可能状態: 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など。
ハングアップ
コンピュータやソフトウェアが処理を停止し、マウスやキーボードの操作を受け付けなくなる「フリーズ」状態の総称です。
よく出る問題
■① プロセス状態遷移(超頻出)
問題パターン
「実行状態→待ち状態になるのはどのときか?」
覚えるべき状態
- 実行状態(Running)
- 実行可能状態(Ready)
- 待ち状態(Waiting)
典型問題
次のうち,実行状態のプロセスが待ち状態に遷移する原因はどれか。
A. CPU割当時間を使い切った
B. 入出力処理を要求した
C. 優先度の高いプロセスが来た
D. スケジューラが切り替えた
👉 答え:B
ポイント
- I/O要求 → 待ち状態
- CPU取り上げ → Readyへ戻る
■② コンテキストスイッチ
問題パターン
「何を保存するか?」
典型問題
コンテキストスイッチ時に保存する情報として適切なものはどれか。
👉 答え:レジスタの内容、プログラムカウンタなど
ポイント
- CPUの“途中状態”を丸ごと保存
- メモリ内容ではない(ここ引っかけ)
CPUは「処理・計算」を行う頭脳であり、メモリは「一時的にデータを置いておく」作業机です。
■③ スケジューリング方式
超頻出3つ
- FCFS(先着順)
- ラウンドロビン
- 優先度方式
典型問題(計算系)
ラウンドロビンで処理順序を求める問題
例:
- タイムクォンタム:2ms
- P1:5ms、P2:3ms、P3:1ms
👉 実行順を答えよ
解き方
順番に2msずつ回す
👉 答え
P1 → P2 → P3 → P1 → P2 → P1
タイムクォンタム
OSのスケジューリング(主にラウンドロビン方式)において、1つのタスク(プロセス)がCPUを連続して使用できる時間の上限です。
■④ ターンアラウンドタイム
問題パターン
「平均時間を求める」
公式
- ターンアラウンドタイム
= 完了時刻 − 到着時刻
👉 平均を求める問題が多い
■⑤ デッドロック(ほぼ毎回)
4条件(暗記必須)
- 相互排他:ある資源を同時に1つのプロセスしか使えないこと
- 保持と待ち:すでに資源を持ったまま、さらに別の資源を待つこと
- 非奪取:一度プロセスが確保した資源は、他のプロセスが強制的に取り上げられないこと
- 循環待ち:すでに資源を持ったまま、さらに別の資源を待つこと
典型問題
デッドロックが発生する条件はどれか。
👉 答え:上記4つ全部成立
■⑥ クリティカルセクション
問題パターン
「排他制御」
キーワード
- セマフォ
- ミューテックス
典型問題
複数プロセスが同時に共有資源を使うと不整合が起きる。これを防ぐ仕組みは?
👉 答え:排他制御(セマフォなど)
クリティカルセクション
マルチスレッドやマルチタスクプログラムにおいて、共有リソース(変数、ファイル、デバイスなど)へ同時にアクセスすると不具合が生じるコード領域のことです。セマフォ
計算機科学において複数のプロセスやスレッドが共有資源にアクセスする際、同時に利用できる数を制御する(排他制御・同期)ための変数やメカニズムです。ミューテックス
コンピュータの並列処理において、複数のプログラムやスレッドが共有リソースを同時にアクセスできないようにし、データの整合性を保つための排他制御の仕組みです。
■⑦ スループット・応答時間
問題パターン
スケジューリング改善の効果
- スループット:単位時間あたりの処理数
- 応答時間:要求→応答まで
👉 「どれが改善されるか?」系が多い
■試験対策のコツ(重要)
正直ここは暗記だけじゃ弱いです👇
- 状態遷移は“流れで理解”
- ラウンドロビンは1回手で解く
- デッドロックは丸暗記

コメント