NetBSD-current/MIPSのプロセススケジューリング

クロック割り込み〜hardclock()

クロック割り込み(MIPS_INT_MASK_5)が入り、
arch/evbmips/evbmips/interrupt.c: cpu_intr()が呼ばれ、
arch/mips/mips/mips3_clockintr.c: mips3_clockintr()が呼ばれ、
kern/kern_clock.c: hardclock()へたどり着く。

ここまでのルーチンは随分整理された印象。

hardclock()

schedclock()の呼び出しはhardclock()からに変わって、
hardscheddiv = hz / 16 = 6 ticks
毎に呼び出されている。
1.6の時は4 ticksだったので頻度を落としたようだ。

roundrobin()はsched_tick()、ci->ci_schedstate.spc_rrticksはci->ci_schedstate.spc_schedticksに名称が変更、頻度はスケジューラモジュール側が管理するようになった。

rrticksのデフォルト値はhz / 10で前と変わらない。

sched_tick()〜cpu_need_resched()〜aston()

sched_tick()はroundrobin()の時と役割は同じだが、lwpのクラス(FIFO, RR,その他)を認識して再スケジュールのタイミングを変えるようになった模様。

cpu_need_resched()を呼び出し、aston()が呼び出される構造も変わらない。

1.6では例外ハンドラでastpendingフラグをチェックしてからast()に飛んでいたが、currentでは無条件にast()を呼び出して、ast()の中のwhile (l->l_md.md_astpending)に任せるようになった。

preempt()

単位がlwpになった以外の変化はなし。