fork() 함수 메모리 관련 질문이용
fork에 대해서 공부를 하다가 의문점이 생겼습니다.
fork를 하면 자식은 부모의 data, heap, stack 영역을 공유하는 것이 아니라 복사본을 가진다고 설명되어 있습니다.
그래서 다음 소스코드를 수행하면 자식의 값만 증가되는 것을 확인할 수 있는데
궁금한 점은.. 변수의 주소값이 자식과 부모가 동일하다는 것입니다.
메모리 주소가 같은데 어떻게 변수 값이 다를 수가 있는거죠?;;;
가르쳐주세요~
#include
#include
#include
int glob = 6;
char buf[] = "a write to stdout\n";
int main(void)
{
int var;
pid_t pid;
var = 88;
if(write(STDOUT_FILENO, buf, sizeof(buf)-1) != sizeof(buf)-1)
{
printf(" write err\n");
}
printf("before fork\n");
if((pid=fork()) <0)
{
printf("fork err\n");
}
else if( pid == 0)
{
glob++;
var++;
}
else
{
sleep(2);
}
// printf("pid = %d, ppid = %d, glob = %d, var = %d\n", getpid(), getppid(), glob, var);
printf("pid = %d, ppid = %d, glob addr = %#x, var addr = %#x\n", getpid(), getppid(), &glob, &var);
return 0;
}
아래 글이 도움이 되실듯 합니다.[Copy On
아래 글이 도움이 되실듯 합니다.[Copy On Write]
http://talkingaboutme.tistory.com/451
게시판내에도 이에 대한 내용을 찾을 수 있을겁니다.
그럼 수고하세요.
고맙습니다.
Copy on write!! 굿이군요 감사합니다.
&glob 이나 &var 로 나오는 건 프로세스의
&glob 이나 &var 로 나오는 건 프로세스의 가상 주소니까요. 실제 메모리에는 서로 다른 곳에 있겠지요.
좋은 하루 되세요!
위의 댓글과 님껄 조합하면..
Copy on write를 적용하여 즉, 쓸 때 physical 주소는 바뀌나 virtual 메모리 주소는 그대로라서 그런거군요?
댓글 달기