[OS] CPU burst와 CPU Scheduler

kmjoo·2022년 1월 24일
0
post-thumbnail

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 알고리즘이 주로 사용됨

Scheduling criteria(=performance index, performance measuer, 성능척도)

  • 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강

profile
개발 취준생

0개의 댓글