프로세스 실행 형태와 분류

프로세스 실행 형태

  1. CPU burst: I/O 수행 없이 CPU 작업만을 수행하는 시간.

  2. I/O burst: 프로세스가 I/O 요청으로 인해 수행을 중단하고 기다리는 시간.

    프로세스는 CPU burst와 I/O burst가 스위칭되어가면서 동작한다.

프로세스 분류

  1. CPU-bound process: 상대적으로 CPU burst 시간이 긴 프로세스. 예를 들어 머신러닝 코드를 돌린다고 하면 I/O는 거의 없고 CPU burst time이 훨씬 길다. CPU-bound 프로세스는 타임퀀텀을 거의 다 사용한다. I/O가 발생하지 않고 타이머 인터럽트에 의해 레디 큐로 넘어간다. I/O bound 프로세스보다 CPU를 많이 사용한다.

  2. I/O-bound process: 상대적으로 I/O burst 시간이 긴 프로세스. GUI나 로딩바가 차오르는 등의 입출력에 따른 반응을 보여줘야 하는 경우. 사용자와 interactive하게 동작하는 프로세스일 확률이 높다. 타임퀀텀을 다 사용하는 경우가 적다. 프로세스들 통계를 내보면 CPU bound process보다 I/O bound process가 더 많다.

프로세스 선정

Dispatcher

  1. Dispatch: 현재 실행 중인 프로세스를 중단하고 다음 실행할 프로세스를 선택하는 작업. 컨텍스트 스위칭의 일부로 간주된다. Dispatch latency는 dispatcher가 한 프로세스를 멈추고 다른 프로세스를 실행시킬 때까지의 시간이다. 이 구간에서 일어나는 일들은 현재 프로세스 상태를 PCB에 저장하고 스케줄러를 통해 프로세스를 선정하고 다음 실행할 프로세스의 PCB를 복구하는 과정으로, 컨텍스트 스위칭에서 일어나는 작업과 동일하며 커널 모드에서 이루어진다.

    Dispatch 과정 안에 스케줄링이 존재한다. Dispatch Latency가 길어지면 효율이 나빠지기 때문에 최대한 시간을 줄여야 한다. PCB 백업 및 복구 과정은 상수 시간에 걸리는 고정된 작업이지만, 스케줄링은 정책에 따라서 시간이 변동될 수 있다. 따라서 Dispatch Latency를 줄이기 위해서 스케줄링 알고리즘을 최적화할 필요가 있다.

선점형/비선점형 스케줄링

  1. 비선점형 스케줄링: CPU를 할당받으면 자발적으로 CPU를 반환하기 전까지 다른 프로세스는 점유가 불가한 스케줄링 방식. 프로세스가 종료되거나 I/O 때문에 waiting 상태가 되는 게 아니면 다른 프로세스가 점유할 수 없다. 대표적인 비선점형 스케줄링은 FIFO, SJF 등이 있다.
  2. 선점형 스케줄링: 우선순위가 높은 프로세스가 현재 실행 중인 프로세스를 중단시키고 점유할 수 있는 방식. 대표적으로 Round Robin 방식이 있다. 타임퀀텀이 설정되어 실행하다가 시간이 지나면 다음 프로세스로 전환된다.

스케줄링 성능 기준

  1. CPU Utilization: CPU를 최대한 바쁘게 유지하는 것.
  2. Throughput: 단위 시간 동안 몇 개의 프로세스를 처리할 수 있는가.
  3. Turnaround time: 프로세스가 처음 도착한 시간에서 완료될 때까지의 시간 (completion time – arrival time).
  4. Waiting time: 레디 큐에서 기다리고 있는 시간.
  5. Response time: 프로세스가 도착한 시간에서부터 처음 실행될 때까지의 시간 (첫 실행 – arrival time).