CPU 스케쥴러 & 디스패쳐
비선점형: nonpreemtptive(강제로 빼앗지 않음)
선점형: preemptive(강제로 빼앗음)
성능 척도(scheduling Criteria) - 퍼포먼스 인덱스
-
시스템 입장에서 성능 척도
⇒ CPU를 놀지 않고 많이 시킬수록 시스템 입장에서 굳.
- CPU utilization(이용률)
- 전체 시간 중 CPU가 놀지 않고 일한 시간의 비중
- CPU는 비싼 자원이니 가능한 한 많은 일을 시켜라! 그래야 성능이 굳
- Throughput(처리량)
- 주어진 시간동안 몇 개의 프로세스를 완료했는지?
- 최대한 많이 처리할 수록 굳.
-
프로그램 입장에서 성능 척도 (CPU를 빨리 얻어서 빨리 끝내는 게 좋아 - 시간 관련 척도)
⇒ 여기서는 고객(=프로그램) 입장!
- Turnaround time(소요시간, 반환시간)
- CPU를 쓰러 와서 다 쓰고 나갈 때까지 걸린 시간
- CPU burst 시작해서 I/O wait하기까지 걸린 시간
- 전체 상에서 말하는 게 아니라 특정 프로세스에 대해서 CPU가 들어와서 나갈때까지!
- waiting time(대기시간)
- CPU를 쓰기 위해 레디 큐에서 기다리는 시간(줄 서서 기다리는 시간)
- Response time(응답 시간)
- 처음으로 CPU 얻기까지 걸리는 시간
- waiting과 다른 점?
-
선점형의 경우 중간에 뺏겨 ⇒ 한번에 얻었다가 뺏겼다가..
-
waiting time은 중간에 뺏겨서 또 기다리고 또 줄서고 .. cpu burst 기간 동안에도 계속 줄서서 기다리는 게 반복. 이걸 토탈한 게 wait time
-
response time은 레디 큐에 들어와서 처음으로 cpu 얻기까지 걸리는 시간!
- 위 이미지에서 wait for I/O → load store 사이에 걸리는 시간이 response time(wait에서 처음으로 cpu 잡기까지 걸린 시간)
- waiting time은 중간에 load store, add store 하는 동안에도 자기한테 할당된 시간이 다 되거나 해서 뺏기는 경우가 발생 → 이러면 다시 레디 큐에 들어가서 줄서고 하는데 이것까지 토탈해서 측정한 시간!
- 왜 굳이 이렇게 여러 측정 기준을 잡나?
- 예시: 중국집
- 주방장을 고용 ⇒ 주방장이 일 많이 하는 게 좋지
- utilization: 주방장이 최대한 일 많이 하는 게 좋아
- 처리량: 단위 시간당 얼마나 많은 손님한테 밥을 팔았나
- turnaround time: 손님이 중국집 와서 주문해서 기다리고 밥먹고 기다리고 다른 요리 나오면 또 먹고 기다리고 등 전체 시간을 말함. 빨리 먹고 나가면 굳.
- waiting time: 밥먹는데 기다리는 토탈 시간을 말함.
- response time: 첫번째 음식이 나올 때까지 기다리는 시간. 첫 음식 나오는데 걸리는 시간이 오래 걸리면 너무 허기지니. 응답시간 역시 굉장히 중요한 척도. 첫음식 얼마나 빨리 나오니?!
CPU 스케쥴링 알고리즘
FCFS(First-come first-served)
- 먼저 온 순서대로 처리.
- 앞의 스케쥴링 분류 중에서 비선점형에 해당. 한번 선점하면 뺏기지 않음.
- 비효율적인 알고리즘!
SJF(shortest job first)
- CPU 사용하려는 시간이 가장 짧은 애들한테 먼저 배정! → 전체적으로 행복한 결과가 나와
- cpu burst time이 가장 짧은 프로세스를 가장 먼저 스케쥴링.