1 minute read

부모 프로세스 & 자식 프로세스

한 개의 프로세스는 실행되는 도중에 프로세스를 생성하는 시스템 콜(UNIX에서는 fork() )을 통해 새로운 프로세스들을 생성한다. 이 때 생성하는 프로세스를 부모 프로세스(paraent process)라 하고, 생성된 프로세스를 자식 프로세스(child process)라고 한다. 그래서 자식은 자식을 낳고.. 할 수 있는 구조이기 때문에 트리 모양을 띄게 된다.

1

프로세스는 CPU 타임과 메모리, 파일, 입출력 장치 등의 자원이 필요하기 때문에 부모 프로세스가 자식 프로세스를 생성하게 되면 생성된 자식 프로세스는 운영체제로부터 직접 자원을 제공 받거나 부모 프로세스 자원의 일부를 사용할 수도 있게 된다.

다음과 같이 실행된다.

-부모 프로세스가 자식 프로세스들과 병행되어 같이 실행됨.

-자식 프로세스가 먼저 실행되어, 이들이 모두 종료될 때까지 부모 프로세스는 대기한다.

주소 공간(Address space)는 다음과 같다.

-자식 프로세스는 부모 프로세스와 완전히 같은 복사본이다.

-자식 프로세스는 부모 프로세스와 다른 새 프로그램이 탑재된다.

프로세스 관련 시스템 콜 함수

앞에서도 잠깐 언급했듯, UNIX 프로그램에서는 fork()라는 시스템 콜 함수를 통해 현재 프로세스에서 새로운 프로세스를 하나 생성한다.

  • fork()의 기능:
  1. 프로세스에서 새로운 프로세스 하나를 생성
  2. 생성된 프로세스는 부모 프로세스와 동일한 주소 공간을 가짐. 때문에 부모 프로세스와 자식 프로세스가 수월하게 통신할 수 있도록 해줌
  3. 부모, 자식 프로세스 모두 fork() 호출 이후 실행을 계속하지만, 지식 프로세스는 0을 반환하고 부모 프로세스는 non-zero를 반환함.
  4. 자식 프로세스는 부모 프로세스의 fork() 호출 이후 내용부터 실행됨.
  • exec()의 기능:
  1. 일반적으로 fork() 호출 이후에 호출됨.
  2. 프로세스의 메모리 공간을 새 프로그램으로 교체하여 자식 프로세스가 부모 프로세스와 다른 일을 하도록 할 수 있음.
  3. exe() 시스템 콜을 포함한 기존의 프로그램을 지우고 새로운 binary file을 메모리에 탑재함.
  • wait()의 기능:

자식 프로세스가 종료될 때까지 부모 프로세스를 대기 시킴

  • exit()의 기능:

프로세스가 마지막 구문을 실행 완료하면 종료 시킴.

이 때 프로 세스는 부모 프로세스에게 int 형태인 status value를 반환하고, wait()를 통해 물리적/가상 메모리, 입출력 버퍼 등을 포함한 모든 자원은 운영체제에 의해 할당 해제 됨.

프로세스 종료

부모 프로세스가 자식 프로세스의 실행을 종료 시킬 수 있는 경우는 3가지가 있다.

  1. 자식 프로세스가 자신에게 허용된 자원을 초과하여 사용한 경우 (부모 프로세스가 자식 프로세스의 상태를 모니터링 하는 매커니즘이 존재해야 함.)
  2. 자식 프로세스에게 할당된 일이 더이상 필요하지 않은 경우
  3. 운영체제에서 부모 프로세스가 종료 되었을 때 자식 프로세스가 계속 실행되는 것을 허용하지 않을 경우. (Cascading Termination)



Tags:

Categories:

Updated:

Leave a comment