근본적인 스케줄링의 목적은 시스템 성능의 향상이다. 시스템 성능은 응답시간, 작업 처리량, 자원활용도 등의 지표로 결정되는데, 각각의 지표를 향상시키는데 적합한 스케줄링을 사용할 수 있다. 예를들어 대화형, 실시간 시스템에서는 응답시간을 향상시키는 목적의 스케줄링을, 작업의 처리량 향상에는 일괄처리 시스템 등을 적용할 수 있다.
일반적인 시스템에서는 다음과 같은 목적을 공통적으로 지닌다.
No starvation : 각각의 프로세스들이 오랜시간동안 CPU를 할당받지 못하는 상황이 없도록 한다.
Fairness : 각각의 프로세스에 공평하게 CPU를 할당해준다.
Balance : Keeping all parts of the system busy
온라인처럼 일에 대한 요청이 발생했을 때, 즉각적으로 처리하는 것이 아닌 일정기간 또는 일정량을 모아뒀다가 한번에 처리하는 방식
Throughput : 시간당 최대의 작업량을 낸다.
Turnaround time : 프로세스의 생성부터 소멸까지의 시간을 최소화한다.
CPU utilization : CPU가 쉬는 시간이 없도록 한다.
온라인과 같이 일에 대한 요청에 대해 즉각적으로 처리하여 응답을 받을 수 있는 시스템
Response time : 즉각적으로 처리해야하는 시스템이므로 요청에 대해 응답시간을 줄이는 게 중요하다.
Time Sharing System
: 각 프로세스에 CPU에 대한 일정시간을 할당하여 주어진 시간동안 프로그램을 수행할 수 있게하는 시스템
Meeting deadlines : 데이터의 손실을 피하며, 끝내야하는 시간 안에 도달해야한다.
Predictability : 멀티미디어 시스템에서의 품질이 저하되는 부분을 방지해야한다.
한 프로세스가 CPU를 할당받아 실행하고 있을 때, 다른 프로세스가 CPU를 사용하고 있는 프로세스를 중지시키고 CPU를 차지할 수 있ㅎ는 스케줄링 기법.
우선 순위가 높은 프로세스를 먼저 수행할 때 유리하고 빠른 응답 시간을 요구하는 대화식 시분할 시스템에 유용. 하지만 잦은 context switching으로 인한 overhead 발생.
e.g. round robin, SRT, 선점 우선 순위 등의 알고리즘
이미 다른 프로세스에 CPU가 할당되어 있는 경우, 빼앗아오지 못하고 사용이 끝날 때까지 기다리는 스케줄링 기법. 이후 CPU 를 할당받으면 작업이 끝날 때까지 사용 후 스스로 자원을 반납.
응답시간을 예측할 수 있고, 일괄 처리방식이 적합. 모든 프로세스의 요구에 공정.
하지만, 중요도가 높은 작업이 낮은 작업이 끝나기를 기다리는 경우가 발생할 수 있음. 즉, 우선순위 역전이 잦아지며 프로세서를 점유한 프로세스의 응답시간이 전체 평균 응답시간에 영향을 끼치게 된다.
e.g. FCFS(First Come First Served), SJF(Shortest Job First), 우선순위, HRN(Highest Response Next) 등의 알고리즘.
가장 간단한 스케줄링 알고리즘으로, 프로세서를 요청하는 순서대로 할당해준다. 이때 구현은 Queue로 하며 FIFO로 진행된다.
최소작업 우선 스케줄링은 각 작업의 프로세서 실행 시간을 이용하여 프로세서가 사용 가능할 때 실행시간이 가장 짧은 프로세스부터 자원을 할당해주는 방식.
FCFS와 방법은 같지만, 실행시간이 작은 순서대로 우선순위 큐를 이용하는 방법.
SJF 방식에서 짧은 실행 시간을 가진 것들만 프로세서를 차지하는 것을 어느정도 보완하고지 만듦. 대기시간과 실행시간을 혼합하여 어느 작업에 CPU를 사용할지 결정하는 방법.
실행시간이 낮을수록, 대기시간이 길수록 우선순위가 높아짐.
프로세스가 프로세서에서 동작할 수 있는 시간을 할당해줌 (c.f. alarm clock)
라운드 로빈 큐는 원형 큐로 설계되어, 프로세스가 할당된 시간을 다 쓰면 OS가 인터럽트를 걸어 현재 PCB가 큐의 가장 뒤로 가는 방식.
SJF 스케줄링과 라운드 로빈 스케줄링을 혼합한 방식. 최소 잔류시간 우선 스케줄링 이라고도 한다. 준비 큐에 남아있는 작업시간이 가장 적은 프로세스를 선택하고 타임 슬라이스를 부여하여 작업시간에 제한을 둔다
준비 상태 큐를 여러 종류별, 단계별로 분할해 자신만의 독자적 스케줄링 구현이 가능. 즉, 시스템 프로세스는 우선순위 큐로, 학생 프로세스는 round robin으로 등.
각 큐는 절대적 우선순위를 가지며, 우선순위 높은 큐가 모두 비어있기 전에는 낮은 우선순위 큐에 있는 프로세스를 실행할 수 없음.
다단계 큐 스케줄링에서 계속해서 프로세서를 선점하지 못하는 프로세스에 대해 큐의 이동을 시켜주는 방식을 이용. 즉, 다단계 큐 방식에서 오래 대기한 프로세스가 높은 레벵릐 대기 큐로 이동, 혹은 프로세서 버스트 시간이 짧은 프로세스에 높은 우선순위를 주어 일시 종료시키거나 시간이 너무 오래걸리면 낮은 우선순위로 변경.