백과 블로그
홈블로그소개

백과의 개인 블로그 입니다. Contact : ksu9801@gmail.com

운영체제

프로세스 스케줄링(Process Scheduling)

백과
2025년 7월 24일
5분 읽기
목차
📚 CPU 스케줄링
✅ 도입
📌 스케줄링 이란?
✅ 용어 정리
📌 우선 순위
📌 CPU 활용률(CPU utilization)
📌 스케줄링 큐
📌 준비 큐
📌 대기 큐
✅ 스케줄링
📌 선점형과 비 선점형 스케줄링
✅ 다음 글

목차

📚 CPU 스케줄링
✅ 도입
📌 스케줄링 이란?
✅ 용어 정리
📌 우선 순위
📌 CPU 활용률(CPU utilization)
📌 스케줄링 큐
📌 준비 큐
📌 대기 큐
✅ 스케줄링
📌 선점형과 비 선점형 스케줄링
✅ 다음 글

image

📚 CPU 스케줄링

✅ 도입

📌 스케줄링 이란?


  • 앞서 프로세스와 쓰레드를 통해, 운영체제가 CPU가 어떤 작업을 처리할 것 인지를 결정하고, 지시한다고 하였다.
  • CPU는 한번에 하나의 작업밖에 처리할 수 없기 때문에, 운영체제는 어떤 작업을 실행할 것인지, CPU의 사용을 배분하고 관리하게 된다.
  • 이때, 배분 방법이 CPU 스케줄링 이다.
  • CPU 스케줄링 알고리즘은, 이러한 CPU 스케줄링의 절차를 말하며, 이 CPU 스케줄링 알고리즘을 결정하고 수행하는 운영체제의 일부분을 CPU 스케줄러 라고 한다.

✅ 용어 정리

  • 스케줄링에 대해서 알아 보기 전, 용어부터 정리한다.

📌 우선 순위


  • 모든 프로세스는 실행되기 위해, CPU의 자원을 필요로 한다.
  • 현재 이 블로그가 운영되는 aws 서버에는, next, spring, jvm, mysql등 다양한 프로세스와 쓰레드가 실행중이고, 명령어를 통해 확인해보니, 128개의 프로세스가 동작 중 이다.
ubuntu@ip-??-??-??-??:~$ ps -e | wc -l
128
  • 현재 사용중인 클라우드의 CPU 사양은 코어 2개로, 한번에 2가지 일밖에 처리할 수 없다.
ubuntu@ip-??-??-??-??:~$ lscpu
Architecture:             x86_64
  CPU op-mode(s):         32-bit, 64-bit
  Address sizes:          46 bits physical, 48 bits virtual
  Byte Order:             Little Endian
CPU(s):                   2
...
  • 즉, 위의 128개의 프로세스를 모두 처리하기 위해 Context switching을 사용해 멀티 프로세스를 구현하고 있다고 볼 수 있다.
  • 이때, 어떤 작업을 먼저 처리할 것인지, 판단이 필요하다. 이것을 우선순위(Priority)라고 한다.
  • 우선순위가 높은 프로세스는 운영체제에 의해 처리를 위한 CPU 자원의 할당을 더 빨리, 더 많이 할당 되게 됩니다.
  • 이 우선순위는, 운영체제 마다 어떤 스케줄링 알고리즘을 선택 하냐에 따라 다를 수 있다.
ubuntu@ip-??-??-??-??:~$ ps -eLo pid,pri,ni,cmd
    PID PRI  NI CMD
      1  19   0 /usr/lib/systemd/systemd --system --deserialize=93
     38  39 -20 [kworker/R-kinte]
   1260  19   0 mysqld
   1268  19   0 java -jar app.jar --spring.profiles.active=prod
   1610  19   0 next-server (v15.2.5)
   ...
  • ubuntu에서, ps -l 관련 명령어로 확인해보면, PRI 값을 통해 작업의 우선순위를 확인해 볼 수 있다.

TMI) NI(nice) 값이란? nice 값은 프로세스의 '우선순위 조정 힌트' 리눅스에서는 “누가 더 양보(nice)할지”를 나타내는 수치. nice는 프로세스 실행 시 또는 실행 중에 “내 우선순위를 얼마나 양보할지” 결정함 범위: -20(가장 안 착함, 우선순위 가장 높음) 0(기본값) +19(가장 착함, 우선순위 가장 낮음) 즉, 값이 낮을수록 CPU를 더 많이/자주 할당받을 수 있다.

  • 그렇다면, 이 우선순위를 정하는 대표적인 요소들을 알아보자

📌 CPU 활용률(CPU utilization)


  • CPU 활용률은 전체 CPU의 가동 시간 중, 작업을 처리하는 시간의 비율을 말한다.
    • 예) CPU가 10초 중 7초 동안 일했다면, 활용률은 70%
  • 운영체제는 가급적으로 이 CPU 활용률을 높게 유지할 수 있도록 우선 순위를 할당한다.

