컴퓨터공학

프로세스 스케줄링(Process Scheduling)이란? 선점형 vs 비선점형 스케줄링 비교

nyambu 2025. 3. 6. 19:00

프로세스스케줄링
프로세스스케줄링

1. 프로세스 스케줄링이란?

컴퓨터 운영체제는 CPU와 같은 한정된 자원을 여러 프로세스가 효과적으로 사용할 수 있도록 관리해야 한다. 하지만 CPU는 한 번에 하나의 프로세스만 실행할 수 있기 때문에, 운영체제는 어떤 프로세스를 언제 실행할지를 결정하는 과정이 필요하다. 이때 운영체제가 프로세스를 효율적으로 실행할 수 있도록 CPU 할당 순서를 정하는 과정을 **프로세스 스케줄링(Process Scheduling)**이라고 한다.

1-1. 프로세스 스케줄링의 필요성

만약 프로세스 스케줄링이 없다면, 어떤 프로세스가 CPU를 차지하면 끝날 때까지 계속 실행되므로, 다른 프로세스는 실행되지 못하고 기다려야 한다.

CPU 사용률을 극대화하여 한정된 자원을 최대한 활용
사용자가 여러 프로그램을 실행할 때 멀티태스킹 가능
응답 속도를 향상시켜 사용자 경험 개선
프로세스가 공정하게 CPU를 사용할 수 있도록 우선순위 관리

1-2. 프로세스 스케줄러(Process Scheduler)의 역할

운영체제는 프로세스를 관리하기 위해 **스케줄러(Scheduler)**를 사용하며, 다음과 같이 세 가지 주요 스케줄러가 존재한다.

스케줄러 
종류설명
장기 스케줄러(Long-Term Scheduler) 실행할 프로세스를 선택하여 메모리에 로드
단기 스케줄러(Short-Term Scheduler) CPU에 어떤 프로세스를 실행할지 결정
중기 스케줄러(Mid-Term Scheduler) 메모리 사용량을 조절하기 위해 프로세스를 일시 중단(Swapping)

2. 선점형(Preemptive) vs 비선점형(Non-Preemptive) 스케줄링

프로세스 스케줄링은 CPU를 프로세스에게 할당하는 방식에 따라 선점형(Preemptive)과 비선점형(Non-Preemptive)으로 나뉜다. 

구분
선점형(Preemptive) 스케줄링 비선점형(Non-Preemptive) 스케줄링
CPU 강제 회수 여부 운영체제가 CPU를 강제로 회수 가능 한 프로세스가 CPU를 끝까지 사용
응답 속도 빠름 (우선순위 높은 프로세스 즉시 실행 가능) 느림 (기존 프로세스가 끝나야 실행 가능)
멀티태스킹 지원 유리함 불리함
시스템 안정성 일부 프로세스가 기아(Starvation) 상태에 빠질 가능성 있음 공정한 CPU 분배 가능
예시 라운드 로빈(Round Robin), SJF(선점형), 우선순위 스케줄링(선점형) FCFS(선입선출), SJF(비선점형)

2-1. 선점형 스케줄링(Preemptive Scheduling)

운영체제가 CPU를 강제로 프로세스로부터 회수할 수 있는 방식이다. 즉, 실행 중인 프로세스라도 우선순위가 더 높은 프로세스가 생기면 CPU를 빼앗길 수 있음

 

📌 선점형 스케줄링의 특징

  • 응답 속도가 빠르며, 실시간 시스템에서 유리
  • 멀티태스킹 환경에서 필수적
  • 우선순위가 낮은 프로세스는 실행되지 못할 수도 있음 (기아 상태 발생 가능)

