0 / 6
優先度スケジューリング(Priority Scheduling)
プロセスごとに重要度に応じて優先度を決めておき、前のプロセスが終わるたびに、列の中で優先度が最も高いプロセスを実行する。到着順や実行時間は見ない。ここではノンプリエンプティブで動かす。
銀行でいえば:前の人の用事が終わったら、待っている客の中で最も重要な客から呼ぶ。
1 / 6
0ms:P1が実行開始
列にP1しかいないので、すぐ実行される。ノンプリエンプティブなので、優先度がより高いプロセスが来てもP1は最後まで実行される。
2 / 6
1〜3ms:P2・P3・P4が列に並ぶ
P2(優先度2)が1msに、P3(優先度1)が2msに、P4(優先度4)が3msに到着した。P3はP1より優先度が高いが、P1が終わるまで待つ。
3 / 6
5ms:優先度が最も高いP3を実行
P1が終わったので次を選ぶ。優先度が最も高い(数字が最も小さい)P3が実行される。実行時間が8msと最も長くても、優先度が先だ。
4 / 6
13ms:P3が終わり、P2を実行
残ったP2(優先度2)とP4(優先度4)のうち、P2が実行される。P2は1msに来て13msまで12ms待った。
5 / 6
16ms:P2が終わり、P4を実行
優先度が最も低いP4は、3msに来て16msまで13ms待った。優先度の高いプロセスが次々に入ってくると、P4はいつまでも後回しにされうる(飢餓状態)。そのため、長く待ったプロセスの優先度を少しずつ上げることもある(エージング)。
6 / 6
18ms:すべて完了
待ち時間はP1 0ms、P2 12ms、P3 3ms、P4 13msで、平均7msだ。重要なP3を先に処理した代わりに、平均はFCFS(5.75ms)より長い。優先度スケジューリングはプリエンプティブでも使う。その場合は、優先度がより高いプロセスが来ると、実行中のプロセスを止めてそのプロセスから実行する。