A question about sceduling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm tracing the scheduling code of 2.6.12.
During the process creation, the parent process would let the child process
execute first to avoid the COW overhead.

In wake_up_new_task():

                   if (!(clone_flags & CLONE_VM)) {
            /*
             * The VM isn't cloned, so we're in a good position to
             * do child-runs-first in anticipation of an exec. This
             * usually avoids a lot of COW overhead.
             */
            if (unlikely(!current->array))
                __activate_task(p, rq);
            else {
                p->prio = current->prio;
                list_add_tail(&p->run_list, &current->run_list);
                p->array = current->array;
                p->array->nr_active++;
                rq->nr_running++;
            }
            set_need_resched(); 

It sets the flag to notify the kernel to reschedule.
But, the child has the same priority as it's parent and is the at the "tail"
of that priority queue.
What makes the scheduler choose the child to run before the parent?
I couldn't' find the point where the parent goes to sleep voluntarily, or
when did the scheduler put the parent behind the child.

Many Thanks
--
Roy

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux