プロセスが wait_event_interruptible を呼び出すと、プロセスはスリープ状態になります (条件が満たされ、保留中のシグナルがない場合)、スケジューラはプロセスを実行キューから待機キューに移動します。wake_up 呼び出しがある場合、どのように正確に、誰が待機キューからプロセスを削除し、実行キューに保持しますか?
タクス
「wake_up 呼び出し」は、別のスレッド/プロセス/タスク (一部のカーネルは、プロセスではなくスレッドに状態を設定します) によって実行されるシステム コールで、スレッド/プロセス/タスクをパラメーターでウェイクアップします。システムコールは割り込みであるため(Linuxint $0x80
では、最近置き換えられるまでsysenter
は基本的に同じです)、カーネルに入ると、スケジューラが呼び出され、要求されたスレッド/プロセス/タスクがブロックされたキューからポップアウトされます。レディ キューにプッシュされます。このスレッド/プロセス/タスクの優先度が最も高い場合、最終的には割り込みから戻るときに実行されるため、ブロックされた状態から実行中の状態に直接移行します。