CPU 스케줄링 — 선점 vs 비선점

정처기 2026-08-15 16:26:38 정처기운영체제스케줄링라운드로빈HRN

글 목록 →

정의 — CPU를 누구에게 줄 것인가

CPU는 한 순간에 한 프로세스만 실행할 수 있다(코어 하나 기준). 준비 큐(ready queue)에는 실행을 기다리는 프로세스가 여럿 대기하는데, 이 중 다음에 CPU를 받을 프로세스를 고르는 일이 CPU 스케줄링이다. 목표는 CPU 이용률과 처리량은 높이고, 대기 시간·응답 시간·반환 시간은 줄이는 것이다.

핵심 구분 — 선점 vs 비선점

모든 스케줄링 알고리즘은 하나의 질문으로 갈린다: 실행 중인 프로세스에게서 CPU를 강제로 빼앗을 수 있는가?

  • 비선점(non-preemptive): 한번 CPU를 받으면 스스로 끝내거나 입출력을 기다릴 때까지 계속 쓴다. 문맥 교환이 적어 오버헤드가 낮지만, 긴 작업 하나가 짧은 작업들을 오래 기다리게 할 수 있다.
  • 선점(preemptive): 우선순위가 더 높은 프로세스가 오거나 할당 시간이 끝나면 CPU를 빼앗는다. 응답성이 좋아 대화형·실시간 시스템에 적합하지만, 문맥 교환 비용이 든다.

대표 알고리즘

비선점 계열

  • FCFS(First Come First Served): 도착 순서대로. 구현이 가장 단순하지만, 긴 프로세스 뒤의 짧은 프로세스들이 줄줄이 기다리는 호위 효과(convoy effect)가 생긴다.

  • SJF(Shortest Job First): 실행 시간이 가장 짧은 것부터. 평균 대기 시간이 이론상 최소지만, 긴 프로세스가 계속 밀리는 기아(starvation)가 생길 수 있다.

  • HRN(Highest Response-ratio Next): SJF의 기아를 보완. 우선순위를 다음 공식으로 계산해 값이 큰 것부터 실행한다.

    우선순위 = (대기 시간 + 서비스 시간) / 서비스 시간

    오래 기다릴수록 분자가 커져 긴 프로세스도 언젠가 뽑힌다(에이징 효과가 공식에 내장).

선점 계열

  • RR(Round Robin): 시간 할당량(time quantum)만큼 돌아가며 실행. 할당량이 너무 크면 FCFS와 비슷해지고, 너무 작으면 문맥 교환 오버헤드가 커진다. 시분할 시스템의 기본.
  • SRT(Shortest Remaining Time): SJF의 선점 버전. 남은 실행 시간이 더 짧은 프로세스가 도착하면 CPU를 빼앗는다.
  • 다단계 큐 / 다단계 피드백 큐: 준비 큐를 여러 개로 나눠 큐마다 다른 정책을 쓴다. 피드백 큐는 프로세스가 큐 사이를 이동할 수 있어 유연하다.

예시 — FCFS 평균 대기 시간 계산

프로세스 P1(실행 24), P2(실행 3), P3(실행 3)이 이 순서로 동시에 도착했다고 하자(단위: ms).

  • 실행 순서: P1(024) → P2(2427) → P3(27~30)
  • 대기 시간: P1=0, P2=24, P3=27 → 평균 (0+24+27)/3 = 17ms

순서를 P2 → P3 → P1로 바꾸면(SJF) 대기 시간이 P2=0, P3=3, P1=6으로 평균 3ms가 된다. 같은 작업이라도 순서가 평균 대기 시간을 크게 바꾼다는 것이 스케줄링의 존재 이유다.

시험에 자주 나오는 포인트

  • 선점/비선점 분류: FCFS·SJF·HRN은 비선점, RR·SRT·다단계 피드백 큐는 선점. 매칭 문제로 가장 자주 나온다.
  • HRN 공식: (대기 시간 + 서비스 시간) / 서비스 시간. 값이 쪽이 먼저다. 계산 문제로 출제된다.
  • 평균 대기 시간 계산: 위 예시처럼 도착·실행 시간 표를 주고 FCFS·SJF·RR의 평균 대기 시간을 구하게 한다. 간트 차트를 그려 풀면 실수가 준다.
  • SRT는 SJF의 선점형이라는 대응 관계, RR의 타임 퀀텀 크기에 따른 동작 변화.
  • 기아와 에이징: 기아는 우선순위가 낮아 계속 밀리는 현상, 에이징은 기다린 시간에 비례해 우선순위를 올려주는 해결책.

댓글

이 글에 대한 의견은 아래 댓글로 남겨주세요 (GitHub 계정 필요). 로그인 없이 남기고 싶다면