프로그램이 실행되면 시간 흐름에 따라 다음과 같은 흐름으로 진행된다.
CPU가 실행 되다가 I/O 작업을 시행하고 , ready 상태였다가 다시 실행되고 ...
결국 프로그램이 시행되는 것은 CPU 와 I/O 를 번갈아 가며 사용한다.
CPU 가 사용되는 시간을 CPU burst
, I/O 가 사용되는 시간을 I/O burst
라고 한다.
지금 블로그에 정리하고 있는 단계에서도 반복적으로
CPU / I/O burst
가 반복되며 되고 있겠지?!
프로그램들의 CPU burst
시간의 분포를 나타냈을 대
CPU burst
기간이 매우 짧은 프로그램들의 빈도가 많았고
CPU burst
기간이 긴 프로그램들의 빈도가 적었다.
이처럼 CPU burst
기간이 짧은 프로그램들은 I/O burst
기간이 길었다는 것이니 I/O bound job
이라고 한다.
반대로 CPU bound job
이 긴 프로그램은 CPU bound job
이라고 한다.
그렇다면 I/O bound job
은 사용자와 interactive
한 프로그램이기 때문에 적절한 반응과 스케줄링이 필요하다.
또 분포를 보면 다양한 boundjob
들이 섞여있기 때문에 스케줄링이 필요하다.
CPU scheduler
는 소프트웨어, 하드웨어가 아닌 CPU
내부에 존재하는 코드의 일부이다.
Dispatcher
는 스케줄링 결과에 따라 문맥을 교환하는 코드이다.
문맥 교환이 일어날 때
다른 인터럽트에 의해서 강제로 빼앗기는 preemptive
한 경우와
자발적으로 뺏기는 nonpreemptive
한 경우가 있다.