그것의 명백한이 주제에 대한 이전 post가 그 때문에 가상의 제안으로 우리는부모와 자식 주소 공간의 혼란
int
main()
{
pid_t pid;
int y = 3;
if ((pid = fork()) <0)
return -1;;
if(pid == 0) /* child */
{
printf(" before: %d %p\n", y, &y);
y *= 10;
printf("after: %d %p\n", y, &y);
}
else /* father */
{
sleep(1);
printf("father: %d %p\n" , y , &y);
}
return 0;
}
인쇄 된 주소가 각각의 printf (대한 동일과 같은 코드 블록을)하고 있음 그러나 내 혼란은 이것이 각각의 부모와 자식이 별도의 물리적 주소 공간을 소유한다는 것을 의미하며, 그렇다면 왜 가상 주소가 다른가 궁극적으로 MMU에 의해 대응하는 물리적 주소 공간에 매핑 될 수 없다는 것을 의미합니다.
자손 프로세스에서 곱셈을 실행할 때까지 자식과 부모가 동일한 물리적 주소를 가리키고 실행이 완료되고 궁극적으로 값이 변경되면 커널이 원래의 실제 주소 공간을 모든 것을 새로운 것으로 복사 할 때까지 실제 주소와 지금은 자식 주소의 가상 주소가 있습니다. 그러나 가상 주소 공간의 유사성은 단지 최적화를위한 것입니까? –
아니요, 필요합니다. 컴파일 된 프로그램은 가상 메모리 주소를 사용하여 변수에 액세스합니다 (물론 거의 모든 것). 이들은 컴파일 타임에 결정됩니다. – Viruzzo