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

时间:2015-03-03 00:03:20

标签: c xv6

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

1 个答案:

答案 0 :(得分:0)

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