Scheduler
스케줄러(Scheduler)
스케줄러는 컴퓨터 운영체제에서 CPU를 효율적으로 사용하기 위해 사용되는 프로그램이다. 특히 운영체제에서 여러 개의 프로세스나 스레드를 실행해야 할 때, CPU 자원을 효율적으로 공유하도록 하기 위해 스케줄링이 필요하다. 그리고 시스템 자원을 효율적으로 사용하기 위해 다양한 스케줄링 알고리즘을 사용한다.
- 스케줄러는 작업들을 처리할 때, 처리할 작업들을 어떤 순서로 처리하냐에 따라 성능과 효율성이 크게 달라진다.
- 이 때 작업들은 스케줄링 큐(queue)에 저장되어 있으며, 스케줄러는 이 큐를 관리하면서 다음에 처리할 작업을 선택한다.
- 스케줄링 큐는 크게 3가지로 구분할 수 있다.
- Job Queue
- 모든 프로세스가 들어오는 큐
- 장기 스케줄러(Long-term scheduler)가 사용
- 디스크나 메모리에 저장되어 있는 작업들 중에 선택하여 메모리로 옮기는 작업을 수행
- Ready Queue
- 현재 메모리에 올라와서 실행 가능핞 작업들의 집합
- Device Queue
- 입출력 장치(I/O) 같은 외부 장치를 사용하는 작업들의 집합
- 입출력 요청이 들어오면 해당 장치의 큐에 저장되어 있는 작업들 중에서 다음으로 실행할 작업을 선택하여 장치를 할당
- Job Queue
스케줄러의 종류
장기 스케줄러(Long-term scheduler)
장기 스케줄러는 디스크나 메모리와 같은 보조기억장치에 저장된 프로세스 중에서 어떤 프로세스를 메모리에 저장할 것인지 결정한다.
- 메모리와 디스크 사이의 스케줄링을 담당
-
장기 스케줄러는 Job Queue에서 프로세스들 중 일부를 선택하여 메모리에 올린다.
- 즉, 실행할 프로세스들 중 어떤 프로세스를 메모리에 로드하여 실행할지 결정하는 역할
단기 스케줄러(Short-term scheduler or CPU scheduler)
단기 스케줄러 큐는 우선 순위(각 프로세스의 특성에 따라 결정)를 기반으로 프로세스들을 분류하고, 다음에 실행될 프로세스를 선택하여 CPU에 할당된다. 이후, 할당된 프로세스는 CPU를 사용하여 실행되고, 실행 중 다른 이벤트(ex. I/O 요청 등)가 발생하면, 해당 이벤트가 처리될 때가지 실행 대기 상태로 돌아간다.
- 실행 대기 상태의 프로세스들은 단기 스케줄러 큐에 저장
- 실행 대기 상태의 프로세스 중에서 다음에 CPU를 할당받을 프로세스를 선택하는 역할
중기 스케줄러(Medium-term scheduler)
중기 스케줄러는 실행 중인 프로세스 중에서 일부를 메모리에서 제거하여 디스크와 같은 보조기억장치에 저장하는 작업을 수행한다. 이를 통해 메모리 사용량을 조절하고, 시스템의 응답성을 높일 수 있다.
- 즉, 시스템에서 메모리에 프로그램이 올라가는 것을 조절하는 역할
스케줄링 알고리즘
스케줄러는 다양한 스케줄링 알고리즘을 사용하여 프로세스를 관리한다. 그 종류를 간략히 알아보면 아래와 같다.
- FCFS(First-Come, First-Served)
- 먼저 도착한 작업부터 순서대로 처리하는 알고리즘
- SJF(Shortest Job First)
- 실행 시간이 가장 짧은 작업을 먼저 처리하는 알고리즘
- RR(Round Robin)
- 각 작업에 일정 시간 할당 후, 할당된 시간이 지나면 다음 작업으로 넘어가는 알고리즘
- Priority Scheduling
- 작업의 우선순위를 고려하여 처리하는 알고리즘
- 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