Search the web
Sign In
New User? Sign Up
linux-bangalore-programming · LB Programming Discussions
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Hear how Yahoo! Groups has changed the lives of others. Take me there.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
fork() - understanding the memory space of parent and child   Message List  
Reply | Forward Message #7541 of 7596 |
Re: [blug-prog] fork() - understanding the memory space of parent and child

Hi Vinod,

calling fork or any family of fork calls will call the "clone" system call
with different parameters. Most implementations of pthreads also call the
clone system call. In case of fork, the data section,stack/heap are copied.
only the text section is common since it is supposed to be execute only
whereas the other section contents could be modified. There is this COW
(copy on write) feature wherein the data/stack/heap sections are replicated
the first time any of its contents are modified in any of the 2 processes.
In the below code, You are creaing a child process using the fork() lib call
and waiting in the parent for the child to complete execution. In the child,
from the function "main", you are modifying the contents of local (stack)
variable "var" which means COW would occur and the stack is replicated.
Which means that address (physical) of "var" is now "different" in the two
processes but the virtual address can be same and hence the value of var in
only the child is incremented. When I say "different". I'am referring to
the physical memory address. You must remember that you are running the
processes in different virtual memory spaces. So, the address "bff5a700" is
the virtual address. But the physical address of "var" will be different for
the two processes. The OS and MMU together make it transparent to the user
space processes. To the user space, the entire memory address space is
dedicated to itself. The actual virtual-physical address mapping is handled
by the MMU/OS together.
Hope this answers your Q

Regards,
-Rajesh TN



On Fri, Apr 3, 2009 at 5:52 PM, vin_vrs <vinod.chum@...> wrote:

> My queries are :
> 1. how the fork actually works regarding the memory space of child and
> parent
> 2. the below code shows same address for a auto variable "var" , but
> different values in case of parent and child.
> 3. how could same address contain two different values.
>
> /* the code may look big, but its relatively simple, plz
> * do look into it
> */
> /* headers included */
> int main( int argc, char* argv[] ){
> pid_t pid;
> int var = 0;
>
> printf("before fork address of var = %x\n", &var);
>
> if( (pid = fork()) < 0 )
> perror("perror");
> if( pid == 0 ){
>
> printf("child process running pid = %d \n",getpid());
> var++;
> printf("child address of &var = %x\n", &var);
> printf("child value of var = %d\n", var);
> }
> else{
> wait();
> printf("parent process running = %d \n",getpid());
> printf("parent address of &var = %x\n", &var);
> printf("parent value of var = %d\n", var);
> }
>
> exit(0);
>
> }
>
> /* sample output */
>
> [root@localhost process]# cc p2.c -o p2.out
> [root@localhost process]# ./p2.out
> before fork address of var = bff5a700
> child process running pid = 3918
> child address of &var = bff5a700
> child value of var = 1
> parent process running = 3917
> parent address of &var = bff5a700
> parent value of var = 0
>
> Thanks in advance,
> Vinod
>
>
>



--
______________________________

Regards
Rajesh T.N.


[Non-text portions of this message have been removed]




Sat May 2, 2009 6:28 pm

rajeshatn
Offline Offline
Send Email Send Email

Forward
Message #7541 of 7596 |
Expand Messages Author Sort by Date

My queries are : 1. how the fork actually works regarding the memory space of child and parent 2. the below code shows same address for a auto variable "var" ,...
vin_vrs
Offline Send Email
Apr 3, 2009
1:33 pm

I am just making an assumption. May be only the offset is same; physical addresses may be different. Regards, Joe. ________________________________ From:...
Joe Cheri Ross
joecheriross
Offline Send Email
Apr 4, 2009
6:08 am

... Pick any OS related book(Silberchantz is well known) for an in depth intro. ... Those are two different variables in two different address spaces. fork ...
Sridhar.V.Iyer
sridhar.iyer
Offline Send Email
May 1, 2009
4:15 am

Hi Vinod, calling fork or any family of fork calls will call the "clone" system call with different parameters. Most implementations of pthreads also call the ...
Rajesh T N
rajeshatn
Offline Send Email
May 2, 2009
6:58 pm
Advanced

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help