os161 で fork 呼び出しを実装しようとしていますが、カーネルを実行した後、次のエラーが発生します。
私の sys_fork 関数の疑似フロー:
新しいアドレス空間を作成し、フレームをトラップします
新しいスレッド ポインタを宣言します -- ptrthread -- ここではメモリを割り当てていません
as_copy(コピー元→コピー先)
スレッド fork(name , new trapframe, (unsigned long)ptrthread->vmspace, forkentry function, ptrthread)
pid() を返す
擬似フォーク:
1.new trapframe = forkentry のトラップ フレーム arg
curthread->vmspace = forkentry の addrspace arg
actvate(curthread->vmspace)
新しいtrapframeにvardを設定する
mips_usermode....
カーネルを実行すると、次のエラーが発生し、カーネルが実行を停止します。
sys161: System/161 release 1.14, compiled Aug 24 2011 10:55:58
OS/161 base system version 1.11
Copyright (c) 2000, 2001, 2002, 2003
President and Fellows of Harvard College. All rights rescheduler: Dropping thread <boot/menu>.
panic: Assertion failed: SAME_STACK(curkstack-1, (vaddr_t)tf), at ../../arch/mips/mips/trap.c:220 (mips_trap)
sys161: 930837 cycles (827682k, 0u, 103155i)
sys161: 130 irqs 20 exns 0r/0w disk 0r/279w console 0r/0w/1m emufs 0r/0w net
sys161: Elapsed real time: 0.087962 seconds (10.5823 mhz)
sys161: Elapsed virtual time: 0.037233480 seconds (25 mhz)