Lions' 本読み (35)

sleep 手続きで runin が非ゼロなら wakeup を云々な記述あり。

2080            if(runin != 0) {
2081                    runin = 0;
2082                    wakeup(&runin);
2083            }

なんで runin だけ sleep で、って思いつつ 14 章を見てみるにそこの記述によれば

この状況は、clock で測った時間の経過によって、あるいは sleep を呼び出すことによって変更される。
Lions' Commentary on UNIX より引用


ざくっと確認したところでは

  • clock 手続きでは sched なブロックで常に runin の値をチェック
  • sleep 手続きでも常に runin の値をチェック
  • どちらも runin が非ゼロであれば runin で sleep した sched を起こす

という理解で良いのかな。あら、runin を非ゼロにしてるのは? と思ったら sched でした。

スワップアウトされた実行可能状態のプロセスが少なくとも 1 つはあるが、それがスワップアウトされたから 3 秒を経過してないか、あるいは、3 秒経過していても現在メインメモリにあるプロセスがアクティブであって、ロードされて 2 秒を経過していないかのどちらかである。
Lions' Commentary on UNIX より引用


この状態はなんどか sleep やら clock でチェックされて sched が起こされては、という事になるんですかね。イメージ的には runin のチェック頻度は多いようなイメージです。runout はもう少し薄いカンジですがそうでもないのかどうなのか。

とりあえず

  • runin と runout について整理したい
  • wakeup 手続き諸々確認

ということが直近の課題、ということにて今日はおしまい。