CPU 스케줄링이란
개념
CPU 스케줄링은 프로세스에게 CPU를 할당하는 일정을 결정하고 실행하는 과정을 의미한다.
운영체제는 동시에 여러 프로세스를 처리해야 하므로, CPU 스케줄러는 마치 레스토랑의 관리자처럼 다양한 상황을 고려하여 CPU 및 기타 시스템 자원을 적절히 배정하는 역할을 수행한다.
스케줄링 정책
정해진 시간 단위(time slice, time slot)마다 CPU를 점유할 프로세스를 결정한다.
다양한 요소를 고려하여 다음에 실행할 프로세스를 선택한다.
고려해야 할 요소들
최대의 처리량(Throughput): CPU 활용도를 극대화한다.
최소 지연 시간(Latency): 프로세스가 빠르게 응답하도록 한다.
무기한 연기 방지(Starvation Prevention): 특정 프로세스가 계속 기다리는 현상을 해결한다.
데드라인 보장: 정해진 시간 안에 요청을 완료하도록 한다.
CPU 스케줄러가 필요한 이유
프로세스는 CPU, 메모리, 저장장치, 네트워크, 파일, I/O 등 다양한 자원을 사용하여 작업을 수행한다.
하지만 자원은 유한하기 때문에 여러 작업이 동시에 자원을 요구하면 경쟁이 발생한다.
이때 작업 간 자원을 효율적으로 할당하고 공유하기 위해 스케줄러(Scheduler)가 필요하다.
스케줄링의 주요 목표
1. 공평성 (Fairness)
모든 프로세스는 공평하게 자원을 배정받아야 한다.
특정 프로세스가 자원 배정에서 제외되어서는 안 된다.
2. 효율성 (Efficiency)
자원이 유휴 상태 없이 사용되어야 한다.
자원이 놀고 있다면 이를 사용할 수 있는 프로세스에 우선권을 부여한다.
우선순위 시스템으로 중요 프로세스가 먼저 실행되도록 한다.
3. 안정성 (Stability)
자원을 점유하거나 파괴하려는 프로세스로부터 시스템을 보호한다.
프로세스 수가 많아져도 시스템은 안정적으로 동작해야 한다.
4. 확장성 (Scalability)
시스템 자원이 증가하면, 그 혜택이 성능 향상으로 이어지도록 설계되어야 한다.
5. 반응 시간 보장 (Responsiveness)
시스템은 사용자가 예상하는 시간 내에 적절한 응답을 제공해야 한다.
6. 무한 연기 방지 (No Starvation)
특정 프로세스가 무기한 기다리는 현상이 발생하지 않도록 한다.
CPU 스케줄링 단계
1. 상위 단계 스케줄링(High Level Scheduling)
개념
장기/작업/승인 스케줄링(Long-term/Job/Admission Scheduling)을 의미한다.
시스템에 부담을 주지 않도록 전체 작업 수를 조절한다.
어떤 작업을 시스템에 받아들일지 혹은 거부할지를 결정하며, 실행 가능한 프로세스의 총 개수를 제한한다.
역할
전체 시스템의 부하를 고려하여 작업을 시작할지 말지를 결정한다.
2. 중간 단계 스케줄링(Middle Level Scheduling)
개념
활성화(active)된 프로세스와 보류(suspend)된 프로세스의 상태 전환을 관리한다.
과부하 상황에서 전체 프로세스 수를 조절해야 할 때 중요한 역할을 한다.
역할
시스템에 과부하가 걸리면, 활성화된 프로세스 중 일부를 보류 상태로 전환하여 부하를 해소한다.
저수준 스케줄링의 부담을 완충하는 역할을 수행한다.
3. 하위 단계 스케줄링(Low Level Scheduling)
개념
단기 스케줄링(Short-term Scheduling, CPU Scheduling)이라고도 하며, 짧은 시간 안에 처리되는 작업을 관리한다.
실제 작업을 CPU에 할당하고, 필요에 따라 프로세스를 대기 상태로 전환한다.
역할
CPU에서 실제로 프로세스를 실행하는 단계이며, 가장 직접적인 작업을 처리한다.
정리
고수준 스케줄링: 작업이 처음 시스템에 들어올 때 전체 시스템 부하를 고려하여 작업 시작 여부를 결정한다.
중간 수준 스케줄링: 이미 실행 중이던 프로세스가 너무 많아 과부하가 발생했을 때 과부하 해소를 위해 활성화된 프로세스를 보류 상태로 전환한다.
저수준 스케줄링: 실제 작업을 처리하며, 프로세스를 CPU에 할당하고 실행한다.
선점형/비선점형 스케줄링
선점형 스케줄링(Preemptive Scheduling)
운영체제가 필요하다고 판단하면, 실행 중인 프로세스의 작업을 중단한다.
다른 프로세스가 CPU를 쟁취하여 실행될 수 있도록 한다. 즉, 새로운 작업이 CPU를 사용할 수 있는 방식이다.
하나의 프로세스가 CPU를 독점하지 못하게 하며, 빠른 응답이 가능하다.
대화형 시스템이나 시분할 시스템에 적합하다.
대부분의 저수준 스케줄러가 선점형 방식을 사용한다.
비선점형 스케줄링(Non-Preemptive Scheduling)
한 프로세스가 CPU를 사용하면, 해당 프로세스가 종료하거나 자발적으로 CPU를 반납할 때까지 다른 프로세스는 대기한다.
운영체제는 실행 중인 프로세스를 강제로 중단하지 않으며, 프로세스가 CPU를 스스로 양보해야 한다.
과거의 일괄 처리(batch) 시스템에서 주로 사용되었다.
선점형보다 스케줄러의 작업량이 적다. 문맥 교환(context switch)이 적어, 시간 및 자원 낭비가 줄어든다.
CPU를 오래 사용하는 프로세스가 있으면, 다른 프로세스들이 오랜 시간 대기하게 된다. 이로 인해 전체 시스템의 처리율(throughput)이 낮아질 수 있다.
비교
구분 | 선점형 스케줄링 | 비선점형 스케줄링 |
CPU 점유 | 운영체제가 중단 가능 | 프로세스가 스스로 반납 |
반응 속도 | 빠르다 | 느리다 |
시스템 유형 | 대화형, 시분할 시스템 | 일괄 처리 시스템 |
장점 | 빠른 응답, 공정한 분배 | 문맥 교환 감소, 단순 |
단점 | 문맥 교환으로 인한 오버헤드 | 긴 대기시간, 낮은 처리율 |
'CS > 운영체제' 카테고리의 다른 글
[OS]우선순위 (0) | 2025.04.14 |
---|---|
[Linux]chmod (0) | 2025.03.30 |
[OS]멀티 스레드 모델 (0) | 2025.03.24 |
[OS]멀티 태스크, 멀티 스레드, 멀티 프로세싱 (0) | 2025.03.24 |
[OS]스레드(thread) (0) | 2025.03.24 |