cpu스케줄러
- 스케줄링 대상은 (메모리가 할당 되어져 있는) 레디큐에 있는 프로세스 들이다. 즉, cpu할당을 기다리는 놈들을 고르는것이 이 스케줄러의 역할이다.
FCFS
- 선착순 처리방법.
- 비선점형(Non-Preemtive) 스케줄링
일단 cpu를 잡으면 cpu burst가 완료될 때까지 cpu를 반환하지 않는다. 할당되었던 cpu가 반환될때만 스케줄링이 이루어진다.
문제점
- 소요시간이 긴 프로세스가 먼저 온다면 그 뒤에는 그 긴만큼의 대기시간이 발생하여 효율성이 낮아진다.
SJF(Short Job First)
- 누가 먼저 오든지 간에 소요시간이 짧은 순으로 우선순위를 부여하는 방법
- 비선점형 방식.
- 문제점
starvation : 긴 프로세스는 쉴새없이 짧은 프로세스가 레디큐에 쌓여져 간다면 영원히 돌릴 수 없는 현상이 나타남.
SRTF(Shrtest Remainning Time First)
- 새로운 놈이 도착할 때마다 새로운 스케줄링이 이루어진다.
- 선점형(Premptive)
현재 수행중인 프로세스의 남은 소요시간보다 더 짧은 놈이 온다면 cpu권한을 뺐는 형식.
- 문제점
- Starvation
- 새로운 프로세스가 올때마다 우선순위가 다시 적용되므로 프로세스별 사용시간을 측정할 수가 없다.
Priority Scheduling
- 우선순위를 정해 우선적으로 cpu를 할당하는 스케줄링
- 선점형(Preemptive)방식 : 더높은 우선순위의 프로세스가 도착한다면 실행중인 프로세스를 멈추고 cpu를 선점
- 비선점형 : 더 높은 우선순위의 프로세스가 도착하면 레디큐(pq,덱 과같은)의 헤드에 넣는다.
- 문제점
- starvation
- 무기한 봉쇄(indefinite),데드락 : 실행준비는 되어 있으나 cpu를 사용못하는 프로세르를 cpu가 무기한 대기하는 상태
- 절대일어나지 않을 이벤트나 자원할당을 위해 무한정 대기하는 것.
해결방법 : aging기법 -> 아무리 우선순위가 낮아도 기다리는 시간만큼 우선순위에 고려해주는 것.
Round Robin
- 현대적인 cpu스케줄링
- 각 프로세스는 동일한 크기의 할당시간을 갖게 된다. (이 알고리즘의 목적.)
- 할당시간이 지나면 프로세스의 cpu의 권한을 빼앗기고 다시 맨뒤로 줄을 슨다.
- RR은 CPU시간이 랜덤한 프로세스들이 섞여 있을때 효율적이다. (솔직히 cpu 소요시간을 정확히 측정할수 없으니)
- RR이 가능한 이유는 프로세스의 context를 save할 수 있기 때문(실제 cpu를 할당받고 걸린 소요시간이라던지)
장점
- 응답시간이 빨라진다.
N개의 프로세스가 레디큐에 있고 할당시간이 q(time quantum)인 경우 각 프로세스는 q단위로 cpu 시간의 1/n을 얻는다. 즉, 어떤 프로세스도 (n-1) time이상 기다리지 않는다.
- 프로세스가 기다리는 시간이 cpu를 사용할 만큼 증가한다. 공정한 스케줄링이라고 할수 있다.
주의할 점
- 설정한 time quantum이 너무 커지면 FCFS 기법과 효능이 같아짐.
- 또 너무 작아지면 스케줄링 알고리즘의 목적에는 이상적이지만(RR기법으로 응답시간을 빠르게) 잦은 context switch로 over head가 발생. 그렇기 때문에 적당한 time quantum을 설정하는것이 중요하다.
윈도우 os는 무슨기법을 사용할까?
- RR, Priority 기법을 사용.