我正在尝试修改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,以便子项先运行,然后运行父项。 我已经尝试在代码中使用wait(),但等待将失败,我不想使用失败。 当我的用户级程序执行fork时,我需要修改上下文切换。
在xv6 fork()系统调用中,我进行了以下更改
acquire(&ptable.lock);
np->state = RUNNABLE;
swtch(&cpu->scheduler, proc->context);
release(&ptable.lock);
但这似乎不起作用。 它是否与定时器中断有关。 如何在执行上下文切换后首先在fork中运行child。