Lions' 本ぼっち読み (23)
久々エントリです。朝練メモです。
lbolt
4 秒に一回というナニ。runrun という変数の意図が分かっていれば_すべてのプロセスを目覚めさせる_という記述の意図も理解できると思います。
3806 if((time[1]&03) == 0) { 3807 runrun++; 3808 wakeup(&lbolt); 3809 }
この runrun という変数は xref で見たら分かる通り、参照されている箇所が結構すくないので確認は楽です。順に見ていきます。
call 手続き
ここで runrun の値を見て swtch 手続きを呼び出しています。
0786 2: 0787 bis $340,PS 0788 tstb _runrun 0789 beq 2f 0790 bic $340,PS 0791 jsr pc,_swtch 0792 br 2b 0793 2:
これ以外は
- setrun 手続きで runrun++ (swtch 呼び出すよう設定)
- setpri 手続きで runrun++ (swtch 呼び出すよう設定)
- swtch 手続きで runrun にゼロ設定
ということをしてます。ちなみに常に ++ されるのではなくて curpri (現在実行しているプロセスの優先度) の値を元に ++ するかどうかの判断をしています。
clock 手続き
もう少しきちんと腰を据えて確認の必要がありますね。