[운영체제] 프로세스 스케줄링(Process Scheduling)

유니야·2023년 1월 4일

운영체제(OS)

목록 보기
5/5
post-thumbnail

✏️ CPU 스케줄링

멀티 프로그래밍의 목적은 CPU를 최대한 사용하기 위해 몇몇 프로세스를 항상 실행시키는 것이다. 어떤 프로세스를 프로세서에 할당할 것인지 정하는 일을 프로세스 스케줄링이라 하는데, CPU 효율을 극대화하기 위해서는 적절한 스케줄링이 필요하다. CPU가 여러개 있을 때 어느 CPU에 할당할지 결정하는 것을 CPU 스케줄링이라 한다.
스케줄러(Scheduler): 메모리에 있는 Ready 상태의 프로세스 중 언제, 어떤 프로세스를 선택해서 CPU에서 실행시킬지 선택하는 모듈. 프로세스가 작업을 수행하려면 스케줄러로부터 CPU를 할당받아야 한다.

프로세스는 기본적으로 다음 두 가지 단계의 반복으로 구성된 사이클의 형태이다.

  • CPU burst: CPU만 사용하는 단계.
  • I/O burst: I/O 작업만 하는 단계.

CPU burst time 분포에 따른 프로그램의 구분

  • I/O-bound Job
    • 짧고 많은 CPU burst가 존재하는 프로그램.
    • CPU를 잡고 계산하는 시간보다 I/O에 많은 시간을 소요.
  • CPU-bound Job
    • 길고 적은 CPU burst가 존재하는 프로그램
    • 계산 위주 작업.

프로세스의 CPU 스케줄링이 결정되는 상황

  1. Running → Waiting
    I/O 요청이나 자식의 종료를 위해 wait()함수를 호출한 경우.
  2. Running → Ready
    인터럽트가 발생한 경우
  3. Waiting → Ready
    I/O 작업이 끝난 경우
  4. Terminate

💻 스케줄링 기법의 종류

스케줄링의 기법은 사용 중인 프로세스에서 자원을 빼앗을 수 있는지 여부에 따라 달라진다.
1번과 4번의 경우 Non-preemptive(비선점) 방식이고, 그 외는 Preemptive(선점) 방식이다.

  • Non-preemptive(비선점) 스케줄링

    • 현재 실행 중인 프로세스보다 높은 우선 순위의 프로세스가 등장한다고 해서 실행 대상을 바로 변경하지 않는다.
    • 현재 실행 중인 프로세스가 명시적으로 CPU를 넘겨 주거나, I/O 작업 등으로 인한 블로킹 상태에 놓일 때까지 기다려야 한다.
  • Preemptive(선점) 스케줄링

    • 현재 실행 중인 프로세스보다 높은 우선 순위의 프로세스가 등장하면 스케줄러에 의해 실행 순서 조정이 가해진다.
    • Windows는 선점 스케줄링을 채택해 사용하고 있다. 아래 내용은 대표적인 두 가지 선점형 스케줄링 알고리즘에 대한 것.

💻 스케줄링 알고리즘

  • 우선 순위(Priority) 알고리즘
    • 각각 프로세스마다 우선순위를 부여해 우선순위가 높은 프로세스를 먼저 실행시키는 방식.
  • 라운드 로빈(Round-Robin) 알고리즘
    • 우선 순위가 동일할 경우 정해진 시간 간격만큼만 실행을 하고 우선순위가 동일한 다른 프로세스에게 CPU의 할당을 넘기는 방식.

0개의 댓글