FCFS와 RR은 'Arriving Time'을 기준으로 하는 스케줄링 기법이다.
1. FCFS (First-Come-First-Service) = FIFO
1) 비선점형 스케줄링
Time quantum 없는 스케줄링 기법이다. 더 높은 우선순위의 프로세스가 들어와도 CPU를 선점하지 못한다.
2) 스케줄링 기준= Ready Que에 도착하는 '도착시간'
Ready Queue에 먼저 도착한 프로세스가 먼저 스케줄을 받게 된다.
![](https://velog.velcdn.com/images/dreamcomestrue/post/f953f897-1ca6-4fc0-8489-d1ca643288ab/image.png)
제일 먼저 들어온 p1이 제일 먼저 들어오고, ready queue에 들어온 순서대로 p1, p2, p3, p4가 cpu에 들어간다. time quantum이 끝나면 나가는 것이 아니라, 각 프로세스가 cpu를 사용하고 싶은 만큼 다 사용하고 나서 나간다.
완전히 종료해서 terminated 상태로 나가거나, I/O 를 이용하고 싶은 경우 asleep 상태로 나가게 된다.
![](https://velog.velcdn.com/images/dreamcomestrue/post/38137f69-e033-47f1-8d21-7737509f5377/image.png)
3) 자원 활용도
- 비선점 스케줄링이기 때문에 context switching이 많지 않기 때문에 자원의 활용도가 높다.
4) 적절한 시스템
- Batch System에는 적절하지만 Interactive System에는 적절하지 않다.
- Interactive System은 선점 스케줄링을 사용해야 한다. 왜냐하면 비선점 스케줄링을 사용할 경우 한 프로세스가 cpu를 독점할 수 있기 때문에 다른 프로세스의 응답시간이 매우 안 좋아질 수 있기 때문이다.
5) 단점
- Convoy Effect = CPU 사용 시간이 긴 큰 프로세스가 하나라도 있다면, 다른 많은 프로세스들이 전부 기다려야 할 수 있다.
- 이로 인해 평균 응답시간이 매우 길어질 수 있다.
2. RR (Round-Robin)
1) 스케줄링 기준 : ready que에 도착한 '도착시간'
- 먼저 도착한 프로세스가 먼저 스케줄링을 받는다.
2) 선점 스케줄링
- Time Quantum을 두어서 한 프로세스가 cpu를 독점하지 못하게 한다. Time Quantum이 지나면, 그 프로세스는 cpu를 release하고 ready 상태로 돌아간다.
✅ FCFS와의 차이점 = 스케줄링 기준은 FCFS와 동일하지만 '선점' 스케줄링이다.
![](https://velog.velcdn.com/images/dreamcomestrue/post/96987251-2bc1-4e6f-a8ec-7ccde6bbea18/image.png)
P1 -> P2 -> P3 -> P4 순서로 CPU를 사용하지만, 주어진 Time Quantum동안만 사용할 수 있다. Time Quantum이 지나면, Timer Interrupt가 발생해서 프로세스를 ready queue의 뒤쪽에 넣어준다. 혹은 P1이 실행하다가 Time Quantum이 지나기 전에 시스템 콜을 해서 I/O 를 시작하면, 그 때에는 asleep 상태로 나가게 된다.
![](https://velog.velcdn.com/images/dreamcomestrue/post/9109cd54-afc5-4ba6-a030-093b6168232b/image.png)
3) 단점
Preemption으로 인해서 Context Switching 오버헤드가 커진다. 그렇지만 한 프로세스가 CPU를 독점하는 일은 사라진다.
따라서 Interactive 시스템이나 Time-sharing 시스템에서 사용하기에 적합하다.
4) Time quantum의 크기
- Time-quantum을 만약 크게 하게될 경우에는 결국 FCFS 기법이나 다를 바 없기 때문에 좋지 않다.
- Time quantum을 작게 하면 context switching이 매우 많아지고, 그 때마다 커널이 계속 개입하기 때문에 커널의 오버헤드가 매우 커질 우려가 있다.
- Processor Sharing: Time Quantum을 아주 작게하면, 시스템에 들어와 있는 모든 N개의 프로세스가 cpu의 타임을 1/n만큼 나누어 갖는 효과를 갖게 되는데, 이것을 'processor sharing'이라고 한다. 즉 모든 프로세스가 아주 공평하게 1/n만큼 cpu time을 나눠 갖게 된다.