본문 바로가기

컴퓨터 공학/운영체제

프로세스 관리

프로세스는 프로그램이 실행됨에 따라서 생성된다는 것으로 알고있다. 

그렇다면 프로세스는 어떻게 생성되며 어떻게 종료되는 것 일까?

 

프로세스는 다음과 같은 부모 자식 관계로 OS 에게 관리된다. 

 

 

프로세스는 위와 같이 트리 구조로 관리되어 지고 기본적으로 새로 생성 되려면 기존 프로세스의 시스템 콜에 의해 생되어야 하며 생성 시스템 콜 함수를 fork(); 라고 한다. 이후 새로 생성된 자식 프로세스는 새롭게 공간을 할당 받고 exec() 시스템 콜로 매개 변수에 따라 자신이 실행할 다른 프로그램의 코드를 실행하며 이는 곧 새로운 프로그램의 프로세스가 된다. 

 

그렇게 자식 프로세스는 자신의 작업이 끝나면 일반적으로는 exit(); 시스템 콜을 호출하여 자발적으로 할당 받은 자원을 반납하고 종료되는데 이를 '죽는다' 라고 표현하기도 한다.

 

하지만 자식 프로세스가 항상 자발적으로 죽지만은 않는다. 자식 프로세스는 부모 프로세스로 부터 생성 되었으며 부모가 죽기 전까지는 프로그램 코드를 실행하지만 특정 사유에 의해 부모가 자식 프로세스를 강제로 종료할 수 도 있고 부모가 죽어야하는 경우에도 부모는 자신의 모든 자식 프로세스를 강제로 죽인뒤 종료된다. 이러한 강제 종료를 abort 라고 하며 가장 쉬운 예시로 리눅스 환경에서 -kill 혹은 ctrl + c 입력 시 실행 중이던 프로세스가 종료되는 것을 볼 수 있다. 

 

따라서 프로세스는 시스템 콜에 의해 생성 및 종료 되고 자식 프로세스가 되어 정상 완료 되기도 하지만 문제가 생겼을 경우 부모 프로세스에 따라 강제 종료 되기도 하며 위와 같은 방식으로 OS 에서 관리한다고 볼 수 있다. 

 

마지막으로 주요 시스템 콜 4가지의 기능을 간략하게 설명하며 이어서 프로세스 간 통신을 알아보도록 하자.

 

fork() : 자식 프로세스 생성, 함수를 선언한 위치(PC)부터 생성되기 때문에 자식 프로세스는 부모 프로세스와 동일한 코드를 가졌어도 이전 코드는 실행하지 못한다. 

 

exec("fileInfo", data) : 생성된 자식 프로세스로 다른 코드를 실행 및 매개 변수 전달. 언어마다 요구하는 문법이 다르지만 기본적으로 매개 변수를 통해 다른 코드 파일을 실행하며 추가로 데이터를 넘길 수 있다. 

 

wait() : CPU 반납 후 wait 상태로 넘어가기. 반납 전에 자식 프로세스가 존재한다면 종료되기 전까지 기다린다. 

 

exit() : 자발적 종료를 위한 시스템 콜.

'컴퓨터 공학 > 운영체제' 카테고리의 다른 글

프로세스 통신  (0) 2023.01.24
CPU 스케쥴링  (0) 2023.01.21
프로세스(Process), 스레드(Thread)  (0) 2023.01.19
커널(Kernel), 시스템 콜(System Call)  (1) 2023.01.19
운영체제 개요  (0) 2023.01.18