FE EXAM

FCFS(到着順)方式(先着順スケジューリング)

タスクを到着した順番にCPUへ割り当てるスケジューリング方式。

INTERACTIVE VISUALIZATION
A
B
C
フェーズ
idle
現在時刻
0
平均待ち時間
シナリオ
ステップ1 / 7
STEP 1/7開始前 — 到着順に並ぶFCFS(First Come First Served=先に来たものから先に処理する方式)では、タスクを到着した順番にレディーキュー(=順番待ちの列)へ並べます。途中で順番を入れ替えたりはしません。先頭から1つずつ最後まで実行します。
レディーキュー(到着順=左から)
A
到着 0・処理 6
B
到着 0・処理 2
C
到着 0・処理 4
ガントチャート(横軸=時間)
024681012時間 →t=0
平均待ち時間の計算
待ち時間 = (実行開始時刻) − (到着時刻)
A: 開始0 − 到着0 = 0
B: 開始6 − 到着0 = 6
C: 開始8 − 到着0 = 8
平均待ち時間 = (0 + 6 + 8) ÷ 3 = 4.6666…
解説

📌
FCFS方式とは

A(長い)BC到着順に左から最後まで実行

FCFS方式とは、First Come First Served(先に来たものから先に処理する)の略で、タスク(=CPUに処理してほしい仕事)を到着した順番に割り当てるスケジューリング方式のことです。途中で順番を入れ替えず、1つのタスクを最後まで実行してから次へ進むノンプリエンプティブ(=途中で切り替えない)方式です。

身近な例で考えると、スーパーのレジの行列に似ています。先に並んだ人から順にお会計をし、途中で割り込みはしません。並んだ順に処理する、いちばん素直なルールです。

上のツールで▶ボタンを押すと、到着順に並んだA・B・Cが順番に最後まで実行され、ガントチャート(=横軸が時間の実行記録)が左から埋まっていく様子と、各タスクの待ち時間が確認できます。

単純さの利点

ABC順番に一度ずつ実行するだけ

FCFSの最大の長所は単純さです。具体的には次の利点があります。
実装が簡単:到着した順に並べた列の先頭から取り出すだけでよく、優先度などの複雑な判断がいらない
分かりやすく公平:到着順という、だれもが納得しやすい基準で動く
切替が少ない:1つのタスクを最後まで実行するため、タスクを切り替える準備(コンテキストスイッチ)の回数が少なくて済む

ラウンドロビンのように途中で何度も切り替えたり、優先度方式のように優先順位を計算したりする必要がないため、仕組みを理解しやすく、動作が予測しやすいのが魅力です。スケジューリング方式を学ぶときの出発点としてよく取り上げられます。

平均待ち時間が長くなる傾向

A(長い)B・Cはこの間ずっと待つBC

FCFSの弱点は、処理時間の長いタスクが先頭にあると、後続のタスクが長く待たされる点です。これをコンボイ効果(高速道路で1台の遅い車の後ろに行列ができる様子)と呼びます。

上のツールの例で平均待ち時間を計算してみましょう。待ち時間=実行を始めた時刻−到着時刻で求めます。

A: 0 − 0 = 0
B: 6 − 0 = 6
C: 8 − 0 = 8
平均 = (0 + 6 + 8) ÷ 3 = 4.6666…

もし処理時間の短いタスクから先に実行していれば、後続の待ち時間が小さくなり、平均待ち時間はもっと短くできます。FCFSは単純で公平な反面、こうした「長いタスクが先頭にいる場合」に弱い、という性質を覚えておきましょう。上のツールで、長いAの後ろでB・Cがじっと待っている様子を確認してみてください。

📌
ターンアラウンドタイムとは

時間A(処理時間 6)ターンアラウンドタイム到着完了(到着と同時に開始なので待ち時間=0)

スケジューリングの評価では、待ち時間と並んでターンアラウンドタイムという指標もよく使われます。これはタスクが到着してから完全に完了するまでの合計時間のことです。

2つの指標の違いは次のとおりです。
待ち時間:到着〜実行開始までの「待たされた時間」だけ
ターンアラウンドタイム:到着〜完了までの「丸ごとの時間」(待ち時間+処理時間)

計算式は ターンアラウンドタイム=完了時刻-到着時刻 です。身近な例では、お店に「入店した時刻」から「会計が終わって出た時刻」までの時間と同じ感覚です。待ち行列が長ければターンアラウンドタイムも長くなります。FCFSでは先頭に長いタスクが来ると、後続のターンアラウンドタイムが大きく膨らむのが弱点です。

📌
FCFSとSJFの違い

FCFS(到着順)A(長い・6)B(2)C(長い・8)SJF(処理時間の短い順)B(2)A(長い・6)C(長い・8)

FCFSとSJFは同じ「ノンプリエンプティブ(途中で切り替えない)」方式ですが、どの順番でタスクをCPUに割り当てるかが大きく違います。

項目FCFSSJF
実行順の基準到着した順処理時間が短い順
平均待ち時間長いタスクが先頭だと大きい理論上最も短い
実装の難しさ簡単(キューに並べるだけ)処理時間の予測が必要
弱点コンボイ効果(渋滞)飢餓状態(長いタスクが後回し)

FCFSは「公平で予測しやすい」、SJFは「平均待ち時間が短いが不公平になりうる」というトレードオフがあります。長いタスクが後回しにされ続ける(飢餓状態)を防ぐには、待ち時間に応じて優先度を上げる工夫が必要です。どちらの方式が向いているかは、タスクの性質と何を最優先にするかで変わります。

練習問題

🎯
基本情報技術者 練習問題

Q1.FCFS(到着順)方式の説明として最も適切なものはどれか。
A.優先度の高いタスクから先に実行する
B.到着した順番にタスクをCPUへ割り当て、最後まで実行する
C.各タスクに一定時間ずつ順番に割り当てる
D.処理時間の短いタスクから先に実行する
Q2.FCFS方式の性質として正しいものはどれか。
A.実行の途中でタスクを切り替える(プリエンプティブ)
B.実装が簡単で、到着順という分かりやすい基準で動く(ノンプリエンプティブ)
C.常に平均待ち時間が最小になる
D.優先度の計算が複雑で実装が難しい
Q3.FCFS方式で平均待ち時間が長くなりやすいのはどのような場合か。
A.すべてのタスクの処理時間が等しいとき
B.タスクが1つしかないとき
C.処理時間の長いタスクが先頭にあり、後続が長く待たされるとき
D.タスクの優先度がすべて同じとき

関連コンテンツ