cpu 스케줄링이란?
CPU 스케줄링은 여러 프로세스(또는 스레드) 중에서 CPU를 어떤 프로세스에게 할당할지 결정하는 과정입니다.
왜 스케줄링이 필요할까? cpu는 한 번에 하나의 프로세스만 실행할 수 있기 때문이다. 그렇다면 한 번에 여러 개의 프로세스를 요청 받았을 때 어떻게 처리해줘야 할까?
CPU 스케줄링이 발생하는 시점
CPU를 한 번 할당받으면, 프로세스가 끝날 때까지 점유.
프로세스가 자발적으로 CPU를 반납해야 함.
🔹 비선점형 스케줄링이 발생하는 경우
1️⃣ 프로세스가 종료될 때
2️⃣ 입출력(I/O) 작업이 필요할 때 (CPU 사용 중단)
- 운영체제가 강제로 CPU를 빼앗고 다른 프로세스에게 할당
- 우선순위가 높은 프로세스가 등장하면 현재 프로세스를 중단하고 실행 가능
🔹 선점형 스케줄링이 발생하는 경우
1️⃣ 더 높은 우선순위를 가진 프로세스가 도착했을 때
2️⃣ CPU 할당 시간이 초과되었을 때 (타임 슬라이스 만료)
3️⃣ 입출력(I/O) 작업이 끝나고 준비 상태로 돌아온 프로세스가 있을 때
cpu 스케줄링 알고리즘
| 프로세스 | 도착 시간 | 실행 시간 |
|---|---|---|
| P1 | 0 | 5 |
| P2 | 1 | 3 |
| P3 | 2 | 2 |
실행 순서:
P1 → P2 → P3
단점: 실행 시간이 긴 프로세스가 먼저 오면 전체 실행이 지연됨
| 프로세스 | 도착 시간 | 실행 시간 |
|---|---|---|
| P1 | 0 | 5 |
| P2 | 1 | 3 |
| P3 | 2 | 2 |
실행 순서:
P3 → P2 → P1
✅ 장점: 평균 대기 시간이 짧아짐
⏳ 단점: 긴 작업이 계속 밀릴 수도 있음
| 프로세스 | 도착 시간 | 실행 시간 |
|---|---|---|
| P1 | 0 | 5 |
| P2 | 1 | 3 |
| P3 | 2 | 2 |
실행 순서 (타임 슬라이스 = 2ms)
P1(2) → P2(2) → P3(2) → P1(2) → P2(1) → P1(1)
✅ 장점: 모든 프로세스가 공평하게 실행됨
⏳ 단점: 타임 슬라이스 크기에 따라 성능이 달라짐
✅ 장점: 중요한 작업을 먼저 처리 가능
⏳ 단점: 낮은 우선순위 작업이 계속 밀리는 상황 발생
프로세서의 상태 변화
🔵 New → 🔄 Ready → 🟢 Running → 🔄 Waiting → 🏁 Terminated
1️⃣ New (새로운 프로세스)
새로운 프로세스가 생성됨
운영체제는 이 프로세스를 Ready 상태로 이동시킴
2️⃣ Ready (준비 상태)
CPU에서 실행되기를 기다리는 상태
여러 개의 프로세스가 Ready Queue(준비 큐) 에 대기
3️⃣ Running (실행 상태)
CPU에서 프로세스가 실행 중인 상태
단 하나의 프로세스만 실행 가능
4️⃣ Waiting (대기 상태)
입출력(I/O) 작업을 기다리는 상태
예: 디스크 읽기, 네트워크 요청
5️⃣ Terminated (종료 상태)
프로세스 실행이 완료됨
좀 더 살펴보면
✅ (1) 프로세스 생성 및 Ready Queue(준비 큐) 대기
새로운 프로세스가 생성되면 Ready Queue(준비 큐) 에 추가됨.
Ready Queue에는 실행 대기 중인 프로세스들이 정렬되어 있음.
✅ (2) CPU가 실행할 프로세스 선택
CPU 스케줄러(Scheduler) 가 Ready Queue에서 프로세스를 선택
스케줄링 알고리즘(예: FCFS, SJF, RR, Priority)에 따라 선택 방식이 달라짐
선택된 프로세스는 CPU에서 실행됨 (Running 상태로 변경)
✅ (3) 프로세스 실행 및 종료 처리
CPU에서 프로세스를 실행함
실행 중인 프로세스는 다음 조건에 따라 다른 상태로 전환됨:
완료되면 → "Terminated(종료)" 상태로 변경
I/O 요청이 있으면 → "Waiting(대기)" 상태로 변경
타임 슬라이스가 만료되면 → 다시 Ready Queue로 이동
✅ (4) 문맥 교환 (Context Switching)
CPU가 현재 실행 중인 프로세스를 중단하고 새로운 프로세스를 실행해야 할 경우 Context Switching(문맥 교환)이 발생