📌 선점형 스케줄링의 예시 알고리즘

  • 라운드 로빈(Round Robin, RR)
    • 프로세스마다 동일한 시간(Time Quantum)만큼 CPU를 사용하도록 설정
    • 모든 프로세스가 공평하게 실행되지만, 문맥 전환(Context Switching)이 자주 발생하여 성능 저하 가능
  • 우선순위 스케줄링(Priority Scheduling, Preemptive)
    • 높은 우선순위를 가진 프로세스가 CPU를 먼저 사용
    • 단, 우선순위가 낮은 프로세스는 실행되지 못할 수도 있음 (Starvation 문제 발생)
  • 최단 남은 시간 우선(Shortest Remaining Time First, SRTF)
    • 실행 시간이 가장 짧은 프로세스가 CPU를 우선 사용

2-2. 비선점형 스케줄링(Non-Preemptive Scheduling)

한 프로세스가 CPU를 할당받으면, 실행이 끝날 때까지 CPU를 반납하지 않는 방식이다. 즉, 다른 프로세스가 기다려야 하기 때문에 멀티태스킹이 어렵지만, 공정성이 보장됨

 

📌 비선점형 스케줄링의 특징

  • 프로세스가 CPU를 끝까지 사용할 수 있어 안정적
  • 문맥 전환(Context Switching)이 적어 성능 저하가 없음
  • 우선순위가 높은 프로세스가 대기할 수 있어 응답 속도가 느림

📌 비선점형 스케줄링의 예시 알고리즘

  • FCFS(First Come, First Served)
    • 먼저 도착한 프로세스가 먼저 실행되는 방식
    • 공정하지만, CPU 실행 시간이 긴 프로세스가 먼저 실행되면, 짧은 프로세스가 오래 기다려야 하는 문제 발생
  • 최단 작업 우선(Shortest Job First, SJF, Non-Preemptive)
    • 실행 시간이 가장 짧은 프로세스가 먼저 실행됨
    • 효율적이지만, 실행 시간이 긴 프로세스는 오랫동안 기다릴 수 있음 (기아 상태 발생 가능)

3. 프로세스 스케줄링 최적화 방법

운영체제에서 효율적인 프로세스 스케줄링은 시스템 성능을 최적화하는 중요한 요소이다. 스케줄링을 효과적으로 관리하면 CPU 사용률을 극대화하고, 프로세스 응답 시간을 줄이며, 시스템 전체 성능을 향상시킬 수 있다.

3-1. 문맥 전환(Context Switching) 비용 최소화

문맥 전환(Context Switching)이란?
운영체제가 프로세스를 변경할 때, 현재 실행 중인 프로세스의 상태를 저장하고 새로운 프로세스를 복원하는 과정이다. 하지만 문맥 전환이 너무 자주 발생하면 CPU가 실제 연산보다 프로세스 전환에 더 많은 시간을 소비할 수 있다.

 

최적화 방법

  • 적절한 타임 슬라이스(Time Quantum) 설정
    • 너무 짧으면 문맥 전환이 자주 발생 → 성능 저하
    • 너무 길면 응답 속도가 느려짐 → 사용자 경험 저하
  • 멀티스레드(Thread) 기반 처리 활용
    • 프로세스 전환보다 스레드 전환이 가벼우므로 문맥 전환 비용 절감

📌 실제 적용 예시

  • Windows와 Linux 커널은 CPU 부하에 따라 자동으로 타임 슬라이스를 조정
  • 멀티스레딩 웹 서버(Nginx, Apache)는 요청 처리를 프로세스가 아닌 스레드 단위로 수행하여 성능 최적화

3-2. 동적 우선순위 조정(Dynamic Priority Adjustment)

왜 필요한가?

운영체제가 우선순위가 낮은 프로세스를 오랫동안 실행하지 않으면, 시스템 응답성이 저하될 수 있음. 인터랙티브 프로세스(예: 사용자가 조작하는 앱)는 즉각적인 반응이 필요하지만, 백그라운드 작업(예: 대용량 데이터 처리)은 긴 실행 시간이 필요할 수 있음

 

최적화 방법

      • 대기 시간이 길어질수록 우선순위를 동적으로 증가하여 기아 상태 방지
      • 사용자 인터랙티브 프로세스를 우선 실행하고, 백그라운드 작업은 대기하도록 조정

