프로세스 스케줄링 – CPU는 누구에게 시간을 줄까

리눅스에서 'top' 명령어를 처음 실행해 보았을 때, 빠르게 바뀌는 CPU 사용률과 다양한 프로세스 정보를 보며 신기함을 느꼈던 기억이 있습니다. 당시에는 단순히 숫자의 변화로만 보였지만, 운영체제 수업을 통해 스케줄링 알고리즘을 배우고 나니 이 모든 것이 체계적인 규칙과 원리에 따라 움직인다는 사실이 흥미로웠습니다.
프로세스 스케줄링이란 – 시간의 분배자
프로세스 스케줄링(Process Scheduling)은 운영체제가 여러 개의 프로세스를 어떻게 효율적으로 실행할 것인지를 결정하는 핵심 메커니즘입니다. 현대의 컴퓨터 시스템은 동시에 수십 개에서 수백 개의 프로세스를 실행하고 있으며, CPU라는 제한된 자원을 어떻게 나누어 쓸지를 결정하는 것이 바로 스케줄러(Scheduler)의 역할입니다.
하나의 CPU 코어는 한 번에 하나의 프로세스만을 실행할 수 있으므로, 동시에 여러 작업을 처리하려면 CPU가 여러 프로세스 사이를 빠르게 전환해야 합니다. 이 과정에서 어떤 프로세스를 먼저 실행하고, 얼마나 오래 실행할지를 판단하는 기준이 바로 스케줄링 정책입니다. 이 정책에 따라 시스템의 반응 속도, 사용자 만족도, 자원 활용률 등이 크게 달라지기 때문에 매우 중요한 요소로 취급됩니다.
운영체제는 기본적으로 ‘준비 상태(Ready)’에 있는 프로세스들 중 하나를 선택하여 실행 상태(Running)로 전환시키고, 일정 시간이 지나거나 다른 조건이 발생하면 다음 프로세스로 교체하는 방식으로 동작합니다. 이 과정은 매우 짧은 시간 간격으로 이루어지기 때문에 사용자는 마치 여러 작업이 동시에 실행되는 것처럼 느낄 수 있습니다.
스케줄링 알고리즘의 종류 – 공정성과 효율성 사이
스케줄링 알고리즘은 여러 가지가 존재하며, 각각의 특징과 목적에 따라 선택됩니다. 가장 기본적인 알고리즘은 FCFS(First-Come, First-Served) 입니다. 이름 그대로 먼저 도착한 프로세스를 먼저 실행하는 방식으로, 구현은 간단하지만 긴 작업이 먼저 도착했을 경우 전체 대기 시간이 길어질 수 있다는 단점이 있습니다.
SJF(Shortest Job First)는 가장 짧은 실행 시간이 필요한 프로세스를 먼저 실행하는 방식으로, 평균 대기 시간을 줄이는 데 효과적입니다. 하지만 실제로 프로세스의 실행 시간을 미리 예측하기 어려워 적용이 까다로운 편입니다. 이를 개선한 SRTF(Shortest Remaining Time First)는 실행 중인 프로세스보다 더 짧은 작업이 도착하면 교체하는 방식으로, 선점형 스케줄링 알고리즘의 대표적인 예입니다.
현대 운영체제에서 가장 널리 사용되는 방식은 라운드 로빈(Round Robin)입니다. 이는 각 프로세스에게 동일한 시간 조각(Time Quantum)을 부여하고 순환하면서 실행하는 방식입니다. 응답성이 중요시되는 시스템에서 많이 사용되며, 선점형이기 때문에 한 프로세스가 너무 오래 CPU를 독점하는 것을 방지할 수 있습니다.
또한 우선순위 기반 스케줄링(Priority Scheduling)은 각 프로세스에 우선순위를 부여하고, 높은 우선순위를 가진 프로세스가 먼저 실행되도록 합니다. 다만 낮은 우선순위의 프로세스가 무한정 대기하는 ‘기아(Starvation)’ 현상이 발생할 수 있어, 이를 방지하기 위해 ‘노화(Aging)’ 기법을 함께 사용하는 경우가 많습니다.
실제 시스템에서의 적용과 고려 사항
실제 운영체제는 단일 알고리즘만을 사용하는 것이 아니라, 여러 알고리즘을 결합하거나 조정하여 사용합니다. 예를 들어, 리눅스는 CFS(Completely Fair Scheduler)라는 공정성을 중심으로 한 스케줄러를 사용하며, 각 프로세스에 가상의 실행 시간(vruntime)을 계산하여 균등하게 CPU 시간을 분배합니다.
현대 시스템에서는 사용자 프로그램 외에도 커널 스레드, 백그라운드 프로세스 등 다양한 종류의 프로세스가 존재하며, 이들 간의 조화를 유지하기 위해 복잡한 스케줄링 정책이 필요합니다. 모바일 운영체제의 경우 배터리 효율성도 고려해야 하며, 서버 환경에서는 처리량(Throughput)과 응답 시간(Response Time)이 중요한 평가 기준이 됩니다.
또한 실시간 시스템(Real-Time Systems)에서는 특정 시간 안에 반드시 작업을 완료해야 하므로, 데드라인 기반의 RMS(Rate Monotonic Scheduling)나 EDF(Earliest Deadline First) 같은 실시간 스케줄링 알고리즘이 적용됩니다. 이처럼 시스템의 특성에 따라 가장 적합한 알고리즘을 선택하는 것이 중요합니다.
프로세스 스케줄링은 단순히 CPU 시간을 나누는 것 이상의 의미를 지닙니다. 이는 시스템 전반의 성능, 안정성, 사용자 경험을 좌우하는 핵심 요소이며, 이를 깊이 있게 이해하는 것은 운영체제의 본질을 이해하는 데 있어 매우 중요한 단계입니다.
댓글
댓글 쓰기