OS

프로세스 - 2

1space 2025. 6. 13. 06:32

이화여자대학교 반효경 교수님의 운영체제 강의를 정리한 글입니다.

먼저, 스케줄러(scheduler)란?

운영체제는 CPU와 메모리 같은 자원을 누구에게 언제 얼마나 줄 것인지를 결정해야 합니다.
이 일을 맡는 것이 스케줄러입니다.
스케줄러는 크게 3종류가 있습니다:

장기 스케줄러 (long-term) 어떤 프로세스를 메모리에 올릴지 결정 프로세스가 처음 만들어질 때
중기 스케줄러 (mid-term) 메모리에서 어떤 프로세스를 잠시 내릴지 결정 메모리가 부족해질 때
단기 스케줄러 (short-term) 어떤 프로세스에게 CPU를 줄지 결정 매우 자주 (타이머 인터럽트 등)

 

 

 

 

프로세스 상태

(1) NEW → READY

  • 사용자가 어떤 프로그램을 실행하면, 프로세스가 만들어집니다.
  • 이 상태를 NEW 상태라고 합니다.
  • NEW 상태의 프로세스는 아직 메모리에 올라가지 않았기 때문에 CPU를 사용할 수 없습니다.
  • 이 NEW 상태의 프로세스를 메모리에 "올려주는" 역할을 하는 것이 바로 장기 스케줄러입니다.

✔ 장기 스케줄러는 뭘 하느냐?

  • 너무 많은 프로그램을 한꺼번에 메모리에 올리면 메모리 부족으로 컴퓨터가 느려지기 때문에,
  • 장기 스케줄러는 "어떤 프로그램은 지금 올리고, 어떤 것은 나중에 올리자"라는 식으로 프로세스 수를 조절합니다.

(2) READY → RUNNING

  • 메모리에 올라간 프로세스는 READY 상태가 됩니다. (CPU만 기다리는 중)
  • 이 READY 상태의 프로세스들 중에서 하나를 골라 CPU를 줄 수 있도록 결정하는 것이 단기 스케줄러입니다.

✔ 단기 스케줄러는 뭘 하느냐?

  • CPU는 동시에 하나의 프로세스만 실행할 수 있으므로,
  • 단기 스케줄러는 "누가 CPU를 쓸지"를 아주 자주 결정합니다.
  • 보통 수 밀리초 단위로 타이머 인터럽트가 발생할 때마다 단기 스케줄러가 작동합니다.

(3) RUNNING → BLOCKED

  • 프로세스가 파일을 읽거나 네트워크 응답을 기다릴 때처럼, CPU가 필요 없는 작업을 하면 BLOCKED 상태가 됩니다.
  • 이때는 입출력이 끝날 때까지 기다리는 상태입니다.

여기까지가 일반적인 NEW → READY → RUNNING → BLOCKED 흐름입니다.

 

중기 스케줄러와 suspended 상태란?

❗ 문제 상황: 메모리가 부족하다면?

  • 모든 프로그램을 메모리에 다 올리면 컴퓨터가 느려집니다.
  • 이럴 때 운영체제는 일부 프로세스를 메모리에서 내립니다.
  • 이때 사용하는 것이 바로 중기 스케줄러입니다.

중기 스케줄러의 역할

  • 메모리를 너무 많이 차지하는 프로세스를 골라 잠시 메모리에서 쫓아냅니다.
  • 쫓겨난 프로세스는 상태가 "SUSPENDED"로 바뀌고, 메모리 대신 디스크에 저장됩니다.
  • 이렇게 되면 RAM이 확보되고, 다른 프로세스에게 자원을 줄 수 있습니다.

Suspended 상태란?

Suspended는 "멈춰진" 상태입니다. 중요한 특징은:

상태                               CPU 사용 가능?                 메모리 사용?                              의미
BLOCKED 사용함 입출력 대기 중이지만, 메모리에 있음
SUSPENDED 아예 메모리에서 내려가서 디스크로 감
 

