[OS] Process State와 Layer

touhou09·2024년 11월 7일
0

컴퓨터 이론

목록 보기
18/47

Process State

Process는 저마다의 상태를 가지는데 이를 Process State라고 한다.
이는 5가지가 있다.

  • New
    Process가 생성되어 메모리에 적재된 뒤 PCB에 할당받은 상태, 바로 실행되지 않고 Ready 상태가 되어 CPU의 할당을 기다린다.
  • Ready
    CPU를 할당받으면 실행할 수 있는 상태, 아직 CPU 할당을 받지 못했으며 CPU가 할당되면 실행된다.
  • Running
    CPU를 할당받아 실행 중인 상태, 실행 중인 process는 할당된 시간 동안 CPU를 사용하며, 할당된 시간을 모두 사용하면 Timer Interrupt가 발생하여 다시 Ready 상태가 되며 실행 도중 IO 장치를 사용한다면 IO 작업이 끝날때까지 Blocked 상태가 된다.
  • Blocked
    Process는 실행 도중 IO 장치를 사용하는 경우가 있는데, 이때 IO 작업은 CPU에 비해 처리 속도가 느리므로 IO 작업을 요청한 process는 IO Interrupt가 종료될 때 까지 기다려야 한다. 이렇게 IO 장치의 작업을 기다리는 상태이다.
  • Terminated
    Process가 종료된 상태, OS는 PCB와 process가 사용한 메모리를 정리한다.

그림으로 보면 아래와 같다.

Process Layer

Process는 실행 도중 System call을 통해 다른 process를 생성한다.
이때 생성한 process는 parent process, 상생된 process를 child process라고 한다.

parent와 child는 엄연히 다른 process로 분류되며 각기 다른 PID를 가지며, 일부 OS는 PCB에 parent의 ID인 PPID를 기록하기도 한다.

child process는 또 다른 child를 생성하기도 하며, 많은 OS는 process가 process를 생성하는 Process Layer라 한다.

Process가 child를 만들고 자신만의 코드를 실행하는 과정은 아래 2가지 기능(System call)을 통해서 진행된다.

  • fork()
    자신의 사본을 child로 생성한다. 즉, 자신의 사본을 만드는 system call이다.
    PID와 메모리 위치 등은 원본과 다르다.
    병렬 작업 및 프로세스 분기를 위해 사용된다.
  • exec()
    현재 process를 정지하고 완전히 새로운 프로그램으로 실행한다.
    기존의 process는 대체되면서 새로 호출되는 프로그램이 동일한 PID를 유지하며 실행되고 나머지 영역을 초기화한다.
    새로운 프로그램을 실행하기 위해 활용된다.

fork()를 실행하면 parent와 child는 독립적인 실행 흐름을 가지게 되며 동기화가 제대로 이루어지지 않으면 Race Condition(후에 설명)이 발생 가능하다.
또한, parent가 child를 생성한 후, parent가 먼저 종료된다면 Zombie Process가 남을 수 있다.
Zombie Process는 process table에 기록된 상태 정보만 남고, 실제 자원을 점유하지 않지만 PID를 계속 사용하기 때문에 parent에서 반드시 wait() 등을 호출해 child의 종료 상태를 확인하고 수거해야만 하며, 만약 관심이 없는 경우에는 SIGCHLD를 활용해 child의 종료를 무시하고 자동으로 수거할 수 있다.

profile
Engineer가 되기 위하여

0개의 댓글