Wikipedia에 따르면 (잘못 될 수 있음)
fork () 시스템 호출이 발행되면, 상위 프로세스에 해당하는 모든 페이지의 사본이 작성되고 하위 프로세스의 OS에 의해 별도의 메모리 위치에로드됩니다. 그러나 특정 경우에는 필요하지 않습니다. 자식이 "
exec
"시스템 호출 (C 프로그램 내에서 실행 파일을 실행하는 데 사용됨)을 실행하거나을 종료 한 직후에 종료되는 경우를 고려하십시오fork()
. 자식 프로세스가 부모 프로세스에 대한 명령을 실행하기 만하면 부모 프로세스의 페이지exec
공간 을 복사 할 필요가 없습니다. 호출 한 프로세스의 주소 공간이 실행되는 명령으로 바뀝니다.이러한 경우 COW (Copy-On-Write)라는 기술이 사용됩니다. 이 기술을 사용하면 분기가 발생할 때 상위 프로세스의 페이지가 하위 프로세스에 복사되지 않습니다. 대신, 페이지는 하위 프로세스와 상위 프로세스간에 공유됩니다. 프로세스 (부모 또는 자식)가 페이지를 수정할 때마다 수정을 수행 한 해당 프로세스 (부모 또는 자식)에 대해 특정 페이지 만 별도의 복사본이 만들어집니다. 이 프로세스는 이후의 모든 참조에서 공유 된 페이지 대신 새로 복사 된 페이지를 사용합니다. 다른 프로세스 (공유 페이지를 수정하지 않은 프로세스)는 계속 페이지의 원본을 계속 사용합니다 (이제 더 이상 공유되지 않음). 일부 프로세스가 페이지를 쓸 때 페이지가 복사되므로이 기법을 쓰기시 복사라고합니다.
프로세스 중 하나가 페이지에 쓰려고 할 때 페이지의 새 사본이 페이지 결함을 생성 한 프로세스에 할당되고 할당 된 것으로 보입니다. 원본 페이지는 나중에 쓰기 가능으로 표시됩니다.
내 질문은 : fork()
프로세스가 공유 페이지에 쓰려고 시도하기 전에 여러 번 호출되면 어떻게됩니까 ?
pmap -XX PID
또는로 확인할 수 있습니다 cat /proc/PID/smap
.