オペレーティング システムのプロセス スケジューリング アルゴリズムとは何ですか?

オペレーティング システムのプロセス スケジューリング アルゴリズムとは何ですか?

スケジューラは、次に実行するプロセスを選択する役割を担うオペレーティング システム カーネルの一部です。したがって、スケジューリング戦略によって、オペレーティング システムが非リアルタイム オペレーティング システムかリアルタイム オペレーティング システムかが決まります。現在、オペレーティング システムには多くの種類がありますが、プロセス スケジューリング アルゴリズムは次の種類にまとめることができます。

先着順(FCFS)スケジューリングアルゴリズム

先着順のスケジュール戦略は非常にシンプルです。レディキューを維持します。各スケジューリングは、レディキューから最初にキューに入るプロセスを選択し、それにプロセッサを割り当てて、動作させます。プロセスは完了するかイベントによってブロックされるまで実行され、その後プロセッサを放棄します。

ショートプロセスファースト(SPF)スケジューリングアルゴリズム

Short Process First (SPF) スケジューリング アルゴリズムは、実行時間の推定値が最も短いプロセスを準備キューから選択し、そのプロセスにプロセッサを割り当てて、そのプロセスが完了するまで直ちに実行するか、イベントが発生してプロセッサがブロックされて放棄されたときに再スケジュールします。

高優先度スケジューリングアルゴリズム

緊急のプロセスに対処し、優先的に実行できるようにするために、優先スケジューリング アルゴリズムが導入されています。このスケジューリング アルゴリズムは、リアルタイム オペレーティング システムで使用できます。プロセスのスケジューリングが発生すると、アルゴリズムは準備完了キュー内で優先度が最も高いプロセスにプロセッサを割り当てます。

アルゴリズムには 2 つの種類があります。

非プリエンプティブ優先度アルゴリズム: このモードでは、システムが準備キュー内の最も優先度の高いプロセスにプロセッサを割り当てると、プロセスは終了するまで実行を継続するか、プロセッサを積極的に放棄し、システムがプロセッサを最も優先度の高い別のプロセスに割り当てます。このアルゴリズムは、リアルタイム要件が高くない一部のオペレーティング システムで使用できます。

プリエンプティブ優先度スケジューリング アルゴリズム: このモードでは、システムはプロセッサを最も優先度の高いプロセスに割り当てて実行します。ただし、操作中に優先度の高いプロセスが準備キューに出現した場合、システムは現在実行中のプロセスを直ちに停止し、新しく追加された優先度の高いプロセスにプロセッサを再割り当てします。したがって、このモードではリアルタイム要件をより適切に満たすことができるため、リアルタイム要件が高いシステムでよく使用されます。

優先度の高いプロセスがリソース不足のためにブロックされ、優先度の低いプロセスがリソースを解放するまで待機していると想像してください。優先度の低いプロセスは、CPU 時間が少なくなります。優先度が 2 つのプロセスの間にあり、共有リソースを必要としないタスクがある場合、優先度が中程度のプロセスがこれら 2 つのプロセスよりも優先され、CPU 時間が割り当てられます。優先度の高いプロセスがリソースを待機している間にブロックせず、ビジー ループする場合、優先度の低いプロセスは CPU 時間に関して優先度の高いプロセスと競合できず、実行できず、リソースを解放できないため、リソースを取得できない可能性があります。その結果、優先度の高いプロセスはリソースを取得できず、前進し続けることになります。この現象を「優先順位の逆転」と呼びます。

上記の問題をどのように解決すればよいでしょうか?

方法は3つあります。

優先度の上限を設定し、クリティカル セクションに高い優先度を与えます。クリティカル セクションに入るすべてのプロセスは、この高い優先度を取得します。クリティカル セクションに入ろうとする他のプロセスの優先度がこの高い優先度よりも低い場合、優先度の逆転は発生しません。

優先度の継承: 優先度の高いプロセスが優先度の低いプロセスが保持しているリソースを待機している場合、優先度の低いプロセスは、優先度の高いプロセスの優先度レベルを一時的に取得します。共有リソースを解放した後、優先度の低いプロセスは元の優先度レベルに戻ります。組み込みシステム VxWorks はこの戦略を採用しています。

3 番目の方法は、クリティカル セクションを保護するために、クリティカル セクションの割り込みを無効にすることです。この戦略を使用するシステムには、プリエンプティブ優先度と割り込み無効優先度の 2 つの優先度しかありません。前者は実行中の一般的なプロセスの優先度であり、後者はクリティカル セクションで実行されているプロセスの優先度です。マーズ・パスファインダーの失敗は、クリティカル・セクションで実行されていた気象ミッションが、中断された通信ミッションによって優先されたために発生しました。クリティカル・セクションに割り込み禁止保護が設けられていれば、この問題は発生しなかったでしょう。

高応答率優先スケジューリングアルゴリズム

CPU を集中的に使用するシステムでは、短いプロセス優先度アルゴリズムの方が適しています。ただし、長いプロセスの実行時間は保証されません。この問題を解決するにはどうすればよいでしょうか? 動的な優先順位を導入することはできますか? 簡単に言えば、待機時間が長くなるほど、優先順位が高くなります。それで、しばらく待てば、必ず走る番が来るでしょう。ただし、優先度を動的に計算するアルゴリズムには CPU リソースが必要です。

タイムスライスの回転

