OS161:TLB加载失败

问题描述 投票:1回答:1

我在运行fork测试时遇到TLB加载错误,我理解这是由于将错误的stackptr传递给mips_usermode造成的,我的实现似乎围绕着此处的一些建议,如果我对她进行了纠正,将不胜感激。我的以下代码在thread_fork中作为入口点函数提供。我有什么想念的吗?

void
enter_forked_process(void *junk,unsigned long num)
{

        kprintf("\n entered enter_fork_process");
        struct trapframe tf = (*((struct trapframe *) junk));


        (void) num;


        kprintf("\n copied tf from from parent to child");
        tf.tf_v0 = 0;
        tf.tf_a3 = 0;
        tf.tf_epc += 4;
        kprintf("abt to enter mips_ usermode");
        mips_usermode(&tf);
}
c memory-management mips tlb os161
1个回答
2
投票
在调用thread_fork之前,您必须复制父线程的地址空间,并将地址空间指针作为enter_forked_process的第二个参数传递。在enter_forked_process中,您必须将地址空间填充到curthread->t_addrspace中。否则,由于当前线程(子线程)的地址空间未初始化,因此会出现TLB miss on load错误。

有关OS161 fork系统调用的更多详细信息,请参阅此博客。 child_forkentry与您的enter_forked_process大致相同。http://jhshi.me/2012/03/11/os161-fork-system-call/index.html


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.