我正在尝试修改 xv6 中的调度策略,其中 Parent 在分叉后首先运行。
childPid = fork();
if (childPid < 0)
{
printf("fork() is failed\n");
}
else if (childPid == 0) // child
{
printf(" child! ");
exit();
}
printf(" parent! ");
由于 xv6 的调度程序总是先运行 Parent,我需要先将上下文切换到 child,以便 child 先运行,然后再运行 parent。我曾尝试在代码中使用 wait() 但等待会失败,我不想使用失败。当我的用户级程序执行 fork 时,我需要修改上下文切换。
在 xv6 fork() 系统调用中,我做了以下更改
acquire(&ptable.lock);
np->state = RUNNABLE;
swtch(&cpu->scheduler, proc->context);
release(&ptable.lock);
但这似乎不起作用。它是否与定时器中断有关。在进行上下文切换后,如何实现在 fork 中首先运行 child。