💡 CPU 스케줄러는 프로세스가 생성된 후 종료될 때까지 모든 상태 변화를 조정하는 일을 한다. 스케줄링은 여러 프로세스의 상황을 고려하여 CPU와 시스템 자원을 어떻게 배정할지 결정하는 일을 말한다.
CPU 스케줄러는 관리의 범주를 나누어 스케줄링을 한다. CPU 스케줄링은 규모에 따라 고수준 스케줄링, 중간 수준 스케줄링, 저수준 스케줄링으로 구분된다.
고수준 스케줄링(high level scheduling)
시스템 내의 전체 작업 수를 조절하는 것을 말한다. 전체 시스템의 부하를 고려하여 작업을 시잘할지 말지 결정한다. 여기서 작업은 운영체제에서 다루는 일의 가장 큰 단위로, 1개 또는 여러 개의 프로세스로 이루어진다. 고수준 스케줄링은 메인프레임과 같은 큰 시스템에서 규모가 큰 일괄 작업을 처리할 때 사용된다.
저수준 스케줄링(low level scheduling)
가장 작은 단위의 스케줄링을 저수준 스케줄링이라 한다. CPU 스케줄러 입장에서 저수준 스케줄링은 어떤 프로세스에 CPU를 할당할지, 어떤 프로세스에 대기 상태로 보낼지 등을 결정하는 일이다.
중간 수준 스케줄링(middle level scheduling)
고수준 스케줄링과 저수준 스케줄링 사이에 일어나는 스케줄링이다. 중간 수준 스케줄링은 중지(suspend)와 활성화(active)로 전체 시스템의 활성화된 프로세스 수를 조절하여 과부하를 막는다.
CPU 스케줄링의 원래 목적은 모든 프로세스가 공평하게 작업하도록 하는 것이다. 즉 특정 프로세스가 시스템 자원을 독점하거나 파괴하는 것을 막기 위해 중요도에 따라 우선순위를 배정해야 한다.
어떤 프로세스가 CPU를 할당받아 실행 중이더라도 운영체제가 CPU를 강제로 빼앗을 수 있는 스케줄링 방식이다.
어떤 프로세스가 CPU를 점유하면 다른 프로세스가 이를 빼앗을 수 없는 스케줄링 방식이다.
프로세스는 생성된 후 준비, 실행, 대기 상태를 거쳐 완료된다. 실제 작업이 일어나는 두 가지 상태는 다음과 같다. 프로세스는 CPU를 사용하여 작업을 하는 실행 상태, 입출력을 요청하여 완료되기 까지 기다리는 대기 상ㅌ에 있다.
💡 스케줄링을 할 때 입출력 집중 프로세스의 우선 순위를 CPU 집중 프로세스보다 높이면 시스템 효율이 향상된다. 입출력 집중 프로세스는 잠깐 CPU를 사용한 후 대기 상태로 이동하기 때문에 다른 프로세스가 CPU를 사용할 수 있다.
💡 전면 프로세스는 사용자의 요구에 즉각 반응해야 하지만 후면 프로세스는 상호작용이 없다. 따라서 전면 프로세스의 우선순위가 후면 프로세스보다 높다. 그만큼 후면 프로세스는 전면 프로세스보다 CPU를 할당받을 활률이 적다.
💡 작업의 중요도가 높은 프로세스는 커널 프로세스, 전면 프로세스, 대화형 프로세스, 입출력 집중 프로세스이다. 반대로 우선순위가 낮은 프로세스는 일반 프로세스, 후면 프로세스, 일괄 작업 프로세스, CPU 집중 프로세스이다.