게시:
수정:

프로세스(자식 프로세스)의 생성, 수행 및 종료에 대한 내용을 다룬다.

프로세스 생성 (Process Creation)

부모 프로세스가 자식 프로세스를 생성하는 식으로 생성한다. 부모 프로세스가 직접 복제를 할 수 없기 때문에 fork() 시스템 콜(System call)을 통하여 운영체제의 도움을 받아서 복제한다.

자식 프로세스는 부모 프로세스의 복제품으로 부모의 주소공간(Binary 및 PCB 등 OS data)을 완전히 복제한다. 복제한 주소공간은 메모리(Memory)를 할당 받고 자식 프로세스는 해당 공간에서 새로운 프로그램을 실행한다.

fork() 시스템 콜로 생성된 자식 프로세스를 수행할 때 프로그램의 처음부터 실행하면 중간에 자식 프로세스 자기 자신을 복제하기 위해 삽입된 fork()문을 마주쳐 추가적으로는 필요하지도 않은 손자 프로세스가 생성될 수 있다. 이 때문에 자식 프로세스는 처음부터 실행되지 않고 fork()문 다음부터 시작(PC가 가리키게)되며 이를 통해 본인이 자식 프로세스라는 사실을 알 수 있다.

또한 복제된 프로세스와 부모 프로세스를 구분하기 위하여 fork()문의 값을 반환할 때 부모 프로세스는 양의 정수를, 자식 프로세스는 0을 반환하게 구성한다.

COW(Copy-On-Write)

자식 프로세스가 복제될 때 부모 프로세스와 자식 프로세스가 동일한 내용인 경우 메모리 공간의 낭비가 발생하기 때문에 일부 효율적인 운영체제(리눅스 등)에서는 자식 프로세스가 부모 프로세스와 공간을 공유하다가 Write가 발생했을 때 필요한 부분만 메모리에 Copy한다. 이를 Copy on write 기법이라고 한다.

부모 프로세스와 자식 프로세스의 특징

1. 트리(Tree, 계층구조) 형성

부모 프로세스는 자식 프로세스를 여러 개 만들 수 있지만, 자식 프로세스의 하나의 부모만 갖는다. 따라서 프로세스를 계속 확장하면 트리 형태의 계층구조가 형성된다.

2. 자원 공유

프로세스는 자원(Resource)을 필요로하므로 생성 시 운영체제로부터 필요한 각종 자원을 할당받는다. 원칙적으로 부모 프로세스와 자식 프로세스는 자원을 공유하지 않으며 한정된 자원을 두고 경쟁한다.

  • 부모와 자식이 모든 자원을 공유하는 모델
  • 일부를 공유하는 모델
  • 아예 공유하지 않는 모델 → 일반적인 모델

프로세스 수행(Process execution)

부모 프로세스와 자식 프로세스는 공존하며 수행되는 모델로 항상 자식 프로세스보다 부모 프로세스가 늦게 종료된다. 만약 부모 프로세스가 종료되어야 하는 상황인데 자식 프로세스가 아직 수행중이면 자식 프로세스가 종료되기를 기다린다. (Wait)

프로세스 생성과 마찬가지로 자식 프로세스의 수행도 OS에 exec() 시스템 콜을 요청해서 실행하며 이를 통해 메모리에 덮어씌운다.

프로세스 종료(Process Termination)

프로세스가 종료되는 형태는 자발적 종료(exit)와 비자발적 종료(abort) 2가지로 구분할 수 있다.

exit() 시스템 콜은 명시적일 수도 있고 메인 함수 리턴 위치에 컴파일러가

자발적 종료(exit)

프로세스가 마지막 명령을 수행하면 운영체제에 명시적으로 exit() 시스템 콜을 보내 종료한다. 종료 시 부모 프로세스에게 Output data를 보내며(via wait), 프로세스의 각종 자원들은 운영체제에 반납한다.

exit() 시스템 콜은 프로세스를 Blocked 상태로 만든다. 만약 프로세스가 바로 종료되지 않는 상황이면 종료전까지 sleep하게 된다.

exit() 시스템 콜은 프로그램 내에 명시적적일 수도 있고 묵시적일 수도 있는데, 후자의 경우 메인 함수 반환(Return) 위치에 컴파일러(Compiler)가 삽입하게 된다.

비자발적 종료(abort)

종료되어야 하는 상황에 놓여 종료하는 강제 종료이다. 자식 프로세스에 할당된 자원이 한계치를 넘었거나, 자식 프로세스에게 할당된 태스크(Task)가 더이상 필요가 없거나, 부모 프로세스가 종료되는 경우에 해당한다.

운영체제는 부모 프로세스가 종료하는 경우 자식 프로세스가 더이상 수행되게 두지 않는다. 부모 프로세스가 종료되면 하위 프로세스들도 단계적으로 종료되고 만약 손자 프로세스나 증손자, 고손자 프로세스가 있다면 해당 프로세스들도 밑에서부터 단계적으로 종료되며 올라온다.

Reference

반효경, “반효경 [운영체제] 8. Process Management 1” KOCW. 2014년 3월 21일. video, http://www.kocw.net/home/cview.do?lid=b988d89cb0bc07b3


OS 시리즈 모두보기 (펼치기)


댓글남기기