首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xv6中的上下文切换和计时器中断

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

Stack Overflow用户
提问于 2015-03-03 08:03:20
回答 1查看 1.9K关注 0票数 1

我正在尝试修改xv6中的调度策略,在该策略中,父进程在派生之后先运行。

代码语言:javascript
复制
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()系统调用中,我做了以下更改

代码语言:javascript
复制
  acquire(&ptable.lock);
  np->state = RUNNABLE;
  swtch(&cpu->scheduler, proc->context);
  release(&ptable.lock);

但这似乎并不管用。是不是跟计时器中断有关。在执行上下文切换后,如何实现在fork中先运行child。

EN

回答 1

Stack Overflow用户

发布于 2015-03-03 08:09:54

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28821721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档