본문 바로가기

Information Technology/OS

[운영체제] Process Management(1)

이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;)


프로세스 생성 방법 -> 복제 생성

오직 하나의 부모 프로세스가 자식 프로세스를 복제

 

프로세스를 생성하기 위해서는 자원(CPU)이 존재해야 함.

부모 프로세스와 자원을 공유하는 모델도, 공유하지 않는 모델도 존재함. 원칙적으로는 공유하지 않음.

자식 프로세스를 생성하는 순간부터는 사실 별도의 프로세스이기 때문에 경쟁의 사이.

 

프로세스가 수행(Execution)될 때

1) 부모와 자식이 공존하며 수행되는 경우도 있고

2) 자식이 종료될 때까지 기다리는(blocked) 모델도 존재

 

자식 프로세스의 생성은 부모 프로세스의 복제 생성

1) 부모 프로세스의 주소 공간을 자식 프로세스가 복사

2) 운영체제에 존재하는 PCB 등등을 복사

3) 그 이후에 새로운 프로그램을 덮어 씌울 수 있음

이 복제생성복제 생성 과정이 fork() 시스템 콜. 복제 생성 이후에 다른 프로그램으로 덮어 씌우는 것이 exec() 시스템 콜

이 두 과정이 독립적. 만약 fork 없이 exec을 실행하면 현재 진행 중인 프로세스가 완전히 새로운 프로세스가 되어버림.

 

부모 프로세스가 자식 프로세스를 생성한다고 하면 프로세스가 운영체제를 거치지 않고 새로운 프로세스를 생성한다는 것처럼 들릴 수 있지만, 오직 운영체제를 통해서만 프로세스를 생성할 수 있음. fork와 exec 모두 시스템 콜.

 

예를 들어 C언어에서 main 함수 내에 중괄호를 닫으면 프로그래머가 명시적으로 exit 선언을 하지 않더라도 컴파일러가 자동으로 exit을 통해 프로세스를 종료시킴.

프로세스가 종료될 때에는 자식 프로세스가 자식 프로세스에게 정보(output data)를 보냄. 이게 자발적인 프로세스 종료.

 

반면 비자발적인 프로세스 종료 과정도 있음. 프로세스가 자원의 한계치를 넘어서는 자원을 요청하면 강제로 자식 프로세스를 종료. 또는 자식 프로세스가 더 할 일이 없을 때에도 강제 종료. 마지막으로 부모 프로세스가 종료되면 자식 프로세스는 무조건 종료.

 

프로세스의 세계에서 부모 프로세스는 무조건 자식 프로세스보다 늦게 종료됨.