추천, 2024

에디터의 선택

fork ()와 vfork () 사이의 차이점

fork ()vfork () 는 fork () 또는 vfork ()를 호출 한 프로세스와 동일한 새 프로세스를 만드는 시스템 호출 입니다. fork ()를 사용하면 상위 프로세스와 하위 프로세스를 동시에 실행할 수 있습니다. 다른 방법으로, vfork () 는 자식 프로세스가 실행을 완료 할 때까지 부모 프로세스의 실행을 일시 중단합니다. fork ()와 vfork () 시스템 호출의 가장 큰 차이점은 fork를 사용하여 생성 된 자식 프로세스는 부모 프로세스의 주소 공간과 분리되어 있다는 점입니다. 반면에 vfork를 사용하여 생성 된 하위 프로세스는 상위 프로세스의 주소 공간을 공유해야합니다.

아래 비교 차트의 도움으로 fork ()와 vfork () 사이의 차이점을 찾아 보겠습니다.

비교 차트

비교의 근거포크()vfork ()
기본하위 프로세스와 상위 프로세스에는 별도의 주소 공간이 있습니다.하위 프로세스와 상위 프로세스는 동일한 주소 공간을 공유합니다.
실행부모와 자식 프로세스가 동시에 실행됩니다.부모 프로세스는 자식 프로세스가 실행을 완료 할 때까지 일시 중단 상태를 유지합니다.
가감자식 프로세스가 주소 공간의 페이지를 변경하면 주소 공간이 별도이므로 부모 프로세스에서는 보이지 않습니다.하위 프로세스가 주소 공간의 페이지를 변경하면 동일한 주소 공간을 공유하기 때문에 상위 프로세스에서 볼 수 있습니다.
복사하여 복사fork ()는 부모와 자식이 공유 페이지를 수정할 때까지 부모와 자식이 같은 페이지를 공유하는 대안으로 copy-on-write를 사용합니다.vfork ()는 copy-on-write를 사용하지 않습니다.

fork () 정의

fork ()새로운 프로세스 를 생성하기 위해 사용되는 시스템 호출입니다. fork () 호출로 작성된 새 프로세스는 fork () 시스템 호출을 호출 한 프로세스의 하위 프로세스입니다. 하위 프로세스의 코드는 상위 프로세스의 코드와 동일합니다. 자식 프로세스를 생성 한 후에 부모 프로세스와 자식 프로세스는 모두 fork () 후에 다음 명령문에서 실행을 시작하고 두 프로세스가 동시에 실행됩니다.

부모 프로세스와 자식 프로세스는 별도의 주소 공간을 가지고 있습니다. 따라서 프로세스 중 하나가 코드의 명령문이나 변수를 수정하는 경우. 다른 프로세스 코드에는 반영되지 않습니다. 자식 프로세스가 부모 프로세스에 영향을 미치지 않는 코드를 수정한다고 가정 해 봅시다.

생성 된 자식 프로세스는 즉시 exec ()를 호출합니다. exec () 시스템 호출 은 프로세스 를 해당 매개 변수에 지정된 프로그램으로 바꿉니다 . 그런 다음 하위 프로세스의 개별 주소 공간은 아무 소용이 없습니다. 여기서 한 가지 대안은 copy-on-write입니다.

copy-on-write 는 상위 프로세스와 하위 프로세스가 동일한 주소 공간을 공유하도록합니다. 임의의 프로세스가 주소 공간의 페이지에 쓰는 경우 프로세스가 독립적으로 작동 할 수 있도록 주소 공간의 사본이 작성됩니다.

vfork ()의 ​​정의

fork ()의 ​​수정 된 버전은 vfork ()입니다. vfork () 시스템 호출은 새 프로세스를 만드는데도 사용됩니다. fork ()와 비슷하게 여기에 생성 된 새 프로세스는 vfork ()를 호출 한 프로세스의 자식 프로세스입니다. 하위 프로세스 코드는 상위 프로세스 코드와 동일합니다. 여기서 자식 프로세스 두 프로세스가 동일한 주소 공간을 공유하므로 실행이 완료 될 때까지 상위 프로세스 의 실행일시 중단합니다 .

자식 프로세스와 부모 프로세스는 동일한 주소 공간을 공유합니다. 프로세스 중 하나라도 코드를 수정하면 동일한 페이지를 공유하는 다른 프로세스에서 코드를 볼 수 있습니다. 부모 프로세스가 코드를 변경한다고 가정 해 봅시다. 그것은 자식 프로세스의 코드에 반영됩니다.

vfork ()를 사용하면 자식 프로세스와 부모 프로세스에 대해 별도의 주소 공간을 만들지 않습니다. 따라서 자식 프로세스가 생성 된 직후 exec ()를 호출 하는 곳에서 구현 되어야합니다. 따라서 주소 공간의 낭비가 없으며 프로세스를 만드는 효율적인 방법입니다. vfork는 copy-on-write를 사용하지 않습니다.

fork ()와 vfork () 사이의 주요 차이점

  1. fork와 vfork의 주된 차이점은 fork에 의해 생성 된 자식 프로세스가 부모 프로세스와는 별도의 메모리 공간 을 가지고 있다는 것입니다. 그러나 vfork 시스템 호출로 작성된 하위 프로세스는 상위 프로세스 와 동일한 주소 공간 을 공유합니다.
  2. fork를 사용하여 생성 된 하위 프로세스는 상위 프로세스와 동시에 실행 됩니다. 반면, vfork를 이용하여 생성 된 자식 프로세스는 실행이 완료 될 때까지 부모 프로세스의 실행을 일시 중단 합니다.
  3. 부모와 자식 프로세스의 메모리 공간이 다른 프로세스에 의해 수행 된 별도의 수정이므로 다른 페이지에도 영향을 미치지 않습니다. 그러나 부모 및 자식 프로세스 공유가 동일한 프로세스에 의해 수행 된 메모리 주소 수정은 주소 공간에 반영됩니다.
  4. 시스템 호출 fork ()는 대안으로 copy-on-write 를 사용하여 child와 parent 프로세스가 페이지를 수정하기 전까지 동일한 주소 공간을 공유하게합니다. 반면에 vfork는 copy-on-write를 사용하지 않습니다.

결론:

자식 프로세스가 fork ()를 사용하여 생성 한 직후 exec ()를 호출하면 vfork () 시스템 호출을 구현해야합니다. 자식 프로세스와 부모 프로세스를위한 별도의 주소 공간은 여기서 사용되지 않습니다.

Top