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 |