Skip to the content.

最終更新日:2026年8月11日

まず結論

複数のタスクが同時に動けるシステムでも、共通の資源を排他的に使用する区間では、同時にその資源を使えません。

基本情報技術者試験では、次の順番で考えると実行時間を求めやすくなります。

1. CPUはいくつあるか確認する
2. 各タスクが共有資源を要求する時刻を求める
3. 共有資源を使う時間帯が重なるか確認する
4. 重なったら、後から来たタスクに待ち時間を加える
5. 最後に終了するタスクの時刻を答える

特に大切なのは、CPUが空いていても、必要な共有資源が使用中ならタスクは先へ進めないという点です。

直感的な説明

CPUを「作業する人」、共有資源を「1台しかない機械」と考えてみます。

作業者が2人いれば、別々の作業は同時にできます。

作業者A → 作業中
作業者B → 作業中

しかし、途中で2人とも同じ1台の機械を使う必要があるとします。

共有機械R
→ 1人ずつしか使えない

Aが先に使っている間にBが来ても、Bは待たなければなりません。

CPUが2台
→ CPU処理は同時に進められる

共有資源Rが1つ
→ Rを使う処理は同時に進められない

この待ち時間が、全体の終了時刻を遅らせます。

定義・仕組み

排他的に使用するとは

「排他的」とは、ある資源を1つのタスクが使用している間、他のタスクが同じ資源を使用できないことです。

タスクAが資源Rを使用中
↓
タスクBも資源Rを要求
↓
タスクBは待つ

このような制御は、複数の処理が同じ資源を同時に変更して矛盾した状態になることを防ぐために使われます。

CPUの数と資源の数は分けて考える

ここが最も重要です。

CPUが2台あっても、共有資源Rが1つなら、Rを使う部分は並列にはできません。

CPU1 ── タスクA
CPU2 ── タスクB

共有資源R ── 1タスクずつ

したがって、問題では次の2点を別々に確認します。

確認するもの 見るポイント
CPU 同時に何タスクがCPU処理できるか
共有資源 同時に何タスクがその資源を使えるか

タイムチャートで考える

例として、次の2タスクを考えます。

タスクA
CPU 20ms → 資源R 40ms → CPU 30ms

タスクB
CPU 30ms → 資源R 40ms → CPU 20ms

CPUが2台なら、最初のCPU処理は同時に開始できます。

時間   0      20      30      60      70      90
       |-------|-------|-------|-------|-------|

A      CPU     [---- R ----]    CPU
B      CPU         待ち         [---- R ----] CPU

Aは20msで資源Rを要求し、20〜60msにRを使います。

Bは30msでRを要求しますが、60msまでAが使用中です。

したがって、Bには

60 - 30 = 30ms

の待ち時間が発生します。

待ち時間を速く求める方法

タイムチャートを全部描かなくても、次の計算で求められることがあります。

先のタスクが資源を使い終わる時刻
-
後のタスクが資源を要求する時刻
=
待ち時間

先ほどの例なら、

60 - 30 = 30ms

です。

ただし、結果が0以下なら待ち時間はありません。

このテーマは、OSのタスク管理や排他制御と関係する内容です。公式の出題範囲は、IPA:基本情報技術者試験から確認できます。

科目Aでどう出る?

科目Aでは、複数のタスクについて

  • CPU使用時間
  • 入出力や共有資源の使用時間
  • CPUの台数
  • 共有資源が排他的かどうか

などが与えられ、全処理が終わるまでの時間を求める問題があります。

試験中の判断手順

まず、各タスク単独の処理時間を合計します。

CPU時間
+
資源使用時間
+
CPU時間

次に、共有資源の取り合いがあるかを確認します。

待ちがなければ
→ 単独処理時間のまま

資源使用が重なれば
→ 後のタスクに待ち時間を追加

特に問題文に次の表現があれば注意します。

共通の資源
排他的に使用
同時に開始
CPUが複数台

「CPUが複数台だから全部並列」と考えず、共有資源だけは別に確認するのがポイントです。

最後に見るのは「両方が終わった時刻」

問題が「二つのタスクの処理が完了するまでの時間」を聞いている場合は、早く終わる方ではなく、最後に終了するタスクの終了時刻を答えます。

A終了:120ms
B終了:140ms

全体終了
→ 140ms

どんな場面で使う?

複数タスクの実行時間を求める問題

この考え方は、複数のタスクが並列に動く問題で使います。

特に、途中で共通資源を使う場合は、単純に各処理時間を足すだけでは正しい終了時刻を求められません。

OSの排他制御を理解する前提

排他的な共有資源の考え方は、ミューテックスやセマフォなどの排他制御を理解する前提にもなります。

まずは、

1つの資源を同時には使えない
→ 後から来た処理は待つ

という基本を押さえることが重要です。

タスクスケジューリングとのつながり

CPUをどのタスクへ割り当てるかという考え方は、タスクスケジューリング方式とは?で整理しています。

今回のテーマでは、それに加えて

CPUを使えるか
+
必要な共有資源を使えるか

の両方を確認します。

よくある誤解・混同

CPUが2台なら、二つのタスクは最後まで同時に進める

違います。

CPU処理を同時に進められても、1つしかない共有資源を排他的に使う部分では待ち時間が発生します。

CPUは空いている
でも
資源Rは使用中
↓
タスクは待つ

各タスクの処理時間を足せば全体時間になる

タスクが並列に動く場合、単純に全タスクの時間を足すわけではありません。

一方で、各タスク単独の時間だけを見て「両方同じ時間で終わる」とも限りません。

共有資源による待ち時間を加味する必要があります。

排他的とは、CPUを一つのタスクしか使えないという意味

排他的なのは、問題文で指定された資源です。

CPUが2台
→ CPUは同時使用可能

資源Rは排他的
→ Rだけは1タスクずつ

何が排他的なのかを確認します。

待ち時間は資源使用時間と同じになる

必ずしも同じではありません。

後のタスクが資源を要求した時点で、先のタスクがどれだけ資源を使い終えているかによって待ち時間は変わります。

先の資源使用終了時刻 - 後の要求時刻
→ 実際の待ち時間

まとめ(試験直前用)

  • CPUが複数台でも、排他的な共有資源は同時に使えない
  • 共有資源を後から要求したタスクには待ち時間が発生することがある
  • 「資源使用終了時刻 − 後の要求時刻」で待ち時間を求める
  • 全体の終了時間は、最後に終了するタスクの時刻を見る
  • 迷ったら「CPU」と「共有資源」を別々の時間軸で確認する

© 2024-2026 stemtazoo. All rights reserved.