CPU burst와 I/O burst
- CPU burst : CPU만 연속적으로 쓰면서 instruction을 실행하는 일련의 단계
- I/O burst : I/O를 실행하는 단계
- 모든 프로그램은 CPU, I/O burst의 연속이지만, 프로그램의 종류에 따라서 각 burst의 빈도나 길이가 다르다.
CPU burst의 분포
- I/O bound job : CPU를 짧게 쓰고 중간에 I/O가 끼어드는 job = CPU burst가 짧은 경우 (many short CPU bursts)
- 이러한 경우가 많음
- = 중간에 I/O burst가 끼어드는 경우가 많음
- CPU bound job : CPU만 오랫동안 쓰는 job = CPU burst가 긴 경우 (few very long CPU bursts)
- 이러한 경우의 빈도가 매우 낮음
- ex) 계산 위주의 job
- 대부분의 CPU 시간은 I/O bound job이 다 쓴다? : X
- I/O bound job은 너무 짧게짧게 난도질을 당해서 빈도가 높을 수 밖에 없는 특성을 가짐. 반대로 CPU bound job은 빈도가 낮을수밖에 없음(길게 한번에 가니까)
- 실제로는 CPU는 CPU bound job이 많이 쓰고, I/O bound job은 CPU를 짧게, 잦게 쓴다 고 해석하는 것이 보다 타당함
- 컴퓨터 안에는 I/O bound job, CPU bound job이 섞여 있으므로 적절한 CPU scheduling이 필요함
- I/O bound job이 문제가 됨
- interactive한 job임
- CPU bound job이 CPU를 잡고 놓지 않으면 I/O bound job이 너무 오래 대기하게 됨
- 사용자의 답답함 발생
- 가능하면 사람과 interactive하는 I/O bound job에 CPU를 우선적으로 주는 것이 필요함
CPU Scheduler
: (현재 ready queue에 있는 프로세스들 중에서) 누구에게 CPU를 줄 것인지/얼마나 쓰게 할 것인지를 결정하는 역할을 수행하는 kernel code
Dispatcher
: CPU를 누구에게 줄지를 결정했다면, 이를 해당 프로세스에게 넘기는(=context switch) 역할을 수행하는 kernel code
CPU scheduling이 필요한 경우의 예시
- Running → Blocked (nonpreemptive)
- CPU 잡고 있던 프로세스가 I/O 작업 등을 이유로 자진해서 CPU를 반납
- Running → Ready
- 할당시간 만료로 timer interrupt가 발생한 경우
- Blocked → Ready
- I/O 완료 후 interrup가 발생한 경우 (CPU를 얻을 수 있는 권한을 줌)
- I/O 종료되었다고 해서 바로 CPU를 넘겨야 할 필요는 없으나(일반적으로는 넘기지 않으나), 바로 CPU를 넘기는 경우도 있음
- priority에 기반한 scheduling을 할 경우, 해당 프로세스의 priority가 클 경우 바로 CPU를 넘겨주기도 함
- 따라서 이 때 CPU Scheduling이 필요할 수도 있음
- Terminate (nonpreemptive)
- CPU 사용이 마무리 된 경우 자진해서 CPU를 반납
CPU Scheduling algorithm
- 크게 비선점형(nonpreemptive) 알고리즘-일단 줬으면 뺏어오지 않음-과 선점형(preemptive)-언제든지 뺏어올 수 있음- 알고리즘으로 나뉨
- 일반적으로 preemptive 알고리즘이 주로 사용됨
- CPU 관점에서 따지고 있으므로, [한 프로세스가 시작해서 종료할 때까지] 가 아닌, [매 CPU burst 건 1개에 대한 것에 한해서만] 따진다고 이해해야 함
- 시스템 입장에서의 성능 척도
- CPU utilization(이용률)
- 전체 시간 중에서 CPU가 일한 시간
- ex) 전체 시간 중 주방장이 놀지 않고 일한 시간의 비율
- Throughput(처리량)
- 주어진 시간동안 몇 개의 일을 처리했느냐
- ex) 단위시간당 주방장이 처리한(밥 먹여서 내보낸) 손님의 수
- 프로그램 입장에서의 성능 척도
- Turnaround time(소요시간, 반환시간)
- CPU를 사용하러 들어와서(ready queue에 들어와서), 다 쓰고 나갈 때(CPU burst 끝날 때까지)까지 걸린 시간
- ex) 손님이 밥먹으러 들어와서, 밥먹고 나갈 때까지 걸린 시간
- 코스요리의 경우 먹고 기다리고 먹고 기다리고.. 반복될 수 있으므로 먹는 시간 + 기다리는 시간이 합쳐져야 함
- Waiting time(대기시간)
- Ready queue에서 기다린 시간
- CPU를 여러번 얻었다가 뺏겼다가를 반복하는데, 이 과정에서 기다린 모든 시간의 합을 의미
- ex) 손님이 기다린 시간
- Response time(응답시간)
- Ready queue에 들어와서 처음으로 CPU를 얻기까지 걸린 시간
- 최초에 CPU를 얻는 한번동안 기다린 시간을 의미
- time sharing 방식에서는 처음으로 CPU를 얻는 시간이 사용자 응답과 관련해서 매우 중요한 개념임
- ex) 첫번째 음식(단무지..)이 나올 때까지 손님이 기다린 시간
참고 링크
KOCW 운영체제 - 이화여대 반효경 교수 (2014-1) 9, 10강