--- Denis Vlasenko <[EMAIL PROTECTED]> wrote:

> I was specifically thinking how our trick is working on _NOMMU_.
> Mostly for self-education. So, after execve on NOMMU old process
> is not destroyed, but "returned" to parent-after-vfork, and
> while parent does something, new process is already has memory
> allocated for it?
> 
> OIW: at execve, does kernel do something like this?
> 
>  if (vfork_was_done) {
>     create_and_start_new_process();
>     wake_up_parent_in_vfork();
>  } else {
>     destroy_current_process();
>     create_and_start_new_process();
>  }
> 
> 
> --
> vda
> 

No, vfork creates a new process (just like fork). I mean it creates a new struct
task_struct, copies the kernel stack, and so on. So the child is an entirely 
new process
with its own PID. What it does not copy is the mm_struct, but instead the 
child's one
points to the parent's one. So now the parent and child are different processes 
sharing
the same address space (due to CLONE_VM).
vfork on Blackfin calls do_fork() with flags CLONE_VFORK | CLONE_VM | SIGCHLD, 
see
kernel/fork.c for do_fork().
Inside do_fork(), if CLONE_VFORK is set, the parent waits on a completion 
variable until
the child signals it, which happens on execve() and on exit().

On execve(), the child detaches from the parent mm_struct (flush_old_exec() 
which calls
exec_mmap(), and itself called from the binary handler, e.g. load_flat_file() in
fs/binfmt_flat.c for FLAT), and sets the child's mm to point to a newly 
allocated
mm_struct (do_execve() does the allocation).
mm_release() called from exec_mmap() (on execve) and from exit_mm() (called 
itself from
do_exit()) checks whether the parent wait for a vfork completion, and if yes, 
signals it.

I hope that helps.
Regards,
Alex


      
____________________________________________________________________________________
Park yourself in front of a world of choices in alternative vehicles. Visit the 
Yahoo! Auto Green Center.
http://autos.yahoo.com/green_center/ 
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox

Reply via email to