日期:2014-05-16  浏览次数:20787 次

各位前辈,当代码执行一个系统调用fork()后,为什么如果共享页设置了写时拷贝位,在父进程之前调度子进程将具有优越性?内核如何能使子进
各位前辈,当代码执行一个系统调用fork()后,为什么如果共享页设置了写时拷贝位,在父进程之前调度子进程将具有优越性?内核如何能使子进程先运行?

谢谢各位的帮助!!!!

------解决方案--------------------
父进程调用fork后,进入系统调用 从系统调用返回前可能会接受调度。所以。父子进程谁先返回到用户空间是不确定的,不过,一般来说。父进程在可执行队列的前边,所以先运行的可能较大,如果想要让子进程先返回到用户空间,可以在进入系统调用的时候。设置标志位VFORK
这样,父进程在调用后会进入睡眠,直到子进程退出或者调用exeve()
------解决方案--------------------
因为子进程通常在fork之后会执行execv,加载另外一个镜像,而抛弃原来和父进程共享的内存。而父进程如果先执行,其会修改共享内存的内容从而造成不必要的复制操作。

通过将子进程放在队列的前面做到。