1

我正在尝试修改 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。

4

1 回答 1

0

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

于 2015-03-03T00:09:54.060 回答