📌 실제 적용 예시

    • Windows의 우선순위 부스트(Priority Boost) 기법
      • 키보드나 마우스 입력을 감지한 프로세스의 우선순위를 자동으로 증가시켜 빠르게 반응할 수 있도록 조정
    • Linux Completely Fair Scheduler(CFS)
      • CPU 점유율을 모든 프로세스가 공정하게 가질 수 있도록 우선순위를 동적으로 조정

3-3. 멀티코어 시스템을 고려한 스케줄링

멀티코어 환경에서의 문제점

      • 멀티코어 시스템에서는 어떤 코어에서 어떤 프로세스를 실행할지 결정하는 것이 중요
      • 프로세스가 실행되는 코어가 바뀌면 CPU 캐시(Cache)가 초기화되어 성능이 저하될 수 있음

최적화 방법

      • CPU 코어 고정(Affinity Scheduling)
        • 특정 프로세스를 특정 CPU 코어에서 실행하도록 고정하여 캐시 효율성을 극대화
      • 부하 분산(Load Balancing) 기법
        • 사용되지 않는 코어에 새로운 프로세스를 배치하여 CPU 리소스를 균형 있게 활용

📌 실제 적용 예시

    • Linux의 CPU Affinity 설정 (taskset 명령어를 활용하여 특정 코어에서만 실행 가능)
    • Android의 big.LITTLE 아키텍처
      • 저전력 코어에서 가벼운 작업을 실행하고, 고성능 코어에서 무거운 작업을 실행

3-4. I/O 중심 프로세스와 CPU 중심 프로세스의 분리

I/O 중심 vs CPU 중심 프로세스란?

  • I/O 중심 프로세스 → 네트워크 요청, 파일 읽기/쓰기 등 I/O 작업이 많은 프로세스 (예: 웹 서버, 데이터베이스 서버)
  • CPU 중심 프로세스 → 연산을 많이 수행하는 프로세스 (예: 영상 렌더링, AI 모델 학습)

최적화 방법

  • 멀티 큐 스케줄링(Multi-Level Queue Scheduling)
    • CPU 중심 프로세스와 I/O 중심 프로세스를 서로 다른 큐에서 관리하여 각각의 특성에 맞게 스케줄링
  • I/O 중심 프로세스를 우선 실행하여 CPU 활용 극대화
    • CPU가 놀지 않도록 I/O 작업이 끝날 때까지 다른 CPU 중심 프로세스를 실행

📌 실제 적용 예시

  • Linux 커널은 I/O 바운드 프로세스를 우선 실행하여 CPU가 유휴 상태가 되지 않도록 설계
  • 데이터베이스 서버(MySQL, PostgreSQL)는 별도의 I/O 큐를 사용하여 대기 시간을 최소화

3-5. 실시간 시스템(Real-Time System)에서의 스케줄링 최적화

실시간 시스템이란?

  • 일정한 시간 내에 반드시 작업이 완료되어야 하는 시스템
  • 예: 항공기 제어 시스템, 의료 장비, 산업 자동화 시스템

최적화 방법

  • 하드 실시간 스케줄링(Hard Real-Time Scheduling)
    • 기한(Deadline) 내에 반드시 작업을 완료해야 하는 경우
    • 예: 자동차의 ABS(Anti-lock Braking System), 인공위성 시스템
  • 소프트 실시간 스케줄링(Soft Real-Time Scheduling)
    • 일정 시간이 지나도 실행은 가능하지만, 응답 시간이 중요한 경우
    • 예: 온라인 게임, 동영상 스트리밍

📌 실제 적용 예시

  • 항공기 소프트웨어는 RMS(Rate Monotonic Scheduling) 방식을 적용하여 높은 우선순위의 태스크를 먼저 실행
  • 의료 기기에서는 EDF(Earliest Deadline First) 알고리즘을 사용하여 가장 빠른 마감시간을 가진 태스크를 우선 실행