I believe his question actually sounds like: why does Linux need two system calls to start running a new program? Wouldn't it be simpler to do this the way Win32 does it: a CreateProcess() system call that actually loads a NEW program in NEW process?
Enrico Granata Computer Science & Engineering Department (EBU3B) - Room 3240 office phone 858 534 9914 University of California, San Diego On Dec 15, 2010, at 10:34 AM, Mulyadi Santosa wrote: > Hi :) > > On Thu, Dec 16, 2010 at 01:01, Chaitannya Mahatme <chaitan...@gmail.com> > wrote: >> I tried finding answer to this question in many books but never quite got a >> satisfactory answer to this question. > > Satisfaction is hard to reach sometimes, you know :) > >> A fork process would replicate it parent, my question is >> >> Why is fork necessary to create a process. > > it's just a name actually.... what really matters is the procedure > which are done inside fork() (as system call). > >> Why replicate a existing process >> before creating a new process. > > Replicate? You mean Copy on Write(COW)? > > OK, I think what you refer here is actually COW. Essentially, when new > process is created (forked), mainly new task struct, new signal > handler tables, vma tables are created. But specificly for the VMAs > (Virtual Memory area), they are simply pointing to its parent. > > only when a write process is targetting that COW-ed area, page fault > is invoked and new page...one by one..as needed..are allocated > >> The exec algorithm is executed after fork which overrides what fork has >> done, then why do fork. Why can't we directly do exec. > > I am not sure that I understand the above question correctly, you mean > "why fork then exec if we could simply do exec?" > > First of all, I forgot few details about fork etc...but let's assume > there is indeed exec after fork. What you need to know here is that > fork() is a way to prepare complete process structure along with the > process address space. > > While exec spesifically just deal with how the file (quite likely ELF > binary) should be loaded and executed. So, in short, fork() build > foundation, exec() put the bricks and mortars. > > After all, again, fork() just COW-ed its parent VMAs...thus when exec > goes, there is no significant penalty.... no page is allocated for VMA > after all during fork() > > -- > regards, > > Mulyadi Santosa > Freelance Linux trainer and consultant > > blog: the-hydra.blogspot.com > training: mulyaditraining.blogspot.com > > -- > To unsubscribe from this list: send an email with > "unsubscribe kernelnewbies" to ecar...@nl.linux.org > Please read the FAQ at http://kernelnewbies.org/FAQ >