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) 알고리즘을 사용하여 가장 빠른 마감시간을 가진 태스크를 우선 실행
'컴퓨터공학' 카테고리의 다른 글
동기화 문제(Critical Section, Mutex, Semaphore)란? 개념과 해결 방법 (0) | 2025.03.07 |
---|---|
데드락(Deadlock)이란? 원인과 해결 방법 (0) | 2025.03.06 |
인터럽트(Interrupt)란? 하드웨어 인터럽트 vs 소프트웨어 인터럽트 (0) | 2025.03.06 |
컨텍스트 스위칭(Context Switching)의 원리와 성능 최적화 (0) | 2025.03.06 |
프로세스 상태: 생성, 실행, 대기, 종료 (0) | 2025.03.06 |