Linux Process Scheduler란? CPU 스케줄러의 동작 원리와 프로세스 실행 방식

Linux 서버에서는 수십 개에서 수천 개의 프로세스가 동시에 실행됩니다. 웹 서버는 사용자 요청을 처리하고, 데이터베이스는 쿼리를 실행하며, 백업 프로그램과 모니터링 프로그램도 동시에 동작합니다.

하지만 CPU 코어의 개수는 제한되어 있기 때문에 모든 프로세스를 동시에 실행할 수는 없습니다. 이때 어떤 프로세스를 먼저 실행할지 결정하는 역할을 하는 것이 바로 Process Scheduler(프로세스 스케줄러) 입니다.

이번 글에서는 Linux Process Scheduler의 개념과 동작 원리, 스케줄링 정책, 그리고 실무에서 확인하는 방법까지 자세히 알아보겠습니다.

Process Scheduler란?

Process Scheduler는 CPU를 사용할 프로세스를 선택하는 Kernel의 기능입니다.

실행 가능한 프로세스가 여러 개 존재하면 Scheduler가 우선순위와 정책에 따라 CPU를 할당합니다.

간단한 구조는 다음과 같습니다.

실행 가능한 프로세스

↓

Scheduler

↓

CPU 할당

↓

프로세스 실행

↓

다음 프로세스 선택

이 과정을 매우 빠르게 반복하기 때문에 사용자는 여러 프로그램이 동시에 실행되는 것처럼 느끼게 됩니다.

Scheduler가 필요한 이유

예를 들어 CPU가 하나인데 실행 가능한 프로세스가 네 개라고 가정해 보겠습니다.

  • Chrome
  • MySQL
  • Nginx
  • Python

모두 동시에 CPU를 사용할 수는 없습니다.

Scheduler는 다음과 같이 매우 짧은 시간 단위로 CPU를 번갈아 할당합니다.

CPU

↓

Chrome

↓

MySQL

↓

Python

↓

Nginx

↓

Chrome

↓

...

이러한 방식을 시분할(Time Sharing) 이라고 합니다.

Linux의 기본 스케줄러

현재 대부분의 Linux 배포판은 CFS(Completely Fair Scheduler) 를 기본 스케줄러로 사용합니다.

CFS의 목표는 모든 프로세스가 가능한 한 공평하게 CPU 시간을 사용하는 것입니다.

특징은 다음과 같습니다.

  • 공정한 CPU 분배
  • 높은 응답성
  • 멀티코어 지원
  • 동적 우선순위 적용

데스크톱과 서버 환경 모두에서 널리 사용됩니다.

Process의 상태

Scheduler는 실행 가능한 프로세스만 선택합니다.

프로세스는 일반적으로 다음 상태를 가집니다.

New

↓

Ready

↓

Running

↓

Waiting

↓

Ready

↓

Terminated
  • Ready : 실행 대기
  • Running : CPU 사용 중
  • Waiting : 입출력 대기
  • Terminated : 종료

Waiting 상태의 프로세스는 CPU를 사용하지 않습니다.

Time Slice란?

Scheduler는 프로세스에게 일정 시간 동안 CPU를 사용할 권한을 부여합니다.

이를 Time Slice(타임 슬라이스) 또는 CPU Quantum이라고 합니다.

Process A

■■■■

↓

Process B

■■■■

↓

Process C

■■■■

Time Slice가 끝나면 Scheduler는 다른 프로세스를 선택합니다.

Priority(우선순위)

Linux는 프로세스마다 우선순위를 가지고 있습니다.

우선순위가 높은 프로세스는 CPU를 더 자주 사용할 가능성이 높습니다.

대표적인 값은 다음과 같습니다.

  • Nice Value
  • Real-Time Priority

Nice 값 확인

ps -el

또는

top

NI 열에서 Nice 값을 확인할 수 있습니다.

현재 Scheduler 확인

프로세스의 스케줄링 정책은 다음 명령으로 확인할 수 있습니다.

chrt -p PID

예시

chrt -p 1234

출력 예시

pid 1234's current scheduling policy: SCHED_OTHER

Scheduler 관련 정책

Linux에는 여러 가지 스케줄링 정책이 있습니다.

정책설명
SCHED_OTHER일반 프로세스 기본 정책
SCHED_FIFO실시간 선입선출
SCHED_RR실시간 Round Robin
SCHED_BATCH배치 작업
SCHED_IDLE매우 낮은 우선순위

일반적인 서버에서는 대부분 SCHED_OTHER를 사용합니다.

CPU 사용률 확인

Scheduler 동작을 확인할 때 자주 사용하는 명령입니다.

현재 CPU 사용률

top

또는

htop

프로세스별 CPU 사용률

ps -eo pid,comm,%cpu --sort=-%cpu

CPU 코어 정보

lscpu

실시간 CPU 통계

mpstat -P ALL 1

실무 사례

예를 들어 웹 서버에서 CPU 사용률이 100%라면 다음 순서로 확인합니다.

  1. top으로 CPU 사용률 확인
  2. CPU를 많이 사용하는 프로세스 확인
  3. ps로 PID 확인
  4. chrt로 스케줄링 정책 확인
  5. 필요하면 Nice 값 조정

이러한 절차를 통해 CPU 병목 현상을 분석할 수 있습니다.

Scheduler와 Context Switch

Scheduler는 CPU를 다른 프로세스로 넘겨줄 때 Context Switch를 수행합니다.

Process A 실행

↓

Context Switch

↓

Process B 실행

Context Switch에는 일정한 비용이 발생합니다.

너무 자주 발생하면 CPU 성능이 저하될 수 있습니다.

다음 글에서는 Context Switch를 자세히 다룰 예정입니다.

실무에서 자주 사용하는 명령어

현재 CPU 상태

top

프로세스 정보

ps -ef

CPU 사용률

ps -eo pid,comm,%cpu --sort=-%cpu

Scheduler 확인

chrt -p PID

CPU 정보

lscpu

실시간 CPU 통계

mpstat -P ALL 1

자주 묻는 질문

Scheduler는 CPU마다 존재하나요?

멀티코어 시스템에서는 각 CPU 코어마다 실행 큐(Run Queue)를 관리하며, Scheduler는 코어 간 부하를 균형 있게 분산하도록 동작합니다.

CFS는 무엇의 약자인가요?

Completely Fair Scheduler의 약자이며, 현재 대부분의 Linux 배포판에서 사용하는 기본 CPU 스케줄러입니다.

Scheduler를 변경할 수 있나요?

프로세스별로 chrt 명령을 사용해 스케줄링 정책을 변경할 수 있으며, 실시간 프로세스에는 SCHED_FIFOSCHED_RR을 사용할 수 있습니다. 다만 운영 환경에서는 충분한 검토 후 적용해야 합니다.

마무리

Linux Process Scheduler는 CPU를 가장 효율적으로 활용하기 위해 실행 가능한 프로세스에 CPU 시간을 배분하는 Kernel의 핵심 기능입니다. 현대 Linux에서는 CFS를 기반으로 공정한 스케줄링을 제공하며, 프로세스 상태와 우선순위, Time Slice 등을 고려해 CPU를 관리합니다. Scheduler의 동작 원리를 이해하면 CPU 성능 분석과 시스템 튜닝, 장애 해결 능력을 크게 향상시킬 수 있습니다.

댓글 남기기