Linux のタスク スケジューリング メカニズムは、特定のイベントでシステムによって実行される特定のコマンドまたはプログラムを指します。各 CPU には「TASK_RUNNING」状態のタスクを保存するためのキューがあり、タスク スケジューリングは取り出されます。これらのキューから、最も優先度の高いタスクが CPU の次に配置されて実行されます。
#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。
特定の時間にシステムによって実行される特定のコマンドまたはプログラムを指します
Linux では、 CPU には TASK_RUNNING 状態のタスクを格納するためのキューがあり、そのキューから優先度の最も高いタスクを取り出して、次に CPU に投入して実行するのがタスクのスケジューリングです。
タスクのスケジューリングには、コンテキスト切り替えと選択アルゴリズムという 2 つのプロセスが必要です。
コンテキスト切り替え
あるプロセスから別のプロセスへのコンテキスト切り替えこのプロセスは非常に頻繁に発生するため、多くの場合、スケジューラの効率の鍵となります。
schedule() 関数 は switch_to マクロを呼び出します。このマクロはプロセス間の実際の切り替えを実装します。そのコードは include/i386/system.h に保存されます。
switch_to マクロは埋め込みアセンブリで記述されているため、理解するのが困難です。
switch_to() 関数は正常に戻ります。スタック上の戻りアドレスは、新しいプロセスの task_struct::thread::eip であり、これは、新しいプロセスが最後に一時停止されたときに設定された継続位置です (最後のswitch_to が実行された時刻) () ラベル "1:" の位置)。
この時点で、実行する新しいプロセスのコンテキストに転送されます。これには、プロセスをスリープおよびウェイクアップするための wakeup、sleepon、およびその他の関数が含まれます。
選択アルゴリズム
Linuxのschedule()関数は、レディキュー内のすべてのプロセスを走査し、goodness()関数を呼び出して各プロセスの重みを計算します。 process では、最大の重みを持つプロセスを選択して実行します。 Linux スケジューラは主に、schedule() 関数に実装されています。
スケジュール手順:
スケジュール関数のワークフローは次のとおりです:
(1) 現在実行中のプロセスをクリーンアップします
(2) 選択実行するプロセス (pick_next_task)
(3) 新しいプロセスの実行環境を設定します
(4) プロセス コンテキストの切り替え
Linux スケジューラはプロセスを 3 つのカテゴリに分類します
プロセス スケジューリングは、オペレーティング システムの中核機能です。
スケジューラはスケジューリング プロセスの一部にすぎません。プロセス スケジューリングは、完了するまでに複数のシステムが連携する必要がある非常に複雑なプロセスです。
この記事ではスケジューラについてのみ説明します。スケジューラの主な仕事は、実行中のすべてのプロセスの中から最も適切なものを選択することです。
一般的なオペレーティング システムとして、Linux スケジューラはプロセスを 3 つのカテゴリに分類します。
#推奨される学習:対話型プロセス
このタイプのプロセスには、大量のヒューマン コンピュータが含まれます。したがって、プロセスは常にスリープ状態になり、ユーザーの入力を待ちます。典型的なアプリケーションはエディター vi です。このタイプのプロセスでは、システムの応答時間に対して比較的高い要件が求められます。そうでないと、ユーザーはシステムの応答が遅いと感じてしまいます。
バッチ プロセス
このタイプのプロセスは人間とコンピューターの対話を必要とせず、バックグラウンドで実行され、大量のシステム リソースを必要とします。ただし、応答の遅れは許容できます。コンパイラなど。
リアルタイム プロセス
リアルタイムには、スケジューリング遅延に関する最も高い要件があり、これらのプロセスは多くの場合、非常に重要な操作を実行し、即時の応答と実行が必要です。たとえば、ビデオ再生ソフトウェアや航空機の飛行制御システムなどですが、そのようなプログラムがスケジュールの大幅な遅延を許容できないことは明らかであり、せいぜい映画上映の効果に影響を与えるか、航空機が墜落して人が死亡する可能性があります
以上がLinuxのタスクスケジューリングメカニズムとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。