✔️ 둘 다 CPU는 사용하지 않지만,
BLOCKED는 "계속 대기 중인 상태",
SUSPENDED는 "잠시 메모리에서 퇴출당한 상태"입니다.

 

 

suspended 상태에서 다시 돌아오는 과정

suspended → ready 로 돌아오는 경우

  • 메모리가 부족해서 어떤 프로세스가 쫓겨났다고 했죠? (즉, 중기 스케줄러에 의해 suspended 상태로 바뀜)
  • 나중에 메모리 여유가 생기면, 운영체제가 suspended 상태였던 프로세스를 다시 메모리에 올릴 수 있습니다.
  • 이때, 프로세스의 상태는 다시 READY로 전환됩니다.

즉,
(메모리에 없던 suspended 상태)(메모리에 다시 올라가서 ready 상태)
이렇게 전이되는 것이 중기 스케줄러의 전형적인 작동 방식입니다.

 

💡 suspended는 꼭 중기 스케줄러 때문만은 아니다?

맞습니다. 그림에도 나오듯이, suspended 상태는 "외부적인 이유"로 메모리에서 내려가는 상태인데,
중기 스케줄러가 주요 원인이긴 하지만, 전부는 아닙니다.

예를 들어,

  • 사용자가 프로세스를 일시 정지할 수도 있고 (Ctrl + Z 같은 명령)
  • 운영체제가 특정 상황에서 일부러 정지시킬 수도 있습니다.

그래서 suspended 상태는 다음과 같이 나뉩니다:

suspended 상태                             의미
Ready Suspended 실행 준비는 되었지만, 메모리에 없어서 CPU를 못 받는 상태
Blocked Suspended 입출력도 기다리고 있지만, 메모리에 없어서 대기조차 못 하는 상태
 

 

전체 흐름 정리: 프로세스 상태 전이도

지금까지 배운 내용을 모두 하나의 흐름으로 정리하면 다음과 같습니다:

   +--------+     admitted     +--------+     dispatched     +---------+
   |  NEW   | ----------------> | READY  | -----------------> | RUNNING |
   +--------+                  +--------+                   +---------+
                                 |   ▲                          |
                                 |   |                          |
        swapped in               |   | timer/IO complete        |  IO/interrupt
    +----------------+           |   |                          |
    | Ready Suspended | <--------+   +--------------------------+
    +----------------+                                         |
                                                              \|/
                                                        +-------------+
                                                        |  BLOCKED    |
                                                        +-------------+
                                                              |
        swapped out       +------------------+               |
    +-----------------+<--| Blocked Suspended |<--------------+
    |                 |   +------------------+
    | (디스크에 저장됨) |
    +-----------------+

상태 설명:

NEW 새로 만들어진 프로세스. 아직 메모리에 안 올라감
READY 실행할 준비 완료. CPU만 기다림
RUNNING CPU를 받고 실행 중
BLOCKED IO 대기 중
SUSPENDED 외부 사유로 메모리에서 쫓겨나 디스크로 감
READY SUSPENDED 실행 준비는 되어 있지만 메모리에 없음
BLOCKED SUSPENDED 입출력도 대기하고, 메모리에도 없음
 

 

 

정리: 세 가지 스케줄러 요약표

구분 장기 스케줄러 중기 스케줄러 단기 스케줄러
하는 일 어떤 프로세스를 메모리에 올릴지 결정 메모리 부족 시 일부 프로세스를 디스크로 내림 어떤 프로세스가 CPU를 가질지 결정
작동 시점 프로세스 생성 직후 (NEW → READY) 메모리 부족 상황 아주 자주 (타이머 인터럽트 등)
관련 상태 변화 NEW → READY READY → SUSPENDED, BLOCKED → BLOCKED_SUSPENDED READY → RUNNING, RUNNING → READY