CPU 스케줄러, 디스패처의 개념과 동작원리

운영체제의 프로세스의 상태

OS의 프로세스 상태

  • New: 프로세스가 생성된 상태  
  • Ready: CPU에 실행되기 위해 기다리는 상태
  • Running: CPU 스케줄러에 의해 실행되고 있는 상태
    • Running 상태에 있는 프로세스는 주어진 Time-Slice시간을 사용하면 다시 Ready상태로 되돌아감
  • Waiting: I/O 작업이나 이벤트를 기다릴 때 동안의 상태, 작업이 완료되면 다시 Ready상태로 되돌아감
  • Terminated: 프로세스가 더 이상 사용되지 않을 때의 상태

 

CPU 스케줄러(Scheduler)

  • 위 다이어그램에서 Running 상태가 끝나고 다른 프로세스를 선택하는 역할
  • Ready Queue에서 다음에 실행될 프로세스를 선택
    *Ready Queue: Ready상태에 있는 프로세스들을 모아놓은 Queue

 

CPU 디스패처(Dispatcher)

  • CPU 스케줄러에 의해 선택된 프로세스를 CPU에 할당하는 역할

디스패처의 역할

  1. 현재 Running 상태에 있는 프로세스와 스케줄러를 통해 선택된 프로세스를 컨텍스트 스위칭(Context Switching)
  2. 컨텍스트 스위칭이 이루어지는 커널 모드(Kernel Mode)와 유저 모드(User Mode)의 전환
  3. 선택된 프로세스가 어디서 부터 실행될지 적절한 위치로 이동시키는 역할

 

스케줄러의 선점 방식

  • 스케줄러의 선점 방식에는 Nonpreemptive Scheduling, preemptive Scheduling이 존재

Nonpreemptive Scheduling

  • 직역하면 비선점 스케줄링
  • 프로세스가 자발적으로 Running상태를 벗어나고 다른 프로세스에게 점유권을 양보할 때를 말함
    • 프로세스가 Running 상태에서 Terminated, Ready, Waiting 상태로 옮겨가는 것은
      운영체제의 강제적인 개입 없이 진행될 수 있기 때문에 비선점 스케줄링이라고 불림
  • 장점: 프로그램들의 자체적으로 협력적으로 일어날 수 있기 때문에 Cooperative(협력적)
  • 단점: 느린 응답성

Preemptive Scheduling

  • 직역하면 선점 스케줄링
  • 기본적으로 Nonpreemptive Scheudling의 역할을 포함하고 강제적으로 운영체제가 개입하는 상황이 추가됨
    • Running 되고 있는 프로세스가 CPU의 Time-Slice시간을 모두 사용했다면,
      운영체제가 개입하여 Ready Queue에 해당 프로세스를 Ready 상태로 변경해야함
    • 우선순위에 따라서 Running되는 프로세스를 강제적으로 Ready 상태로 바꾸는 스케줄러의 개입
  • 장점: 적극적, 강제적, 빠른 응답성
  • 단점: 데이터 일관성 이슈

 

스케줄링 알고리즘

FCFS(First-Come, First-Served)

  • 먼저 도착한 순서대로 처리
  • 기존 Queue와 동일한 방식

SJF(Shortest-Job-First)

  • 프로세스의 다음 CPU Burst가 가장 짧은 프로세스부터 차례로 실행

SRTF(Shortest-Remaining-Time-First)

  • 남은 CPU Burst가 가장 짧은 프로세스부터 실행
  • SJF를 실행하는 동안 더 짧은 새로운 프로세스가 들어올 것을 대비한 알고리즘

Priority

  • 우선순위가 높은 프로세스부터 실행

RR(Round-Robin)

  • 멀티 태스킹 방식으로 가장 유사한 방식
  • Time-Slice로 나누어진 CPU 시간을 번갈아가면서 실행

Multilevel Queue

  • 비슷한 방식의 프로세스들을 그룹화해서 그룹마다 큐를 두는 방식