single processor라면 한 순간에 하나의 프로세스만이 실행될 수 있으므로 multiprogram에서 각 프로그램(프로세스)들이 CPU이용을 상황에 맞게 할당방아야한다. 보통 ready queue에 들어간 순서대로 실행하는데, 이를 우선순위에 따라 다시 재정렬하는 방식이다. -> 할당 방식에 따라 context switching 횟수가 바뀌고, cpu 자원을 얼마나 효율적으로 사용하게 되는지 결정된다.
OS는 준비완료큐에 있는 Process들 중에서 하나를 선택해 실행하고, 이는 Short Term 스케줄러가 수행한다(CPU Scheduler)
복습)
버스트(burst)란 특정 기준에 따라 한 단위로서 취급되는 연속된 신호나 데이터의 모임. 어떤 현상이 짧은 시간 집중적으로 일어나는 현상이나 주기억장치의 내용을 캐시기억장치에 블록단위로 한꺼번에 전송하는 것.
process는 아래와 같이 new, ready, running, waiting, terminated의 상태를 갖는다.
ready에서 running으로는 dispatcher가 해주지만,
CPU스케줄링은 다음과 같은 4가지 상황에서만 생김.
(1) 프로세스 종료 시 :비선점
(2) running-> wait상태 전환될 때(ex- 입출력 요청이나 자식 프로세스가 종료되기를 기다리기 위해 wait 호출 시 , hw interrupt) : 비선점
(3) running-> ready로 전환될 때(ex- interrupt발생했거나 time slice 만료되거나 우선순위 더 큰 프로세스 들어올 때 = sw interrupt) : 선점
(4) waiting -> ready로 전환될 때(ex-입출력 종료 시) : 선점
(1) CPU 이용률 : 최대화 지향. CPU의 이용률을 높여야한다.
(2) 처리량 : 최대화 지향. 일정 시간동안 프로세스를 끝마친 수 (순서에영향)
(3) 총 처리시간(turnaround) : 최소화 지향. 프로세스 접수와 완료 사이 interval. 메모리 들어가기 위한 소비시간=ready queue에서 대기한 시간, CPU실행시간, I/O시간을 합한 시간
(4) 대기시간(wait) : 최소화 지향. 하나의 process가 ready queue에서 기다리는 시간.
(5) 응답시간(response) : 최소화 지향. ready queue에 들어가서 첫 반응을 보인 시간.
- 비선점 스케줄링
- 먼저 들어온 프로세스 순서 대로 할당하는 방식.
수행시간이 큰 프로세스가 먼저 들어올 시 뒤에 들어온 프로세스들이 오래 기다려야하는 비효율 존재.(콘보이 효과)
- 낮은 overhead. disk load / I/O batch 프로세싱에 적절. 시분할 프로세스에 비적절.
- waiting ,reponse, turnaround time:
들어온 순서대로 P1,P2,P3라 할 때,
- 비선점 스케줄링
- 수행시간이 짧은 프로세스 순서 대로 할당하는 방식.
- burst가 큰 프로세스는 starvation 발생.
- 비현실적 - 평 균 대기에 최적인 알고리즘이나 수행시간(next CPU request의 length) 정확히 알 수 없다. :이전 프로세스 기록을 보고 추측.) -> 현실적으로 CPU 점유(burst)시간을 측정하려면 오버헤드가 큰 작업으로 잘 사용되지 않는다.
- 다음CPU버스트예측(a: 0<=a<=1, 하이퍼파라미터, 임의의 가중치)
다음CPU버스트 예측값 = a * 이전실제CPU버스트값 +(1-a) * 이전CPU버스트예측값
- waiting ,reponse, turnaround time:
P1,P2,P3,P4 동시에 들어왔음 가정 할 때,
- 선점 스케줄링
- 남은 수행시간이 짧은 프로세스 순서 대로 할당하는 방식.
- SJF의 선점형 방식. 이 역시 burst time 예측이 어렵다.
위에서 1초 경과 시 P1은 burst time이 1초 수행 후 7이 남았고 P2는 방금 arrived해서 burst time이 4가 있는 상태로 context switching이 이루어져 P2에 CPU를 할당하게된다.
- 선점, 비선점 모두 가능
- 지정한 우선순위 대로 할당하는 방식.
우선 순위는 시간제한,메모리 요구량, 프로세스 중요성, 자원사용 등에 따라 기준 지정하며 SJF는 비선점으로 bursttime을 우선순위로, SRT는 선점으로 남아있는 실행시간을 우선순위로 하는 것.- starvation 혹은 무한봉쇄 나타날 수 있다(높은 우선순위만을 실행할 때 낮은 우선순위 실행 x)
- aging : 오래 대기한 프로세스의 우선순위를 높이는 방식으로 starvation 문제를 해결하곤 함.
- waiting ,reponse, turnaround time:
(낮은 정수 숫자가 높은 우선순위 : linux기준)
- 기본적으로 선점 스케줄링
- Time Quantum 단위로 프로세스를 번갈아가며 할당한다.
- time sharing(시분할)에서 주로 사용하는 방식(실제 프로그램들에서 많이사용됨). 내부 동작은 ready queue가 원형(circular) 큐로 되어있어, CPU스케줄러는 readyqueue를 돌면서 한번에 한 프로세스에 quantum(기준시간)만큼 CPU를 할당해준다. context switch 일어날 시 실행주이던 프로세스는 ready queue 끝(tail)에 삽입된다.
- 높은 응답(response)속도. 반응성이 좋다.
- quantum이 짧으면 context swtiching 오버헤드가 크고, 너무 길면 convoy 현상이 발생한다(FCFS랑 다를바 없어짐) : 적절한 quantum설정 필요.
- waiting ,reponse, turnaround time: (time quantum=3)
- ready queue를 다수의 queue들로 분류, 각 queue마다 고유의 스케줄링 알고리즘을 따르게 하는 것. ready queue를 어떤 프로세스냐에 따라 나누어 각각 각각에 맞는 스케줄링 방식을 적용시켜주는 것.
- Foreground queue
: 사용자와 직접 상호작용하는 프로세스가 모인 queue. foreground는 빠르게 처리되어야한다. 그렇기 때문에 보통 라운드로빈 스케줄링 방식을 사용한다.- Background queue
: 백그라운드에서 돌아가는 프로세스가 모인 queue. background는 덜 빠르게 처리되어도 괜찮으며 응답 시간이 큰 의미가 없기 때문에 FCFS 등 적절한 스케줄링 방식을 사용.- process 성격에 따라 분류 / queue를 분리한 예제
각 프로세스 성격에 따라 우선순위를 부여한다. (system 프로세스 먼저 처리.-> 배치프로세스 나중에 처리.) 이후 분리된 각 프로세스 큐에서 해당 프로세스 성격에 맞는 다시 우선순위를 배정해준다. (사용자 프로세스는 RR방식으로 빠르게 응답해주며 배치는 들어온 순서대로 적용)
- 프로세스들이 큐 사이 이동하는 것을 허용한다. multilevel queue에 aging을 적용한 방식.
- 대부분의 운영체제는 multilevel-queue(multilevel feedback queue) 사용.
quantum이 8, 16내에 끝나지 않으면 FCFS로 처리하는 MLF예.
하나의 cpu를 이용이 아닌 여러 cpu 이용의 경우 어떻게 스케줄링되는가에 대한 내용.
주기(Priority)에 따라 우선순위 결정. 주기가 짧을수록 우선순위가 높아지고 길면 낮은 우선순위(cpu를 더 자주 필요로 하는 태스크에게 높은 우선순위) : 선점.
Deadline이 빠를수록 우선순위는 높아지고, 높을수록 낮아지도록 우선순위 동적 부여.