CPU스케줄링

CPU 스케줄링은 프로세스가 작업을 수행할 때, 언제 어떤 프로세스에 CPU를 할당할지를 결정하는 작업입니다. 기본적으로 멀티프로그래밍과 시분할에 기반합니다. 메모리 내에 실행 준비된 프로세스 중 하나를 선택하여 CPU를 할당합니다. 한정된 CPU 및 I/O장치 등의 시스템 자원을 가지고 최고의 성능을 내야 하고, 따라서 자원을 언제 어떻게 할당할지를 결정하는 문제는 정말 중요합니다. CPU 스케줄링의 목표는 CPU를 최대로 활용하는 것, 즉 idle을 최소화 하는 것입니다.

스케줄링의 목적

비선점 vs 선점 스케줄링

스케줄링은 OS가 강제적으로 CPU 사용을 중단시키는지 여부에 따라서 크게 두 가지로 나뉘는데, 강제할 경우를 선점형 스케줄링(preemptive scheduling), 강제하지 않는 경우 **비선점형 스케줄링(non-preemptive scheduling)**이라고 합니다.

스케줄링은 다음과 같은 때에 일어납니다.

  1. Running → Waiting 상태 : ( ex. I/O 요청, 자식프로세스 종료 - wait() 요청을 통해 종료 )
  2. Running → Terminate 상태 : ( ex. 부모프로세스의 종료 )
  3. Running → Ready 상태 : ( ex. 인터럽트 발생 )
  4. Waiting → Ready 상태 : ( ex. I/O 완료 )

비선점 스케줄링