Linuxカーネルがどのように機能するかについての一般的なアイデアを得るために、「Robert LoveによるLinuxカーネル開発第3版」を読んでいます..(2.6.2.3)
たとえば、次のコードのように、待機キューがどのように機能するかについて混乱しています。
/* ‘q’ is the wait queue we wish to sleep on */
DEFINE_WAIT(wait);
add_wait_queue(q, &wait);
while (!condition) { /* condition is the event that we are waiting for */
prepare_to_wait(&q, &wait, TASK_INTERRUPTIBLE);
if (signal_pending(current))
/* handle signal */
schedule();
}
finish_wait(&q, &wait);
このコードを実行しているプロセスを知りたいですか? それはカーネルスレッドですか?これは誰の処理時間ですか?
また、ループでは、条件がまだ満たされていない間、スリープを継続し、スケジュールを呼び出して別のプロセスを実行します。問題は、いつこのループに戻るかということです。
この本によると、プロセスがスリープ状態になると、実行キューから削除されます。それ以外の場合は、ウェイクアップされてビジー ループに入る必要があります...
- また、「スリープは、タスクが待機している状態が実際に発生したことを保証するループで常に処理する必要があります」とも述べています。
このループがどのようなコンテキストで実行されているかを知りたいだけですか?
これがばかげた質問である場合は申し訳ありません。大きな写真が見づらくて困っています