[英]OS161 : TLB miss on Load
当我运行 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);
}
您必须在调用thread_fork
之前复制父线程的地址空间,并将地址空间指针作为enter_forked_process
的第二个参数enter_forked_process
。 在enter_forked_process
,您必须将地址空间填充到curthread->t_addrspace
。 否则,您将TLB miss on load
错误时获得TLB miss on load
,因为当前线程(子线程)的地址空间未初始化。
有关 OS161 fork 系统调用的更多详细信息,请参阅此博客。 而child_forkentry
或多或少与您的enter_forked_process
相同。http://jhshi.me/2012/03/11/os161-fork-system-call/index.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.