
프로그램이 실행되면 시간 흐름에 따라 다음과 같은 흐름으로 진행된다.
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 한 경우가 있다.