gpt4 book ai didi

xv6 中的上下文切换和定时器中断

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

我正在尝试修改 xv6 中的调度策略,其中 Parent 在 fork 之后首先运行。

childPid = fork();
if (childPid < 0)
{
printf("fork() is failed\n");
}
else if (childPid == 0) // child
{
printf(" child! ");
exit();
}

printf(" parent! ");

由于 xv6 的调度程序总是先运行父进程,我需要先将上下文切换到子进程,以便子进程先运行,然后父进程运行。我试过在代码中使用 wait() 但等待会失败,我不想使用失败。当我的用户级程序执行 fork 时,我需要修改上下文切换。

在 xv6 fork() 系统调用中,我做了以下更改

  acquire(&ptable.lock);
np->state = RUNNABLE;
swtch(&cpu->scheduler, proc->context);
release(&ptable.lock);

但这似乎不起作用。它与定时器中断有关吗?进行上下文切换后,如何实现先在 fork 中运行 child。

最佳答案

您可以使用电话 sched_yield()在父代码中,这将使父线程放弃 CPU,而另一个线程将开始运行。

关于xv6 中的上下文切换和定时器中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28821721/

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