Я выяснил свою проблему.
Но то, что я собираюсь сказать, относится к системе OS161.Так что всем, кто работает в этой системе, это будет полезно.
Хорошо, на стороне ядра есть функция, которая занимается переключением контекста.Эта функция сохраняет все данные, относящиеся к кадру переключения контекста, в стек ядра потоков.
Итак, все, что вам нужно сделать, это выполнить те же шаги, и вместо того, чтобы переключать структуру фрейма, вам нужно заменить его структурой фрейма-ловушки.
Вот реализация для этого: -
vaddr_t stacktop;
struct trapframe *tf;
stacktop = ((vaddr_t)thread->t_stack) + STACK_SIZE; //t_stack is the kernel stack
tf = ((struct trapframe *) stacktop) - 1;
t_stack - это просто часть памяти на стороне ядра для хранения всего, что связано с исключениями или переключением контекста.
Обязательно сначала очистите t_stack, прежде чем загружать его trapframe, так как он будет содержать данные, относящиеся к кадру переключения контекста в случае реализации sys_fork.
Любые исправления или комментарии по этому поводу приветствуются.