스케줄링
스케줄링이란?
컴퓨터 분야에서 스케줄링이란 컴퓨터 시스템 자원(CPU등)을 어떤 작업(task)에 할당할지 결정하는 것을 의미한다.
스케줄링 방법에 따라 프로세서를 할당받을 프로세스를 결정하므로 스케줄링은 시스템의 성능에 직/간접적인 영향을 미친다.
프로세스의 생명주기
프로세스(Process)가 구동하려면 다양한 시스템 자원이 필요하다. 대표적으로 CPU(중앙처리장치)와 입출력장치가 있는데, 최고의 성능을 내기 위해 자원을 어떤 프로세스에 얼마나 할당하는지 정책을 만드는 것을 CPU스케줄링이라고 한다.
프로세스는 작업(Job)을 완료할 때까지 다양한 상태가 되는데, 우리가 주목해야할 것은 ‘Waiting’이다. 프로세스가 CPU를 점유하여 작업을 수행하는 도중 I/O 또는 Interrupt가 발생하면 일시적으로 프로세스는 CPU를 사용하지 않게 된다. 하지만 계속 점유하고 있다. 이러한 상황을 줄여, CPU를 최대한 활용하면 시스템의 성능 개선을 꾀할 수 있다. 결국, “어떻게 프로세스들이 CPU를 효율적으로 사용하게 할 것인가?” 라는 고민에서 CPU 스케줄링이 출발했다.
스케줄링 성능 척도
CPU 스케줄링 알고리즘은 여러 종류가 있는데, 각 알고리즘의 성능을 평가하는 기준(Performance measure, 성능 척도)이 있다.
- 시스템 입장에서의 성능 척도
-
CPU 이용률 (CPU Utilization) : 전체 시간 중 CPU가 쉬지 않고 일한 시간
-
처리량 (Throughput) : 단위 시간당 수행 완료한 프로세스의 수
- 프로그램 입장에서의 성능 척도
-
소요 시간 (Turnaround Time) : 프로세스가 Ready queue에서 대기한 시간부터 작업을 완료하는데 걸리는 시간
-
대기 시간 (Waiting Time) : 프로세스가 Ready queue에서 대기한 시간
-
응답 시간 (Response Time) : 프로세스가 처음으로 CPU를 할당받기까지 걸린 시간
프로그램 입장에선 소요, 대기, 응답 시간이 모두 최소가 될수록 좋고, 시스템 입장에선 CPU 이용률과 처리량이 모두 최대가 될수록 좋다.
## 스케줄링 목적
-
자원 할당의 공정성
-
단위시간당 처리량 극대화
-
적절한 반환시간 보장
-
예측 가능성 보장
-
오버헤드 최소화
-
자원 사용의 균형 유지
-
실행 대기 방지
-
우선순위