모든 프로세스는 CPU를 필요로 하고 모든 프로세스는 먼저 CPU를 사용하고 싶음
운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것
프로세스 종류마다 입출력장치를 이용하는 시간과 CPU를 이용하는 시간의 양에는 차이가 있음
유닉스, 리눅스, macOS 등의 유닉스 체계 운영체제에서는 ps -el 명령을 통해 확인이 가능 -> nice 명령을 통해 일부 프로세스의 우선순위를 변경 가능
윈도우에서는 Process Explorer라는 소프트웨어를 통해 우선순위 확인과 변경이 가능
스케줄링 큐 전 | 스케줄링 큐 후 |
non-preemptive (비선점형) : Process가 자원을 반납하기 전까지 다른 프로세스가 자원을 사용할 수 없음. 수행시간이 긴 프로세스가 자원을 점유하게 되면 이후 실행되어야 하는 프로세스들이 자원을 할당받지 못하는 기아 현상이 발생.
preemptive (선점형) : Process가 한번 실행될 때 제한된 시간만을 할당해서 사용. 프로세스의 우선순위에 따라 스케쥴링을 하게 되므로 우선순위가 낮은 프로세스는 기아 상태에 빠짐.
비선점형 (non-preemptive) | 선점형 (preemptive) |
---|---|
정해진 시간 없이 process 종료 전까지 점유 | 일정 시간을 process에 할당해 해당 시간만 자원을 사용하고 반납 |
중간에 interrupt가 일어나지 않음 | interrupt를 통해 실행 중인 process를 교체 |
종료 후 context switch 외에 추가적인 오버헤드 없음 | context switch 가 일정 시간마다 일어나기 때문에 오버헤드 있음 |
프로세스 우선순위 고려 없음 | 프로세스에 대한 우선순위를 고려 |
FCFS, SJF, Priority Scheduling | Round-Robin, Multilevel Queue Scheduling |
준비 큐에 A,B,C,D 순으로 삽입되었다고 가정했을 때, 선입 선처리 스케줄링 알고리즘을 적용하면 어떤 프로세스 순서대로 CPU를 할당받는지 풀어보기
- 선입 선처리는 들어오는 순서대로 처리하는 방법이므로 들어온 순서 A→B→C→D 그대로 CPU를 할당 받는다.
example.
execution 순서
1) FCFS : [P3, P1, P2] → 돌아가는 과정 : P3,P3,P3,P1,P1,P1,P1,P2,P2 → 끝나는 순서 : P3, P1, P2
2) SJF : [P2, P3, P1] → 돌아가는 과정 : P2,P2,P3,P3,P3,P1,P1,P1,P1 → 끝나는 순서 P3, P1, P2
3) RR : [P3, P1, P2] → 돌아가는 과정 : P3,P3,P1,P1,P2,P2,P3,P1,P1 → 끝나는 순서 P2, P3, P1
(average) waiting time (context-switching에 의한 overhead는 계산하지 않음)
(→ 평균은 프로세스 개수로 나누기)
1) FCFS : P3(0) + P1(3) + P2(3+4) = 10, (10/3)
2) SJF : P2(0) + P3(2) + P1(2+3) = 7, (7/3)
3) RR : P3(0) + P1(2) + P2(2+2) + P3(2+2) + P1(2+1) = 13, (13/3)
P3(0) + P1(2) + P2(2+2) + P3(2+2+2) + P1(2+2+2+1) = 19 * 기다린 기준으로 생각한다!!
3-1) IF TIME-QUANTUM = 3, WAITING TIME = ?
RR : [P3, P1, P2] → 돌아가는 과정 : P3,P3,P3,P1,P1,P1,P2,P2,P1
→ WAITING TIME = P3(0) + P1(3) + P2(3+3) + P1(2) = 11
→ 타임퀀텀 사이즈에 따라 대기시간이 달라지는데 조절 잘 해야 한다. 컨텍스트 스위치가 많이 일어나면 대기시간이 길어질 수 있지만, 대기시간이 달라질 수 있어서 스위치가 많이 일어난다고 해서 비례적으로 대기시간이 길어지지는 않는다.