스케줄러란?
- 프로세스나 스레드에 CPU를 할당하는 정책과 메커니즘을 관리한다
- Job Queue, Ready Queue, Wait Queue 등을 관리한다
- Job Queue
- 시스템에 진입한 모든 프로세스를 보관한다
- 프로세스가 처음 시스템에 들어오면 Job Queue에 위치한다
- Ready Queue
- 메인 메모리에 로드되어 CPU 할당을 대기하는 큐이다
- 단기 스케줄러(CPU 스케줄러)는 이 큐에 있는 프로세스 중 하나를 선택하여 CPU를 할당한다
- Wait Queue
- 입출력 요청과 같은 이벤트를 기다리는 프로세스들이 위치한다
- 해당 이벤트가 발생한 후 다시 준비 큐로 이동한다
- 장기 스케줄러
- 주 기억장치와 보조 기억장치 간의 프로세스 이동을 결정한다
- Job Queue → Ready Queue로 프로세스를 이동시킨다
- RAM에 프로세스를 로드한다
- 단기 스케줄러
- CPU 스케줄러라고도 한다
- Ready Queue의 프로세스 중에서 CPU를 어떤 프로세스에 할당할 것인지 결정한다
- 대부분의 스케줄링 알고리즘이 이 단계에서 적용된다
- Ready Queue → CPU로 프로세스를 이동시킨다
- 중기 스케줄러
- 프로세스를 일시 중지시키거나 준비 상태로 전환시키는 역할을 한다
- 스와핑을 담당한다
CPU 스케줄러 알고리즘
- 선점형 스케줄러와 비선점형 스케줄러로 분류된다
- 선점형 스케줄러
- 처리시간이 매우 긴 프로세스의 CPU 독점을 막을 수 있어서 효율적이다
- 잦은 문맥 교환으로 오버헤드가 커질 수 있다
- 라운드 로빈
- 프로세스에 동일한 할당 시간만큼 순서대로 CPU를 할당받는다
- 응답시간이 빠르고, 모든 프로세스가 공정하게 CPU를 할당 받을 수 있다
- 할당 시간이 길면 FCFS와 다를게 없다
- 할당 시간이 짧으면 문맥교환이 많이 발생해 오버헤드가 많이 발생한다
- SRTF(Shortest Remaining Time First)
- 남은 실행시간이 더 짧은 프로세스가 CPU를 할당받는다
- 기아현상 발생가능
- 실행시간이 긴 프로세스는 계속 CPU 할당을 못받을 수 있다
- 비선점형 스케줄러
- FCFS(First Come First Served)
- 먼저 온 프로세스가 CPU를 할당받는다
- 콘보이 현상 발생가능
- 소요시간이 긴 프로세스가 먼저 도달하여 전체 효율성이 낮아지는 현상
- SJF(Shortest Job First)
- 실행시간이 짧은 프로세스가 먼저 CPU를 할당받는다
- 기아현상 발생가능
- 선점형, 비선점형 방식 모두 가능한 스케줄러
- 우선순위 스케줄링(Priority Scheduling)
- 우선순위가 높은 프로세스에 CPU를 먼저 할당한다
- 우선순위는 숫자로 표현되고 작은 숫자가 우선순위가 높다
- 선점형 방식
- 더 높은 우선순위의 프로세스 도착 시 선점 후 문맥교환 발생
- 비선점형 방식
- 더 높은 우선순위의 프로세스 도착 시 대기 큐의 맨 앞에 넣는다
에이징 기법
- 우선순위가 낮은 프로세스의 경우 CPU를 선점하지 못하고 무한정 대기할 수 있다
- 이를 방지하기 위해 오래 대기하면 우선순위를 높여주는 기법이다