我正在尝试修改xv6中的调度策略,在该策略中,父进程在派生之后先运行。
childPid = fork();
if (childPid < 0)
{
printf("fork() is failed\n");
}
else if (childPid == 0) // child
{
printf(" child! ");
exit();
}
printf(" parent! ");因为xv6的调度程序总是先运行父进程,所以我需要先将上下文切换到子进程,这样子进程就会先运行,然后父进程才会运行。我尝试在代码中使用wait(),但等待将失败,我不想使用fail。当我的用户级程序执行fork时,我需要修改上下文切换。
在xv6 fork()系统调用中,我做了以下更改
acquire(&ptable.lock);
np->state = RUNNABLE;
swtch(&cpu->scheduler, proc->context);
release(&ptable.lock);但这似乎并不管用。是不是跟计时器中断有关。在执行上下文切换后,如何实现在fork中先运行child。
发布于 2015-03-03 08:09:54
您可以在父代码中使用调用sched_yield(),这将使父线程放弃CPU,而另一个线程将继续运行。
https://stackoverflow.com/questions/28821721
复制相似问题