Lions' 本読み (98)

ちょっとだけ昨日の続きを。_runrun を評価するのはここだけ_の_ここ_は 0771 の call 手続きです。とりあえず runrun を増分させてる手続きを確認してみます。それぞれを呼び出してるナニについては別途で。
増分させてる手続きは以下ということで順に確認を。

  • setrun
  • setpri
  • clock

setrun 手続き (2134)

引数で渡された、これから SRUN な状態になるプロセスの優先度がカレントプロセスの優先度よりも小さい場合 (これは優先度が高い、という意味)、runrun が増分されている。

setpri 手続き (2156)

優先度を再計算しているが、これがカレントプロセスの優先度よりも大きい場合に runrun が増分されている。例の小冊子によれば bug ではないか、との指摘あり。

clock 手続き (3725)

4 秒に一度、runrun 増分されている。

昨日エントリの通り

runrun を評価しているのは call1 のみ、となるのですが例えば setrun された手続きがいきなり swtch で切り替えられる訳ではなくて諸々の準備が必要になります。
swtch で切り替え対象となるプロセスオブジェクトは

  • 状態が SRUN
  • SLOAD (コアにロードされている)
  • 最優先

という状態のものなんですが、setrun 手続きで SRUN にされたけれど SLOAD でないものについては sched 手続きでコアにロードされなければなりません。そういった意味では runin 乃至 runout で #0 なプロセスが wakeup されないと、という事になります。

とりあえず

時間切れっぽいんですが、この状態で Section 4 に突入してみます。どうなるやら。