운영체제

[OS/운영체제] 프로세스 (Process) - (3)

4Legs 2020. 11. 4. 23:23

프로세스의 생성

프로세스들이 이루는 트리 구조

한 프로세스는 실행되는 도중 프로세스 생성 시스템 콜을 통해 새로운 프로세스들을 생성할 수 있다.

다른 프로세스를 생성하는 프로세스를 부모 프로세스(Parent Process)라 하고, 다른 프로세스에 의해 생성된 프로세스를 자식 프로세스(Child Process)라 한다. 프로세스의 부모-자식 관계들은 트리의 형태로 나타나게 된다.

대부분의 운영체제에서는 프로세스들을 구별하기 위해 각 프로세스들에게 유일성을 가진 정수 PID(Process Identifier)를 부여한다.

일반적으로, 프로세스는 CPU time, 메모리, 파일, 입출력 장치 등의 자원이 필요하다. 따라서 어떤 프로세스가 다른 프로세스를 하나 생성하면, 생성된 프로세스는 운영체제로부터 직접 자원을 제공받거나 부모 프로세스 자원의 일부를 한정적으로 사용할 수도 있다.

 

한 프로세스가 다른 프로세스 하나를 생성했을 때, 두 프로세스들은 다음과 같이 실행될 수 있다.

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

 - 자식 프로세스들이 모두 종료될 때까지 대기한다.

 

또한, 생성된 새 프로세스의 주소 공간(Address space)은 다음과 같은 경우로 나뉜다.

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

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

 

[관련된 시스템 콜(UNIX)]

fork()

 - 현재 프로세스에서 새 프로세스 하나를 생성한다.

 - 생성된 프로세스는 부모 프로세스와 동일한 address space를 가진다. 이는 부모 프로세스와 자식 프로세스가 수월하게 통신(communicate)할 수 있도록 해준다. 

 - 부모, 자식 프로세스 모두 fork() 호출 이후 실행을 계속하지만, 자식 프로세스는 0을 반환하고 부모 프로세스는 non-zero 값을 반환한다.

 - 자식 프로세스는 부모 프로세스의 fork() 호출 이후 내용부터 실행된다.

exec()

 - 일반적으로 fork() 호출 이후에 호출된다.

 - 프로세스의 메모리 공간을 새 프로그램으로 교체한다. 이를 통해 자식 프로세스가 부모 프로세스와 다른 일을 하도록 할 수 있다.

 - exec() 시스템 콜을 포함한 기존의 프로그램을 지우고, 새 binary file을 메모리에 탑재한다.

wait()

 - 자식 프로세스가 종료될 때까지 부모 프로세스를 대기시킨다.

 

프로세스의 종료

프로세스는 자신의 마지막 구문을 실행 완료하면 exit() 시스템 콜을 통해 종료된다. 이때, 프로세스는 일반적으로 부모 프로세스에게 정수의 형태인 Status value를 반환하고 (wait()을 통해) 물리적/가상 메모리, 입출력 버퍼 등을 포함한 모든 자원은 운영체제에 의해 할당 해제된다.

 

부모 프로세스는 다음과 같은 이유들로 인해 자식 프로세스의 실행을 종료시킬 수 있다.

 - 자식 프로세스가 자신에게 허용된 자원을 초과하여 사용한 경우 (이를 위해서는 부모 프로세스가 자식 프로세스의 상태를 모니터링하는 메커니즘이 존재해야 함)

 - 자식 프로세스에게 할당된 일이 더 이상 필요하지 않은 경우

 - 운영체제에서 부모 프로세스가 종료되었을 때 자식 프로세스가 계속 실행되는 것을 허용하지 않을 경우 (이를 Cascading Termination이라 한다.)

 

IPC (InterProcess Communication)

운영체제 내에서 동시에 실행되고 있는 프로세스들은 서로 독립적이거나, cooperating 관계에 있다. 어떤 프로세스가 다른 프로세스에 영향을 주지 않고, 받지도 않을 때 두 프로세스는 독립적(Independent)이라 한다.  그렇지 않은 프로세스는 cooperating이라 한다.

Cooperating 프로세스들은 IPC(InterProcess Communication) 메커니즘을 필요로 한다. IPC는 프로세스 간 데이터 교환을 가능하게 해 주며, 크게 두 가지 유형으로 나뉜다.

 

공유 메모리(Shared Memory)

 - 운영체제에 의해 메모리의 특정 구간을 공유

 - 프로세스들은 단순히 메모리를 읽고 쓰기만 한다.

 - 공유 메모리에 대한 갱신은 다른 모든 프로세스들에게 즉시 보여진다.

 

메시지 패싱(Message Passing)

 - 데이터는 메시지 형식으로 전달된다.

 - 분산형 시스템에 더 적합하다.

 

 

 

※ 본 게시글은 『Operating System Concepts』 를 참고하여 작성되었습니다.