1 분 소요

스케줄러(Scheduler)

스케줄러는 컴퓨터 운영체제에서 CPU를 효율적으로 사용하기 위해 사용되는 프로그램이다. 특히 운영체제에서 여러 개의 프로세스나 스레드를 실행해야 할 때, CPU 자원을 효율적으로 공유하도록 하기 위해 스케줄링이 필요하다. 그리고 시스템 자원을 효율적으로 사용하기 위해 다양한 스케줄링 알고리즘을 사용한다.

  • 스케줄러는 작업들을 처리할 때, 처리할 작업들을 어떤 순서로 처리하냐에 따라 성능과 효율성이 크게 달라진다.
  • 이 때 작업들은 스케줄링 큐(queue)에 저장되어 있으며, 스케줄러는 이 큐를 관리하면서 다음에 처리할 작업을 선택한다.
  • 스케줄링 큐는 크게 3가지로 구분할 수 있다.
    1. Job Queue
      • 모든 프로세스가 들어오는 큐
      • 장기 스케줄러(Long-term scheduler)가 사용
      • 디스크나 메모리에 저장되어 있는 작업들 중에 선택하여 메모리로 옮기는 작업을 수행
    2. Ready Queue
      • 현재 메모리에 올라와서 실행 가능핞 작업들의 집합
    3. Device Queue
      • 입출력 장치(I/O) 같은 외부 장치를 사용하는 작업들의 집합
      • 입출력 요청이 들어오면 해당 장치의 큐에 저장되어 있는 작업들 중에서 다음으로 실행할 작업을 선택하여 장치를 할당

스케줄러의 종류

장기 스케줄러(Long-term scheduler)

장기 스케줄러는 디스크나 메모리와 같은 보조기억장치에 저장된 프로세스 중에서 어떤 프로세스를 메모리에 저장할 것인지 결정한다.

  • 메모리와 디스크 사이의 스케줄링을 담당
  • 장기 스케줄러는 Job Queue에서 프로세스들 중 일부를 선택하여 메모리에 올린다.

  • 즉, 실행할 프로세스들 중 어떤 프로세스를 메모리에 로드하여 실행할지 결정하는 역할

단기 스케줄러(Short-term scheduler or CPU scheduler)

단기 스케줄러 큐는 우선 순위(각 프로세스의 특성에 따라 결정)를 기반으로 프로세스들을 분류하고, 다음에 실행될 프로세스를 선택하여 CPU에 할당된다. 이후, 할당된 프로세스는 CPU를 사용하여 실행되고, 실행 중 다른 이벤트(ex. I/O 요청 등)가 발생하면, 해당 이벤트가 처리될 때가지 실행 대기 상태로 돌아간다.

  • 실행 대기 상태의 프로세스들은 단기 스케줄러 큐에 저장
  • 실행 대기 상태의 프로세스 중에서 다음에 CPU를 할당받을 프로세스를 선택하는 역할

중기 스케줄러(Medium-term scheduler)

중기 스케줄러는 실행 중인 프로세스 중에서 일부를 메모리에서 제거하여 디스크와 같은 보조기억장치에 저장하는 작업을 수행한다. 이를 통해 메모리 사용량을 조절하고, 시스템의 응답성을 높일 수 있다.

  • 즉, 시스템에서 메모리에 프로그램이 올라가는 것을 조절하는 역할

스케줄링 알고리즘

스케줄러는 다양한 스케줄링 알고리즘을 사용하여 프로세스를 관리한다. 그 종류를 간략히 알아보면 아래와 같다.

  1. FCFS(First-Come, First-Served)
    • 먼저 도착한 작업부터 순서대로 처리하는 알고리즘
  2. SJF(Shortest Job First)
    • 실행 시간이 가장 짧은 작업을 먼저 처리하는 알고리즘
  3. RR(Round Robin)
    • 각 작업에 일정 시간 할당 후, 할당된 시간이 지나면 다음 작업으로 넘어가는 알고리즘
  4. Priority Scheduling
    • 작업의 우선순위를 고려하여 처리하는 알고리즘
  5. Multilevel Queue Scheduling
    • 여러 개의 큐를 만들어 각각 다른 우선순위를 할당하는 알고리즘

이외에도 다양한 스케줄링 알고리즘이 존재하지만, 이들은 대부분 위 알고리즘들의 변형이거나 조합이다. 예를들면 SRT(Shortest Remaining Times)와 같이 SJF 알고리즘의 변형으로, 현재 실행 중인 작업보다 남은 실행 시간이 짧은 작업을 먼저 처리하는 알고리즘이 존재한다.

참고 사이트

  • 참고 블로그 - https://dheldh77.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%ACScheduler
  • 스케줄러 및 우선 순위 관련(Window) - https://learn.microsoft.com/en-us/windows/win32/procthread/scheduling-priorities
  • 더 자세한 내용(Linux) - https://www.kernel.org/doc/html/latest/scheduler/index.html

업데이트: