본문 바로가기
Linux/SystemProgramming

fork()와 vfork()에 대해서.

by neohtux 2016. 8. 29.
728x90

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

300x250

댓글