CPU 스케쥴링의 정의
CPU 스케쥴링은 프로세스가 CPU를 효율적으로 공유하게 하는 기법입니다. 무슨 뜻이냐
운영체제에서 준비 상태에 있는 여러 프로세스 중에서 CPU를 할당할 프로세스를 결정하는 작업
즉 "어떤 프로세스부터 CPU를 먼저쓸지 결정하는 것" 입니다.
CPU 스케쥴링 종류
이 CPU스케쥴링은 종류가 2가지로 아래와 같이 나뉩니다.
- 비선점형 스케쥴링 (Non-preemptive) 한 프로세스가 cpu를 할당 받으면 자발적으로 cpu를 반환 할때까지 계속 사용하는 방식
- 선점형 스케쥴링(Preemtive)
운영체제가 실행중인 프로세스보다 더 높은 우선순위가 배정되었을때 해당 cpu를 강제로 빼앗을 수 있는 방식
| 구분 | 비선점형 스케줄링 (Non-preemptive) | 선점형 스케줄링 (Preemptive) |
| 특징 | CPU 점유권을 스스로 포기할 때까지 유지 | 우선순위가 높은 프로세스가 오면 즉시 선점 가능 |
| 응답 속도 | 느림 (대기 시간 길어짐) | 빠름 (즉각 반응 가능) |
| 문맥 교환 | 적음 | 많음 (오버헤드 발생 가능) |
| 안정성 | 예측 가능, 안정적 | 실시간 처리에 유리하지만 복잡 |
| 예시 | FCFS, SJF(비선점형), HRN | SRTF, Round Robin, Priority(선점형) |
비선점형 스케쥴링의 종류
1.FCFS
준비큐에 도착한 순서대로 cpu에 할당하는 가장 단순한 방식
장점 : 구현 간단
단점 : 긴 프로세스가 짧은 프로세스들을 장시간 대기 시킴
예제
| 프로세스 | 도착시간 | 사용시간 |
| P1 | 0 | 8 |
| P2 | 1 | 4 |
| P3 | 2 | 2 |
| P4 | 3 | 1 |
풀이
최종 정리표)
| 프로세스 | 도착시간 | 사용시간 | 시작시간 | 종료시간 | 대기시간 |
| P1 | 0 | 8 | 0 | 8 | 0 - 0 = 0 |
| P2 | 1 | 4 | 8 | 12 | 8 - 1 = 7 |
| P3 | 2 | 2 | 12 | 14 | 12 - 2 = 10 |
| P4 | 3 | 1 | 14 | 15 | 14 - 3 = 11 |
실행순서: 도착 순서대로 실행 p1->p2->p3->p4
평균 대기시간: (0 + 7 + 10 + 11) / 4 = 7ms
2.SJF(Shortest Job First)
실행시간이 가장 짧은 프로세스부터 실행
장점: 평균 대기시간이 최소화
단점: 사용시간이 긴 작업이 무한 대기 가능성인 기아현상 (Starvation) 발생
예제
| 프로세스 | 도착시간 | 사용시간 |
| P1 | 0 | 8 |
| P2 | 1 | 4 |
| P3 | 2 | 2 |
| P4 | 3 | 1 |
풀이
최종 정리표)
| 프로세스 | 도착시간 | 사용시간 | 시작시간 | 종료시간 | 대기시간 |
| P1 | 0 | 8 | 0 | 8 | 0 - 0 = 0 |
| P4 | 3 | 1 | 8 | 9 | 8 - 3 = 5 |
| P3 | 2 | 2 | 9 | 11 | 9 - 2 = 7 |
| P2 | 1 | 4 | 11 | 15 | 11 - 1 = 10 |
실행순서: 가장 짧은 사용시간 우선 사용 p1->p4->p3->p2
평균 대기시간: (0 + 5 + 7 + 10) / 4 = 5.5ms
3.HRN
응답률이 높은 프로세스부터 우선처리
응답률=(대기시간+사용시간)/사용시간
장점 : SJF의 기아(Starvation)문제 보완함
단점: 응답률 계산 오버헤드, 실제 사용 잘 안함
예제
| 프로세스 | 도착시간 | cpu사용시간 |
| P1 | 0 | 8 |
| P2 | 1 | 4 |
| P3 | 2 | 2 |
| P4 | 3 | 1 |
풀이
1.시간(0)
도착 프로세스는 P1만있으므로 -> P1 실행 (0~8)
| 프로세스 | 도착시간 | 대기시간 | 서비스시간 | 응답률 |
| P1 | 0 | 0 | 8 | (0+8)/8 = 1.0 |
2.시간(8)
p1은 종료가 끝났고 p1실행중일 때 p2,p3,p4도착 후 대기중,
각 프로세스별 응답률 계산
| 프로세스 | 도착시간 | 사용시간 | 현재시간 | 대기시간 | 응답률 계산 |
| P2 | 1 | 4 | 8 | 8 - 1 = 7 | (7+4)/4 = 2.75 |
| P3 | 2 | 2 | 8 | 8 - 2 = 6 | (6+2)/2 = 4.0 |
| P4 | 3 | 1 | 8 | 8 - 3 = 5 | (5+1)/1 = 6.0 |
위 3개중 응답률이 가장 높은 P4 실행(8~9)
3.시간(9)
남은 프로세스 p2,p3 응답률 계산
| 프로세스 | 도착시간 | 사용시간 | 대기시간 | 응답률 계산 |
| P2 | 1 | 4 | 9 - 1 = 8 | (8+4)/4 = 3.0 |
| P3 | 2 | 2 | 9 - 2 = 7 | (7+2)/2 = 4.5 |
응답률이 높은 p3 실행(9~11)
4.시간(11)
남은 프로세스 p2 실행
| 프로세스 | 도착시간 | 사용시간 | 대기시간 | 응답률 계산 |
| P2 | 1 | 4 | 11 - 1 = 10 | (10+4)/4 = 3.5 |
최종 정리표)
| 프로세스 | 도착시간 | cpu사용시간 | 시작시간 | 종료시간 | 대기시간 |
| P1 | 0 | 8 | 0 | 8 | 0 - 0 = 0 |
| P4 | 3 | 1 | 8 | 9 | 8 - 3 = 5 |
| P3 | 2 | 2 | 9 | 11 | 9 - 2 = 7 |
| P2 | 1 | 4 | 11 | 15 | 11 - 1 = 10 |
실행순서: 응답률 우선 처리 p1->p4->p3->p2
평균 대기시간: (0 + 5 + 7 + 10) / 4 = 5.5ms
선점형 스케쥴링의 종류
1.RR(Round Robin)
각 프로세스에 타임 슬라이스 시간을 할당하고 해당 시간 후에 강제로 cpu 를 빼앗아 큐의 뒤로 이동
장점: 응답이 빠르고 모든 프로세스가 공정한 기회를 얻음
단점: 타임슬라이스 작으면 컨텍스트 스위칭 오버헤드 증가
예제
타임 퀀텀(2ms)
| 프로세스 | 도착시간 | 사용시간 |
| P1 | 0 | 8 |
| P2 | 1 | 4 |
| P3 | 2 | 2 |
| P4 | 3 | 1 |
풀이
- (0~2): P1(남은 6ms)
- (2~4): P2(남은 2ms)
- (4~6): P3(완료)
- (6~8): P4(완료)
- (8~10): P1(남은 4ms)
- (10~12): P2(완료)
- (12~14): P1(남은 2ms)
- (14~16): P1(완료)
최종 정리표)
| 프로세스 | 도착시간 | 사용시간 | 시작시간 | 종료시간 | 대기시간 |
| P1 | 0 | 8 | 0 | 16 | 16 - 0 - 8 = 8 |
| P2 | 1 | 4 | 2 | 12 | 12 - 1 - 4 = 7 |
| P3 | 2 | 2 | 4 | 6 | 6 - 2 - 2 = 2 |
| P4 | 3 | 1 | 6 | 8 | 8 - 3 - 1 = 4 |
실행순서: p1->p2->p3->p4
평균 대기시간: (8 + 7 + 2 + 4) / 4 = 5.25ms
2.SRT(Shortest Remaining Time First)
SJF의 선점형 버젼입니다. 실행중인 프로세스보다 남은시간이 짧은 새 프로세스가 도착하면 즉시 전환 합니다.
장점: 평균 대기 시간 최소화
단점: 컨텍스트 스위칭 오버헤드 , 기아 현상 가능
예제
| 프로세스 | 도착시간 | 사용시간 |
| P1 | 0 | 8 |
| P2 | 1 | 4 |
| P3 | 2 | 2 |
| P4 | 3 | 1 |
풀이
- (0~1): P1(남은 7ms) ← P2 도착
- (1~2): P2(남은 3ms) ← P3 도착
- (2~3): P3(남은 1ms) ← P4 도착
- (3~4): P4(완료)
- (4~5): P3(완료)
- (5~8): P2(완료)
- (8~16): P1(완료)
최종 정리표)
| 프로세스 | 도착시간 | 사용시간 | 시작시간 | 종료시간 | 대기시간 |
| P1 | 0 | 8 | 0 | 16 | 16 - 0 - 8 = 8 |
| P2 | 1 | 4 | 1 | 8 | 8 - 1 - 4 = 3 |
| P3 | 2 | 2 | 2 | 5 | 5 - 2 - 2 = 1 |
| P4 | 3 | 1 | 3 | 4 | 4 - 3 - 1 = 0 |
실행순서: 남은 시간이 가장 짧은 프로세스 우선 처리 p3->p4->p8->p1
평균 대기시간: (8 + 3 + 1 + 0) / 4 = 3ms
'CS' 카테고리의 다른 글
| TCP vs UDP 차이 완벽 정리: 연결형 vs 비연결형 패킷 교환 방식 (0) | 2025.11.07 |
|---|---|
| 응집도 완벽정리 - 기능적·순차적·교환적·절차적·시간적·우연적 응집도 예제 코드로 이해하기 (0) | 2025.11.04 |
| C# 디자인 패턴 핵심 3종류 정리: 생성·구조·행위 패턴 + 예제 코드 포함 (0) | 2025.11.01 |
| 테스트 커버리지 종류완벽 정리 - 구문 커버리지, 분기 커버리지 , 조건/분기 커버리지, 경로커버리지, 다중조건 커버리지 (0) | 2025.10.30 |
| 페이지 교체 알고리즘 알아보기 FIFO OPT LRU LFU NUR 예제 (0) | 2025.10.29 |
