3

オペレーティング システムでは、スケジューラはシステム コール API の後、またはハードウェア割り込み処理の後に呼び出されます。

スケジューラーを呼び出す方法と呼び出し元を見つけられませんか???

4

3 に答える 3

3

スケジューラが呼び出されます。

  1. 明示的なブロック: ミューテックス、セマフォ、waitqueue など。
  2. フラグが設定されている場合TIF_NEED_RESCHED、最も近い機会に:
    • カーネルがプリエンプティブルの場合:
      • システムコールまたは例外コンテキストで、次に外側にあるpreempt_enable()
      • IRQ コンテキストでは、割り込みハンドラからプリエンプティブル コンテキストに戻ります
    • カーネルがプリエンプティブルでない場合:
      • cond_resched()電話
      • 明示的なschedule()呼び出し
      • システムコールまたは例外からユーザー空間に戻る
      • 割り込みハンドラからユーザー空間に戻る
于 2013-07-08T09:53:48.487 に答える
2

現在のスレッド/プロセスがスリープ/イベント/リソースの解放を待機する場合、スケジューラが呼び出されます。

ワークキューの形式で下半分を実行するワーカー スレッドのケースの 1 つは、while ループで実行され、ワー​​クキュー リストが空かどうかをチェックします。空の場合は、自身を としてマークしTASK_INTERRUPTABLE、呼び出しschedule()てからスリープ状態に移行します。

ワークキュー リストが空でない場合、ワーカー スレッドは自分自身をマークしRUNNING、延期された下半分を実行します。

したがって、一般schedule()に、スリープしたいタスクによって呼び出され、CPUを他のプロセス/タスクに引き渡します。

于 2013-07-09T04:16:32.773 に答える