01 스케줄링의 개요
1. 식당 관리자의 스케줄링
CPU 스케줄러는 CPU 와 시스템 자원을 어떻게 배정할지 결정하는 일을 한다.
2. 스케줄링의 단계
- 고수준 스케줄링 : 시스템 내의 전체 작업 수를 조절하는 것을 말한다. 여기서 작업은 운영체제에서 다루는 일의 가장 큰 단위로, 1개 또는 여러 개의 프로세스로 이루어진다. 고수준 스케줄링 단계에서는 어떤 작업을 시스템이 받아들일지 또는 거부할지를 결정한다. 일단 작업이 시작되면 시스템 자원을 사용하기 때문에 기존 작업에 영향을 미친다. 작업 요청이 오면 스케줄러가 시스템의 상황을 고려하여 작업을 승인할지, 거부할지를 결정하므로 고수준 스케줄링을 승인 스케줄링이라고도 한다. 고수준 스케줄링에 따라 시스템 내에서 동시에 실행 가능한 프로세스의 총개수가 정해진다.
- 저수준 스케줄링 : 어떤 프로세스에 CPU 를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 등을 결정하는 일이다. 준비 상태에 있는 프로세스 중 하나를 골라 실행 상태로 보내고, 실행 상태에 있는 프로세스를 대기 상태로 보내며, 대기 상태의 프로세스를 준비 상태로 보내는 것을 예로 들 수 있다. 매우 짧은 시간에 일어나기 때문에 단기 스케줄링이라고 부른다.
- 중간 수준 스케줄링 : 중지와 활성화로 전체 시스템의 활성화된 프로세스 수를 조절하여 과부하를 막는다. 즉 일부 프로세스를 중지 상태로 옮김으로써 나머지 프로세스가 원만하게 작동하도록 지원한다. 이는 프로세스 상태 중 보류 상태에 해당하며, 저수준 스케줄링이 원만하게 이루어지도록 완충하는 역할을 한다.

스케줄링의 단계
3. 스케줄링의 목적
특정 프로세스가 시스템 자원을 독점하거나 파괴하는 것을 막기 위해 중요도에 따라 우선순위를 배정해야 한다. 또한 시스템 자원을 효율적으로 배분하여 전체적인 시스템의 성능도 높여야 한다.
- 공평성, 효율성, 안정성, 확장성, 반응 시간 보장, 무한 연기 방지
02 스케줄링 시 고려 사항
프로세스의 분류에 따라 우선순위가 다를 수 있다. 스케줄링 시 이러한 프로세스의 중요도를 파악하여 적절한 스케줄링을 수행해야 한다.
1. 선점형 스케줄링과 비선점형 스케줄링
- 선점형 스케줄링 : 운영체제가 필요하다고 판단하면 실행 상태에 있는 프로세스의 작업을 중단시키고 새로운 작업을 시작할 수 있다. 선점형 스케줄링은 문맥 교환같은 부가적인 작업으로 인해 낭비가 생기는 것이 단점이다. 그러나 하나의 프로세스가 CPU 를 독점할 수 없기 때문에 빠른 응답을 요구하는 대화형 시스템이나 시분할 시스템에 적합하다.
- 비선점형 스케줄링 : 어떤 프로세스가 실행 상태로 들어가 CPU 를 사용하면 그 프로세스가 종료되거나 자발적으로 대기 상태에 들어가기 전까지는 계속 실행된다. 과거의 일괄 작업 시스템에서 사용하던 방식이다.
선점형 스케줄링 방식의 스케줄러에 비선점형 프로세스가 있을 경우 중요도를 매우 낮게 설정하여 선점형 프로세스에 영향을 덜 미치도록 한다.
2. 프로세스 우선순위
프로세스의 우선순위가 없을 경우 모든 프로세스는 준비 상태에 한 줄로 서서 순차적으로 실행된다. 대부분의 CPU 스케줄러는 우선순위를 사용한다. 우선순위가 있다는 것은 프로세스의 중요도가 다르다는 의미이다. CPU 스케줄러는 각 프로세스에 우선순위를 부여하는데 커널 프로세스의 우선순위가 일반 프로세스보다 높다.
우선순위가 높다는 것은 더 빨리 자주 실행된다는 의미이다. 준비 상태의 커널 프로세스와 일반 프로세스가 하나씩 있다면 커널 프로세스의 우선순위가 더 높기 때문에 커널 프로세스가 먼저 실행되며 작업이 끝날 때까지 계속 CPU 를 사용한다.