-1

os161 で fork 呼び出しを実装しようとしていますが、カーネルを実行した後、次のエラーが発生します。

私の sys_fork 関数の疑似フロー:

  1. 新しいアドレス空間を作成し、フレームをトラップします

  2. 新しいスレッド ポインタを宣言します -- ptrthread -- ここではメモリを割り当てていません

  3. as_copy(コピー元→コピー先)

  4. スレッド fork(name , new trapframe, (unsigned long)ptrthread->vmspace, forkentry function, ptrthread)

  5. pid() を返す

擬似フォーク:

1.new trapframe = forkentry のトラップ フレーム arg

  1. curthread->vmspace = forkentry の addrspace arg

  2. actvate(curthread->vmspace)

  3. 新しいtrapframeにvardを設定する

  4. 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)

4

2 に答える 2

0

私は、ほぼ同じアプローチに基づいて fork syscall をコーディングしました。次のアプローチを見ることができます。

https://github.com/prathammalik/OS161/blob/master/kern/syscall/psyscall.c

于 2015-06-26T19:13:50.060 に答える