1/21 朝
あーさー。
今日は少しだけ寝坊してしまったけどちゃんと朝勉強するよー。
タスクスケジュールのあたりの勉強。このへんは点を稼ぎやすい気がする。
タスクスケジュール
優先度順の場合、ラウンドロビンと同じようにタスクが実施中であっても打ち切り、優先度の高いタスクに処理を移すことに注意(自分はタスク単位の完了までは資源を確保しているのかと思っていた)。逆に到着順方式はどれだけタスクがたまっても優先度(到着時刻)が変わらないため完了まで実行する。
- 到着順方式
- 要求された順にタスクにCPUを割り当てて、処理開始したら完了するまで実行する
- 優先順位方式
- 各タスクに優先順位をつけてCPU時間を割り当てる
- ラウンドロビン方式
- 各タスクを均等に一定の時間の実行権をあたえ、一定時間経過で強制的に他タスクに実行権が移る(タイムシェアリング)
- 多重待ち行列方式
- 優先度の異なる複数の待ち行列を使用する
- フィードバック待ち行列方式
- 新しく到着したプロセスの優先度を最も高くし、順次優先度を落としていく方式
- ベースはラウンドロビン方式で、優先度の高いものほどタイムスライスを短くする。
- 最短ジョブ優先方式
- 実行待ちのプロセスの中で、推定実行時間が最も短いものを次に実行する方式
プリエンプティブなスケジュール
- プリエンプティブなスケジュールでは優先順位をつけて実行する方式で、後から優先度が高いタスクが発生した場合割り込みによって切り替えを行う。
- タスクの状態は、READY、RUN、WAITの3個があり、それぞれ以下のように遷移する
- READY:CPU資源が割り当てられたらRUNへ。
- RUN:入出力待ちになったらWAITへ。割り込み(プリエンプション)が発生したらREADYへ。
- WAIT:入出力が実施されたらREADYへ。
- CPUが割り込み制御を管理することによって特定のプロセスが独占することが少なくなる。
- これに対しノンプリエンプティブなスケジュール方式だと、処理の切り替えをアプリケーションに依存しているので、いつまでたっても制御を返さない「行儀の悪いアプリケーション」や、処理途中でエラー発生して制御が返せなくなった場合などでシステム全体が停止するという欠陥がある(Win3.1、MacOS)。
タスク間の同期制御
イベントフラグによって同じ条件で待ち状態になった複数タスクを同時に解除することができる。