xv6-rev6 読み (10)
ちょっと気分を変えて swtch を find-grep してみました。呼び出し元は proc.c の sched 手続きと scheduler 手続き。scheduler は読んでそのまんまのソレなので、ここでカーネルスレッド (というかスケジューラ) からプロセスに coroutine jump するケイスで、sched 側から呼び出される場合は逆になってます。
てことはプロセスが swtch を呼び出して止めるケイスもあるのかな。find-grep してみたところ、sched() 手続き呼び出してるのは proc.c で定義されている手続き達。
find . -type f -print0 | xargs -0 -e grep -nH -e 'sched(' ./kernel.asm:8498: sched(); ./kernel.asm:8725:sched(void) ./kernel.asm:8799: sched(); ./kernel.asm:8892: sched(); ./defs.h:113:void sched(void); ./proc.c:202: sched(); ./proc.c:293:sched(void) ./proc.c:316: sched(); ./proc.c:365: sched();
以下から呼び出されてますね。
- exit() 手続き
- yield() 手続き
- sleep() 手続き
成程。yield って何でしょ。確認してみるに trap.c で定義されてる trap() 手続きから呼び出されておりますな。むむ。
なんか
scheduler() 手続きなどなど確認してみるにあまり難しいことってしてないのかな。6.828 な資料、全体を通してざくっと確認してみた方が良いのかな。