이번 수업은 지난 수업에서도 했던 CPU Scheduling에 대한 내용이 나왔다.
그래서 이에 대해서 주요한 것만 정리하려 한다!
스케줄링은 다음과 같은 역할을 수행하기 위해 필요하다!!
⭐ 프로세스 안에 있는 CPU burst와 I/O burst를 관리하는 역할
⭐ reday 상태의 프로세스 중 CPU를 누구에게 할당할지 결정하는 역할
공평 보다는 효율적인 스케줄링이 되어야함
스케줄링이 잘 되었는지에 대한 성능 척도(performance index)이다.
이는 두 가지 입장으로 분류할 수 있다.
System 입장에서의 성능척도
: CPU 하나로 최대한 많은 일을 시킬 수 있는지~
Process 입장에서의 성능척도
: CPU를 빨리 얻어서 빨리 끝낼 수 있는지~
구체적으로 알아보자!
system의 입장은 음식점의 사장님 입장과 같다.
고용한 직원(CPU)가 최대한 많은 일을 했으면 하는 것이다!
💡 CPU가 일을 많~이 해주는 알고리즘이 좋다!
👉 가능한 빨리 처리하고 집에 가고싶음
process의 입장은 손님 입장과 비슷하다.
손님이 가능한 빨리 집에가고싶진 않겠지만, 받을 음식(CPU)를 빨리 받고싶은 것은 마찬가지일 것이다.
'FCFS 방법이 비효율적이었다. 아무래도 프로세스 시간이 짧은 순으로 처리하는게 나을것 같은데?' 해서 나온 알고리즘이다!
SJF는 FCFS보다 더 효율적이긴 하지만, 문제가 존재한다.
<문제점>
starvation(기아현상): 우선순위가 낮은 프로세스가 너무 오랜 시간 기다려야 함
👉 영원히 CPU 할당을 못받을 수도 있음
CPU 사용시간을 미리 알 수 없음
👉 프로세스가 과거에 사용한 CPU 사용 이력을 보고 다음 사용 시간을 추정함
( = exponential averaging)
SJF와 유사한 방식을 가지고 있어 문제점 또한 비슷하다.
이러한 기아현상을 해결하기 위한 방법이 있다.
🔻
aging(노화)
: 아무리 낮은 우선순위를 갖고 있더라도 시간이 지나면(나이가 들면~) 우선순위가 조금씩 높아짐
현대적인 컴퓨터 시스템의 CPU Scheduling은 RR 알고리즘에 기반을 둔다.
그러나 이것도 문제점이 존재한다.
<문제점>