vfork() 함수는 fork()의 단점인 오버헤드(ex: 프로세스 구조체를 할당받는 시간과 메모리)를 낮춤으로써 고안되었다.
vfork()가 도입됐지만 fork()함수 또한 상당히 개선되었다.
가장 주목할만한 점은, 'copy-onwrite'의 도입이다.
프로세스의 주소공간의 복사는 ,같은 물리메모리들이 수정될때까지
넌지시 허용되어왔다. 이것은 대략 , vfork()가 생기게된 원인에대해는 정당화되지 않는셈이다.
이것은 실제로 vfork()의 기능적인 면에서 시스템의 중요한 부분의 의미론적인 오류이다.
비록 호환성을 위해 아직 까지 vfork()가 존재하는것일지 모르지만,
vfork()의 의미에 상관없이 fork()를 사용한다.
결국 fork()와 vfork()를 차이점에대해 어떨때 사용하는것에대해는 의미없는 일이다.
vfork()는 따로 자식프로세스가 종료되거나, 혹은 execve()함수를 호출하기전까지,
부모 프로세스의 주소공간을 공유할 뿐이다.
아까 말한 현재의 fork()함수는 copy-on-write 기법을 사용하여 프로세스 생성시
모든 자원을 복사하는 것이 아니고 변경사항이 생길 경우에만 복사하도록 구현되어 있다.
따라서, 현재 fork가 갖는 단점은
부모 프로세스의 페이지 테이블을 복사하는 것과 자식 프로세스를 기술하기 위한 프로세스 구조체를
할당받는 시간과 메모리 뿐이다.
vfork를 사용하는 경우에 execve를 바로 호출하지 않는 경우라면 자식 프로세스에서 수정한
변수들이 부모 프로세스에 영향을 미칠 수 있기때문 이것은 주의해야한다.
번역을 이상한게 한것 같아요
원본 : http://www.unixguide.net/unix/programming/1.1.2.shtml
'Linux > SystemProgramming' 카테고리의 다른 글
데몬(daemon) 정리. (0) | 2016.10.01 |
---|---|
쉘(Shell) 프로그램 (0) | 2016.09.04 |
프로세스와 쓰레드의 생성과 수행(부제 : 쓰레드와 프로세스의 차이점) (0) | 2016.08.29 |
댓글