운영체제

📌 11-1. CPU 스케줄링 (CPU Scheduling)

잔잔한 흐름 2025. 4. 20. 17:34

운영체제의 핵심 역할 중 하나는 바로 CPU 자원을 어떻게 나눠 쓸지 결정하는 것입니다. 이 작업을 우리는 **CPU 스케줄링(CPU Scheduling)**이라고 부르며, 성능과 효율, 사용자 경험에 모두 큰 영향을 줍니다. 

본 내용은 <혼자 공부하는 컴퓨터 구조 + 운영체제>를 바탕으로 만들어졌습니다.


✅ CPU 스케줄링이란?

운영체제는 여러 개의 프로세스가 동시에 실행되기를 원할 때, 누구에게 CPU를 먼저 줄지, 누구는 기다리게 할지를 결정해야 합니다.

💡 이처럼 CPU 자원을 공정하고 효율적으로 배분하는 과정을 "CPU 스케줄링"이라고 합니다.

만약 이 과정을 제대로 하지 못하면,

  • 꼭 실행되어야 할 프로세스가 무시되거나,
  • 덜 중요한 작업만 반복적으로 실행되어
  • 시스템이 무질서하고 비효율적인 상태가 될 수 있어요.

🧠 프로세스마다 우선순위가 다르다?

“CPU 써볼게요!” 하고 요청한 순서대로 줄을 서게 하면 공정할 것 같지만, 현실은 그렇게 단순하지 않습니다.

왜냐하면...

프로세스마다 "급함의 정도"가 다르기 때문입니다.

🔸 예시: 입출력 작업이 많은 프로세스

  • 입출력(I/O)을 많이 사용하는 프로세스는 자주 대기 상태로 들어가기 때문에, 빠르게 실행시키는 게 전체 시스템에 더 이롭습니다.

이처럼, 작업에 따라 아래처럼 구분할 수 있어요:

구분 설명 예시
I/O 집중 프로세스 입출력을 오래 기다리는 경우가 많음 디스크 백업, 영상 재생 등
CPU 집중 프로세스 계산/연산을 주로 수행 수학 연산, 컴파일 등

🌀 CPU 버스트 & I/O 버스트

프로세스는 실행되는 동안 아래처럼 반복됩니다.

CPU 버스트 ↔ I/O 버스트 ↔ CPU 버스트 ↔ ...

  • CPU 버스트: CPU가 연산을 수행하는 시간
  • I/O 버스트: 입출력 장치 사용을 기다리는 시간

🔍 그래서 효율적인 방법은?

CPU 집중 프로세스보다 입출력 집중 프로세스를 먼저 실행해서 I/O를 일찍 시작하게 하면, 그 사이 CPU는 다른 작업을 수행할 수 있어요!

📌 “모두 차례로” 보다는 “각 상황에 맞게 배분”하는 것이 훨씬 효율적입니다.


🏷️ 프로세스 우선순위 (Priority)

운영체제는 프로세스마다 우선순위를 부여해서 상황에 맞는 실행 순서를 정합니다.

  • 이 우선순위는 각 프로세스의 PCB(Process Control Block) 안에 기록됩니다.
  • 이를 바탕으로 운영체제는 어떤 프로세스를 먼저 실행할지 판단합니다.

🔍 우선순위 확인하는 법 (유닉스 계열 기준)

  • ps -ei : 프로세스 목록과 우선순위 확인
  • nice, renice : 우선순위 조절

📋 스케줄링 큐 (Scheduling Queue)

모든 프로세스의 PCB를 일일이 검사하면서 순서를 정한다면 너무 느리겠죠?
그래서 운영체제는 ‘줄 세우기’를 합니다.

🪜 CPU, 메모리, 입출력 장치 등 모든 자원은 큐(queue) 로 관리됩니다.

📌 대표적인 스케줄링 큐 종류

큐 이름설명
준비 큐(Ready Queue) CPU를 사용하길 기다리는 프로세스들이 서 있는 줄
대기 큐(Waiting Queue) I/O 장치 사용을 기다리는 프로세스들이 서 있는 줄
  • 우선순위가 높은 프로세스는 중간에 줄을 새치기할 수 있습니다.
    마치 VIP처럼요!

🔄 입출력 완료 시 동작

  • I/O 작업 완료 → 인터럽트 발생
  • 운영체제는 해당 프로세스를 준비 큐로 이동시켜 다시 CPU를 사용할 준비를 시킵니다.


🔁 선점형 vs 비선점형 스케줄링

“지금 CPU 쓰는 프로세스가 있는데, 더 급한 애가 나타났다?”
이럴 때는 두 가지 방식이 있어요.

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

  • 운영체제가 CPU를 강제로 빼앗아 더 중요한 프로세스에 할당
  • **시간 할당량(Time Quantum)**이 끝나면 타이머 인터럽트로 CPU를 회수

✔️ 장점
: 자원 독점 방지, 빠른 반응

단점
: 문맥 교환(context switch) 때문에 오버헤드 발생


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

  • 한 번 CPU를 얻은 프로세스는 스스로 종료하거나 대기 상태가 되기 전까지 계속 사용

✔️ 장점
: 문맥 교환 횟수 적음 → 오버헤드 감소

단점
: 급한 프로세스가 와도 기다릴 수밖에 없음 → 응답성 낮아짐


✅ 정리 요약

 

항목 선점형 비선점형
CPU 회수 방식 타이머 등으로 강제 회수 자발적 종료 전까지 유지
반응 속도 빠름 느릴 수 있음
문맥 교환 오버헤드 작음
장점 공정한 자원 분배 처리 안정성
단점 오버헤드 존재 자원 독점 가능

📎 마무리

CPU 스케줄링은 단순히 “누가 먼저 쓸래?”의 문제가 아닙니다.
전체 시스템의 효율과 성능, 그리고 사용자의 경험을 좌우하는 매우 중요한 개념입니다.

프로세스의 특성과 상황에 맞게 자원을 배분함으로써,

  • 더 빠르게
  • 더 공정하게
  • 더 똑똑하게

컴퓨터가 일할 수 있게 만드는 것이 바로 CPU 스케줄링의 목표입니다.