Lions' 本読み (97)

朝練メモです。
6 章から再読してメモを云々、と書いてましたが別途な機会があれば、ということにします。とりあえず @mgwsuzuki さんに頂戴したプロセス切り換えなメモを確認しつつ最初のあたりをうろうろしてみることに。
件の資料によればポイント高いのは

  • sched
  • swtch
  • clock

あたり。特に #0 なプロセスはこのプロセス切り換えについて重要な役割を担っています。そういった意味では件の資料の sched の項については、runin および runout の意味とそれぞれで wakeup する関数が列挙されています。
そして資料にもあるのですが_runin、runout で wakeup() されたら sched() が実行可能状態になり、swtch() でプロセス切り換え_というのがキモ。
で、sched は基本的に実行可能状態で最も長い時間スワップアウトされていたプロセスについてコアを割り当てるのが基本的なお仕事で、OO な原則に従って (?) それしかヤりません。ここが素晴しいところですね。
そして swtch という手続きはプロセス構造体の配列をパースして実行可能状態でかつスワップインされているもののうち、一番優先度の高いものを選択してプロセスを切り替えます。イメージ的になんとなくこっちの方がスケジューラですが、選択しているのはプロセス #0 なのでこっちの方がもへったくれも無いのか。

runrun

件の資料にある通り、_runrun を評価するのはここだけ_です。トラップや割り込みが発生して、前モードがカーネルモードでなければ runrun は評価されて、0 でなければ swtch が呼び出されています。
また、runrun を増分させているのは

  • setrun
  • setpri
  • clock

な模様。ええと setrun を呼び出しているのは

  • wakeup
  • exit
  • wait
  • psignal
  • ptrace

setpri を呼び出しているのは

  • C の trap
  • clock

な模様ですがそろそろ時間切れ。