프로세스라는 것은 저번에 설명했듯이 메모리에서 실행 중인 프로그램을 말합니다.

그리고 컴퓨터를 사용할 때 여러 프로세스들이 빠르게 번걸아 가면서 실행합니다. 그 과정에서 하나의 프로세스는 여러 상태를 거치며 실행됩니다.

프로세스의 상태는 PCB를 통해 인식하고 관리합니다.

아래는 프로세스가 가질 수 있는 상태를 나타내는 프로세스 상태 다이어그램(Process State Diagram)이라고 합니다.

위의 상태처럼 여러 프로세스는 생성, 준비, 실행, 대기, 종료 상태를 거치며 실행됩니다. 운영체제는 이 상태를 PCB에 기록하며 프로세스들을 관리합니다.

프로세스가 여러 상태를 가진다는 것은 알겠는데 각 상태는 어떤 의미를 나타내는 것인지 궁금할 수 있습니다. 그렇다면 각 상태에 대해서 간단하게 설명하겠습니다.

  • 생성(New) : 이제 막 메모리에 적재되어 PCB를 할당받은 상태이며, 생성 상태를 거쳐 실행할 준비가 완료된 프로세스는 곧바로 실행되지 않고 준비 상태가 되어 CPU의 할당을 기다립니다.

  • 준비(Ready) : 현재 CPU를 할당받아 실행할 수 있지만, 아직 자신의 차례가 아니기에 기다리고 있는 상태입니다.

  • 실행(Running) : CPU를 할당받아 실행 중인 상태를 의미합니다.

  • 대기(Waiting) : 입출력 작업은 CPU에 처리 속도가 느린데, 이 입출력 작업을 요청한 프로세스는 끝낼 때까지 기다려야 합니다. 이렇게 입출력장치의 작업을 기다리는 상태를 대기 상태라고 합니다. 입출력 작업이 완료되면 해당 프로세스는 다시 준비 상태로 CPU 할당을 기다립니다.

  • 종료(Terminated) : 프로세스가 완전히 종료되는 것을 말합니다. 운영체제는 PCB와 프로세스가 사용한 메모리를 정리합니다.

프로세스 생성 기법

운영체제가 초기에 수행하는 일 중에 하나는 최초의 프로세스(Init)을 생성하는 것입니다. 이렇게 만들어진 프로세스가 프로세스를 생성하고 만들어진 프로세스가 또 프로세스를 생성합니다.

이 최초의 프로세스(Init)는 이름이 운영체제마다 다르며, Init은 Unix 운영체제 기준에 따른 이름입니다.

프로세스를 생성한 쪽은 부모 프로세스(Parent Process), 만들어진 프로세스를 자식 프로세스(Child Process)라고 말합니다. 또한 같은 부모를 갖는 자식 프로세스끼리는 형제(Sibling) 프로세스라고 말합니다.

프로세스는 각각 고유의 번호를 가지며, 이 번호를 PID(Process Identifier)라고 합니다. 정수값이며, PPID부모의 PID를 뜻합니다.

부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성하고, 만들어진 복사본은 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체합니다.

fork는 자기 자신 프로세스의 복사본을 만드는 시스템 호출이기 때문에 부모 프로세스의 자원들이 자식 프로세스에 상속됩니다.

fork를 통해 복사본이 만들어진 뒤에 자식 프로세스는 exec 시스템 호출을 통해 새로운 프로그램으로 전환됩니다.

메모리 공간에 새로운 프로그램 내용이 덮어 써진다는 점에서 자식 프로세스가 새로운 옷으로 갈아입었다고 볼 수 있습니다.

부모 프로세스가 자식 프로세스를 fork 한 뒤에 부모 프로세스, 자식 프로세스 누구도 exec을 호출하지 않는 경우는 부모 프로세스와 자식 프로세스는 같은 코드를 병행하여 실행하는 프로세스가 됩니다.

이상으로 프로세스 상태와 생성 기법에 대해서 간단히 알아봤습니다.

참고

  • KOCW - 운영체제, 양희재 교수님
  • 혼자 공부하는 컴퓨터구조 + 운영체제
profile
꾸준함으로 성장하는 개발자 지망생

0개의 댓글