운영체제를 공부하다 보면 꼭 나오는 개념이다.
CPU는 컴퓨터의 두뇌와 같은 존재인데, 모든 프로그램이 이 CPU를 사용해야만 실행된다.
하지만 CPU는 한 번에 하나의 작업만 처리할 수 있다.
그럼 동시에 여러 작업이 실행 중일 땐 누굴 먼저 실행시켜야 할까?
그 판단을 해주는 게 바로 CPU 스케줄링 방식이다.
그래서 CPU 스케줄링이 뭔데?
여러 개의 준비된 프로세스(Ready Queue) 중 하나를 선택해서 CPU에 할당하는 방식이다.
왜 스케줄링이 필요한데?
CPU는 하나인데, 실행할 작업은 수십 개
동시에 실행되는 것처럼 보이는 건 사실 운영체제가 순서를 잘 배분해 주는 덕분
따라서 공정하고 효율적인 배분을 위해 다양한 알고리즘이 필요하다
주요 CPU 스케줄링 방식
1. FCFS (First-Come, First-Served)
도착한 순서대로 처리하는 방식이다.
EX) P1(도착: 0, 실행: 5), P2(도착: 1, 실행: 2), P3(도착: 2, 실행: 1)
→ 실행 순서: P1 → P2 → P3
→ P3은 실행 시간 1초인데, 6초나 기다림
장점은 구현이 쉽고 직관적이다
단점은 Convoy 효과 발생한다.(긴 작업이 앞에 있으면 전체가 느려짐)
Convoy 효과가 뭐냐면
FCFS처럼 비선점 스케줄링에서, 긴 작업 하나가 앞에 있으면 뒤에 있는 짧은 작업들이 기다리는 현상)
쉽게 말해서 무거운 트럭이 도로 맨 앞에 있으면 가벼운 승용차들이 그 뒤에서 전부 막히는거다.
2. SJF (Shortest Job First)
실행 시간이 가장 짧은 작업을 먼저 실행
EX) P1(실행: 5), P2(실행: 2), P3(실행: 1)
→ 실행 순서: P3 → P2 → P1
장점은 평균 대기시간이 가장 낮다.(이론상 효율 최고)
단점은 작업의 실행 시간을 미리 알아야 함, 긴 작업은 계속 밀려 starving 발생 가능
변형:
SRTF(Shortest Remaining Time First)
→ 선점형 버전: 더 짧은 작업이 들어오면 현재 작업 중단하고 교체
3. Priority Scheduling
우선순위가 높은 프로세스를 먼저 실행, 우선순위는 숫자(예: 낮을수록 더 높음)로 표현
EX) P1(priority 1), P2(priority 2), P3(priority 3)
→ 실행 순서: P1 → P2 → P3
장점은 중요한 작업을 먼저 실행할 수 있다.
단점은 낮은 우선순위는 계속 밀릴 수 있다.
해결법: Aging: 오래 기다릴수록 우선순위를 점점 높여줌
선점형 VS 비선점형
구분 | 설명 | 예시 |
비선점형 | 실행 중인 작업은 끝까지 실행 | FCFS, SJF |
선점형 | 더 중요한 작업이 오면 현재 작업 중단 | RR, SRTF, 선점형 Priority |
선점형은 반응성이 좋고 공평하지만 문맥 교환 비용이 크다
비선점형은 안정적이고 오버헤드가 적지만 유연성이 떨어진다
요약하자면
방식 | 설명 | 선점 여부 | 장점 | 단점 |
FCFS | 도착 순서대로 실행 | 비선점형 | 단순 구현 | Convoy 효과 |
SJF | 짧은 작업 우선 실행 | SRTF로 선점 가능 | 평균 대기시간 최소 | 실행 시간 예측 필요 |
RR | 타임 슬라이스로 순환 | 선점형 | 공평, 빠른 응답 | 문맥 교환 많음 |
Priority | 우선순위 높은 작업 우선 | 선택 가능 | 중요한 작업 우선 처리 | starvation 위험 |
CPU 스케줄링은 운영체제의 핵심 기능 중 하나다.
멀티태스킹 환경에서 시스템 전체 효율을 좌우한다.
어떤 환경에서 어떤 방식이 적합한지를 판단하는 능력이 중요함
'운영체제' 카테고리의 다른 글
문맥 교환(Context Switching) (0) | 2025.06.13 |
---|---|
프로세스와 스레드의 차이점 (0) | 2025.06.12 |