早期タイムスライス ラウンドロビン方式では、システムはすべての準備完了プロセスを先着順にキューに配置します。スケジュールが行われるたびに、キューの最初のプロセスに CPU が割り当てられ、1 つのタイムスライスで実行するように命令されます。タイムスライスのサイズは、数ミリ秒から数百ミリ秒の範囲です。実行タイムスライスが使い果たされると、タイマーがクロック割り込み要求を送信し、スケジューラはこの信号を使用してプロセスの実行を停止し、それを準備キューの最後に送信します。その後、プロセッサは準備キューの新しい先頭プロセスに割り当てられ、タイムスライスを実行できるようになります。これにより、準備完了キュー内のすべてのプロセスが、指定された時間内にプロセッサ実行時間のタイムスライスを取得できるようになります。つまり、システムは指定された時間内にすべてのユーザー要求に応答できます。

マルチレベルフィードバックキュースケジューリングアルゴリズム

これまで説明したスケジューリング アルゴリズムにはすべて一定の制限があります。たとえば、短いプロセス優先スケジューリング アルゴリズムは、短いプロセスのみを処理し、長いプロセスは無視します。マルチレベル フィードバック キュー スケジューリング アルゴリズムは、さまざまなプロセスのニーズを満たすことができるバランスの取れたアルゴリズムです。したがって、これは現時点ではより優れたプロセス スケジューリング アルゴリズムです。

複数の準備完了キューを設定し、各キューに異なる優先順位を設定します。最初のキューの優先度が最も高く、2 番目のキューの優先度が 2 番目に高くなります。キューの優先度が高いほど、タイムスライスは短くなります。

新しいプロセスがメモリに入ると、まず最初のキューの最後尾に配置され、FCFS 原則に従ってスケジュールのためにキューに入れられます。プロセスの実行順番が来たら、タイムスライス内に完了できればシステムからの退避準備ができます。タイムスライスの終了時に完了していない場合、スケジューラはプロセスを第 2 キューの最後に転送し、FCFS 原則に従ってスケジューリング実行を待ちます。第 2 キューでタイムスライスの実行後も完了していない場合は、順番に第 3 キューに配置されます。以下同様に続きます。長いジョブ (プロセス) が第 1 キューから第 n キューに順番にドロップされると、タイムスライス ローテーション方式で第 n キューで実行されます。

スケジューラは、最初のキューがアイドル状態の場合にのみ 2 番目のキューのプロセスが実行されるようにスケジュールします。また、スケジューラは、1 番目から (i-1) 番目のキューがすべて空の場合にのみ i 番目のキューのプロセスが実行されるようにスケジュールします。プロセッサが i 番目のキューのプロセスにサービスを提供しているときに、新しいプロセスがより高い優先度のキュー (1 から (i-1) までの任意のキュー) に入ると、新しいプロセスは実行中のプロセスのプロセッサをプリエンプトします。つまり、スケジューラは実行中のプロセスを i 番目のキューの最後に戻し、プロセッサを新しい高優先度プロセスに割り当てます。以下のように表示されます。

参照する

https://blog.csdn.net/qq_35642036/article/details/82809812、Yuan Lijun 氏はこの記事を参照しました。

要約する

この記事では、いくつかのプロセス スケジューリング アルゴリズムについて説明します。プロセス スケジューリング アルゴリズムに興味のある方の参考になれば幸いです。もちろん、この記事では説明されていない、抽選スケジューリング、単一比率スケジューリングなどのスケジューリング アルゴリズムもあります。

<<:  ロボットがIoTアプリケーションの範囲を拡大する方法

>>:  「紫禁城の戦い」 - ディープラーニング フレームワーク: Keras VS PyTorch

ブログ    
ブログ    

推薦する

...

マイクロソフトのオープンソースAIツールが古い写真に新たな命を吹き込む

序文GitHub Hot Trends Vol.046では、HGがMicrosoftのオープンソース...

機械学習はサイバーセキュリティをどのように向上させることができるのでしょうか?

今日では、機械学習に大きく依存せずに強力なサイバーセキュリティ ソリューションを展開することは不可能...

百度研究所が2020年のAI技術トレンド予測トップ10を発表

一歩前進、そしてまた一歩前進し、2019年が終わりました。 12月24日、百度研究所は2020年のト...

...

2022年にエネルギー・公益事業分野で注目すべき4つの技術トレンド

[[440332]]画像ソース: https://pixabay.com/images/id-425...

一言で女の子がN着の服を着替えてくれた。Googleが動画生成を新たな高みへ。ネットユーザー「競争が激化」

Google はたった 1 つの動きで、AI ビデオ生成を新たなレベルに引き上げました。文章からビ...

知遠の「盗作スキャンダル」最新報道:盗作2件、不正引用4件、関係者全員が自主辞任

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

AI を理解する: 人工知能システムで説明可能性を追求する理由

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

Soraはどのように機能しますか?

翻訳者 |ブガッティレビュー | Chonglou先週、 OpenAIチームは、物理世界の基本的な側...

ChatGPT は EDR 検出を回避する変異型マルウェアを作成します

ChatGPTは昨年末のリリース以来、世界中で大きな話題を呼んでいます。しかし、消費者やIT専門家の...

機械学習論文を再現する際に注意すべき5つの問題

私が初めて機械学習に興味を持ったとき、論文を読んだり、それを実装したりすることに多くの時間を費やしま...

強化学習とゲーム理論を活用して、EAのテストAIは賢いものになった

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

ケンブリッジ大学チームは約50年後に初めて量子スピン液体を検出し、その研究はサイエンス誌に掲載された。

[[439547]]一部の研究者は、量子コンピューターがいつの日かデジタル暗号の解読や薬剤の設計な...

PyTorch を学ぶには?簡単すぎる

多くの友人から、PyTorch の学習方法を尋ねられました。長期間の練習を経て、初心者が知っておく必...