물론, 이건 다음에 소개될 스케줄링 알고리즘에 따라 달라질 수 있다.

  • 그런데 CPU 활용률이 70% 라면, 남은 30% 에는 아무것도 안하고 있는걸까?
  • 아니다, 이때는 대부분 입출력 장치의 응답을 대기하고 있는다.
    • ex)파일을 읽을 때, → CPU는 읽기 명령만 내리고, → 디스크에서 데이터가 올 때까지 잠시 대기(슬립)
  • 대부분의 프로세스들은, CPU와 입출력 장치를 모두 사용해, 실행과 대기 상태를 오가며 실행된다.
  • 이때, 프로세스가 CPU를 이용하는 작업을 CPU 버스트
  • 입출력 장치를 기다리는 작업을 입출력 버스트 라고 한다.
  • 복잡한 수학 연산, 그래픽 처리 등 CPU 버스트 작업들이 많은 프로세스를 CPU 집중 프로세스(CPU Bound process) 라고 한다.
  • 비디오 재생, 디스크 백업 등의 입출력 작업이 많아 대기가 많은 프로세스를 입출력 집중 프로세스(I/O Bound Process라고 한다.
  • 즉, CPU 활용률을 가장 높이는 방법은, I/O bound process들을 빠르게 실행시켜 입출력 장치를 작동 시킨 다음, 대기상태에 빠진 process 대신, CPU bound process를 실행시킨다면, 가장 합리적으로 실행이 가능하다.

⚠️ 여기서 설명하는 CPU 활용률은, CPU Load와는 전혀 다르다. 오해 하지 말자. 현구막님 기술 블로그 CPU 지표 정리

📌 스케줄링 큐


  • 운영체제는, CPU의 자원을 우선순위에 맞게 할당하기 위해 프로세스들을 관리 합니다.
  • 그 우선순위에 따라, 이번 타이밍에는 어떤 작업을 할당할지 줄을 세우게 되는데, 이 줄을 스케줄링 큐를 통해서 구현하게 된다.
  • 흔히 알고 있는 자료구조 큐와 특정부분 유사하다.
    • 자료구조의 큐는 선입 선출의 특징을 가지지만, 스케줄링 큐는 반드시 선입/선출 이지는 않다.
  • CPU를 이용하고 싶은 프로세스의 PCB와 메모리로 적재되고 싶은 프로세스의 PCB, 특정 입출력 장치를 이용하고 싶은 프로세스의 PCB를 이 큐에 줄세워 관리하는 것이다.
  • 이 프로세스들이 하나의 큐 에 담겨서 관리되지 않고, 다양한 큐에 적재되어 관리 된다.
  • 대표적으로 준비 큐와 대기 큐가 있다.

📌 준비 큐


  • **준비 큐(Ready Queue)**는 CPU를 할당받기 위해 대기 중인 프로세스들의 PCB(프로세스 제어 블록)가 줄지어 있는 큐이다.
  • 모든 프로세스는 메모리에 올라오면, 실행을 기다리며 준비 큐에 들어간다.
  • 운영체제의 스케줄러는 이 준비 큐에서 우선순위, 스케줄링 알고리즘에 따라 다음에 실행될 프로세스를 선택해 CPU에 할당한다.
  • 즉, “준비 큐 = CPU 사용 기회를 기다리는 대기실”
  • 준비 큐에 있는 동안은 CPU를 전혀 사용하지 못한다.

📌 대기 큐


  • **대기 큐(Waiting/Blocked Queue)**는 입출력(I/O) 등 특정 이벤트를 기다리는 프로세스들의 PCB가 들어가는 큐이다.
  • 예를 들어, 프로세스가 파일 읽기/쓰기, 네트워크 전송 등 입출력 작업을 요청하면 해당 작업이 완료될 때까지 대기 큐로 이동해 기다린다.
  • 입출력 장치에서 작업이 끝나면 다시 준비 큐로 돌아가 CPU 할당을 기다린다.
  • 즉, “대기 큐 = 외부 장치나 이벤트를 기다리는 대기실”

image

✅ 스케줄링

  • 스케줄링 알고리즘을 알아보기에 앞서, 스케줄링은 두가지로 분류 될 수가 있다.
  • 선점형 스케줄링, 비 선점형 스케줄링

📌 선점형과 비 선점형 스케줄링

  • 이 둘을 나누는 기준은, 프로세스가 CPU 할당을 받아 사용되고 있을 때, 운영체제가 프로세스로부터 CPU 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있느냐 없느냐의 차이이다.
  • 선점형 스케줄링은, 말 그대로 실행 중인 프로세스로부터 CPU 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 스케줄링 방식이다.
  • 반대로 비 선점형 스케줄링은, 실행되고 있는 프로세스는 스스로 종료되거나 대기 상태에 빠지기 까지는 할당된 CPU 자원을 빼앗을 수 없는 방식이다.
  • 둘을 컨텍스트 스위칭 오버헤드, 기아 현상 등 관점에서 확인해보면 다음과 같이 차이를 나타낼 수 있다.
구분선점형(Preemptive)비선점형(Non-preemptive)
CPU 회수 방식운영체제가 강제로 회수(빼앗음)프로세스가 스스로 반납할 때까지 독점 가능
CPU 독점성낮음<br>(운영체제가 강제로 분배, 독점 불가)높음<br>(한 번 점유하면 OS가 강제로 빼앗지 못함)
컨텍스트 스위칭 오버헤드높음 (자주 발생)낮음 (필요할 때만 발생)
응답성(반응 속도)우수 (급한 작업 바로 처리 가능)떨어짐 (오랜 시간 점유 가능)
기아(Starvation) 현상우선순위 낮은 프로세스 밀릴 수 있음CPU 점유 프로세스가 길면, 다른 프로세스가 오래 기다릴 수 있음

✅ 다음 글


  • 스케줄링 알고리즘을 Java 코드와 함께 소개할 예정이었으나, 너무 길어질 듯 하여 별도의 포스팅으로 정리 예정