コンピュータ

動的優先順位方式 | タスクスケジューリング方式

2019年9月18日

タスクスケジューリング方式とは

タスクとは、コンピュータが処理する単位です。例えばコンピュータのアプリケーションアイコンをクリックすると、クリックしたアプリケーションを開くようにコンピュータに命令します。このような命令により行われる処理の単位をタスクといいます。

スポンサーリンク

コンピュータに対する命令は一つとは限りません。複数の操作を同時に行い、コンピュータに複数の命令が依頼されることがあります。しかし、処理を実行する「CPU」は複数のことを同時に処理できるわけではありません。

そのため、CPU」にどのタスクを処理させるか、タスクの実行順序を定める必要があります。これをタスクスケジューリングといいます。

タスクスケジューリングには、以下の方式があります。

名前説明
到着順方式実行可能状態になった順番に処理する方式
優先度順方式タスクに優先度を設定し、優先度順に処理する方式
動的優先度順方式基本は優先度順方式と同じだが、待ち時間の長さに応じて優先度を徐々に上げていく方式
ラウンドロビン方式CPUを使用する時間を定め、その時間内に処理が終わらない場合は、次のタスクに使用権が与えられる方式
多重待ち行列方式ラウンドロビン方式に優先順位を加味させた方式
処理時間順方式タスクの処理時間が短いものから処理する方式
イベントドリブン方式マウス操作によるイベントでCPUの使用権を切り替える方式
本記事では「動的優先度順方式」について図解で解説していきます。

動的優先度順方式ってなに?

動的優先度順方式は、基本的には「優先度順方式」と同じです。優先度順方式は、名前の通り優先度順に処理を行う方式です。そのため、優先度の低いタスクはなかなか実行されないデメリットがありました。

動的優先度順方式はこのデメリットを、待ち時間が一定時間以上になったタスクの優先順位を動的に高くしていくことで解消しています。このようにタスクの優先度を上げて、実行の可能性を調整することをエージングと呼びます。

動的優先度順方式の流れ

動的優先度順方式の流れを図解で解説していきます。

動的優先度順方式手順1

  • CPUでの処理中:タスクA(優先度:中、処理時間:30)
  • 順番待ち:タスクB(優先度:中、待ち時間:50)、タスクC(優先度:低、待ち時間:30)、タスクD(優先度:低、待ち時間:0)

※上記は例として優先度が上がる一定時間を「100」としています。

【動的優先度順方式 処理の流れ1】待ち時間の長さが徐々に増える

「タスクA」の処理が終了しました。順番待ちをしている「タスクC」の待ち時間が30→60、「タスクD」の待ち時間が0→30に増えています。また新しい「タスクD」が順番待ちに追加されています。

動的優先度順方式手順2

  • CPUでの処理終了:タスクA
  • CPUでの処理中:タスクB(優先度:中、処理時間:45)
  • 順番待ち:タスクC(優先度:低、待ち時間:30→60)、タスクD(優先度:低、待ち時間:0→30)、タスクE(優先度:中、待ち時間:0)

スポンサーリンク

【動的優先度順方式 処理の流れ2】待ち時間が一定時間以上にタスクは優先度が上がる

「タスクB」の処理が「40」を経過。「タスクC」の待ち時間が一定時間(今回は例で100)を超えたため、優先度が「低」→「中」に上がっています

動的優先度順方式手順3

  • CPUでの処理中:タスクB(優先度:中、処理時間:45 ※40経過)
  • 順番待ち:タスクC(優先度:低→、待ち時間:60→100)、タスクD(優先度:低、待ち時間:30→70)、タスクE(優先度:中、待ち時間:0→40

【動的優先度順方式 処理の流れ3】基本は優先度順に処理されていく

普段は優先度順方式と同じで、優先度順に処理されていきます。

動的優先度順方式手順4

  • CPUでの処理終了:タスクB
  • CPUでの処理中:タスクC(優先度:中、処理時間:10)
  • 順番待ち:タスクD(優先度:低、待ち時間:70→75)、タスクE(優先度:中、待ち時間:40→45

動的優先度順方式手順5

  • CPUでの処理終了:タスクC
  • CPUでの処理中:タスクE(優先度:中、処理時間:20)
  • 順番待ち:タスクD(優先度:低、待ち時間:75→85

動的優先度順方式手順6

  • CPUでの処理終了:タスクE
  • CPUでの処理中:タスクD(優先度:低、処理時間:5)
  • 順番待ち:なし

helpful