gpt4 book ai didi

c - OS161 : TLB miss on Load

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:27 25 4
gpt4 key购买 nike

当我运行 fork 测试时,我有一个 TLB miss on load 错误,我知道这是由于将错误的 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 中,您必须将地址空间填充到 curthread->t_addrspace 中。否则,您将遇到 TLB 加载未命中 错误,因为当前线程(子线程)的地址空间未初始化。

关于OS161 fork系统调用的更多细节,请引用这篇博客。而 child_forkentry 与您的 enter_forked_process 大致相同。 http://jhshi.me/2012/03/11/os161-fork-system-call/index.html

关于c - OS161 : TLB miss on Load,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9881404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com