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 手続き

もう少しきちんと腰を据えて確認の必要がありますね。