CS/운영체제(OS)

프로세스 관리 : 프로세스 생성과 종료, 부모 프로세스와 자식 프로세스

hyunah 2022. 4. 21. 15:55

프로세스 생성

 

시스템이 부팅된 후 최초로 생성되는 프로세스는 운영체제가 직접 생성하지만, 그 이후에는 이미 존재하는 프로세스를 복제하여 다른 프로세스를 생성하게 된다. 이때 새로운 프로세스를 생성하는 기존 프로세스부모 프로세스라고 하고, 새로 생성되는 프로세스자식 프로세스라고 한다. 프로세스는 전체적으로 트리의 계층 구조를 형성한다.

 

 

 

프로세스는 자원을 필요로 하는데 이 자원을 운영체제로부터 받을 수도 있고 부모 프로세스와 공유할 수도 있다. 부모와 자식 간의 자원 공유는 크게 3가지로 나눠진다.

 

 

1. 부모와 자식이 모든 자원을 공유하는 모델

 

2. 일부만을 공유하는 모델

 

3. 자원을 전혀 공유하지 않는 모델

 

 

대부분의 경우 3번에 속하며, 프로세스 부모와 자식 프로세스의 수행 방식 또한 두 가지로 나뉠 수 있다.

 

 

1. 부모와 자식이 공존하며 순차적으로 수행되는 모델

 

2. 자식 프로세스가 종료될 때까지 부모가 기다리는(waiting queue) 모델 : 유닉스의 wait() 시스템 콜 이용.

 

 

2번의 경우 자식이 종료되고 나면 부모 프로세스는 다시 준비(ready) 상태로 돌아온다.

 

 

 

 

 

프로세스 생성 과정

 

1. 자식이 PID를 제외한 부모의 주소 공간을 그대로 복사해서 가져온다. 따라서 이 단계까지 시행하면 부모와 자식 프로세스는 별도의 주소 공간을 갖게 되지만 그 안에 동일한 내용을 담고 있게 된다. : 유닉스의 fork() 시스템 콜

 

2. 복사해온 공간에 자식이 새로운 프로그램을 올린다. : 유닉스의 exec() 시스템 콜. code 부분을 새로운 수행 프로그램을 교체한다. 

 

 

 

 

프로세스 종료

프로세스의 종료에는 크게 두 가지가 있다.

 

 

1. 자발적 종료

 

마지막 statement를 수행한 후에 부모에게 output data를 보내고, 운영체제에게 이를 알려준 후 종료된다. 프로세스의 각종 자원들이 운영체제에 반납된다. 이때 유닉스의 exit() 시스템 콜을 이용한다. 이는 프로그램에 명시적으로 넣지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어준다.

 

 

 

2. 비자발적 종료

 

비자발적 종료에는 세 종류가 있다.

 

 

1. 부모 프로세스가 자식 프로세스를 강제 종료시키는 경우

 

자식 프로세스가 한계치를 넘어서는 자원을 요청하거나 자식에게 할당된 태스크가 더 이상 필요하지 않은 경우 부모 프로세스는 자식의 수행을 종료시킨다. 이때 유닉스의 abort() 시스템 콜을 이용한다.

 

 

2. 키보드로 kill, break을 친 경우

 

 

3. 부모 프로세스가 종료하는 경우 : 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수행되도록 허용하지 않는다. 부모가 종료하기 전에 자식들이 먼저 종료된다.