NetBSD-currentでは、mi_switch()も激しく書き直されている

2.0より処理の単位がprocからlwpへ書き直された。

引数がバージョンによって異なる:

  • 1.6 mi_switch(struct proc *p)
  • 2.0〜4.0 mi_switch(struct lwp *l, struct lwp *newl)
  • current mi_switch(struct lwp *l)

1.6ではmi_switch()がcpu_switch()を呼び出し、この中で次のプロセスをランキューから取得しコンテキストスイッチを行っていたが、2.0〜4.0では第二引数にnewlを与えた時はcpu_switchto()でnewlへスイッチし、与えられていないときはcpu_switch()で次のプロセスを取得してスイッチするようになった。

currentではnewlとcpu_switch()を廃止し、mi_switch()の中でnewlを決めてcpu_switchto()でスイッチするようになった。

rtimeの更新はupdatertime()として関数にまとめられた。

rlimitを超えたプロセスを殺す処理はsched_pstats()に移った。

関数の最初の辺りで、soft interrupt向けにnewlを用意する為のコードらしきものが増えた。

これは、newlを引数から消した為に増えたと思われる。