Notice
Recent Posts
Recent Comments
Link
변수의 기록
(OS) 자바 스레드의 상태 – OS 프로세스 상태 비교 본문
자바 스레드의 상태 – OS 프로세스와 어떻게 다를까?
멀티스레드 프로그래밍을 하다 보면, Runnable, Blocked, Waiting 같은 자바 스레드 상태들이 헷갈릴 수 있습니다.
운영체제(OS)의 프로세스 상태와도 비슷한 듯 다른 이 구조, 이번 글에서 명확하게 정리해보겠습니다.
1. OS의 프로세스 상태 (Process States in OS)
운영체제에서 프로세스는 기본적으로 다음과 같은 상태를 가집니다:
상태 | 설명 |
New | 프로세스가 막 생성됨 (아직 실행 준비 X) |
Ready | 실행 준비 완료, CPU 할당을 기다림 |
Running | CPU에서 실행 중 |
Waiting (Blocked) | I/O 등 외부 자원을 기다리며 대기 |
Terminated | 실행 완료 후 종료됨 |
특징:
- CPU 중심적인 상태 변화
- 실행 준비 / 실행 중 / 자원 대기 상태 중심으로 설계됨
예시)
사용자 실행 → new
→ ready
→ CPU 할당 → running
→ (타임슬라이스 끝) → ready
→ (다시 실행) → running
→ (I/O 요청) → waiting
→ (I/O 완료) → ready
→ running
→ exit → terminated
OS 프로세스 생명주기 – 상태 흐름으로 이해하기 (예시 - 메모장)
1. New 상태
- 설명: 프로세스가 막 생성된 상태 (아직 실행 허가 전)
- 예시: 사용자가 메모장 아이콘을 클릭해 실행을 요청한 순간
- 전이: OS가 실행을 허가하면 Ready 상태로 전환 (admitted)
** new 상태는 OS 마다 다름 리눅스는 거의 바로 ready로 상태 변경
2. Ready 상태
- 설명: 실행에 필요한 자원을 할당받고, CPU만 기다리는 상태
- 예시: 메모장, 계산기, 크롬 등 여러 프로세스가 실행 대기열에 있는 상태
- 전이: 스케줄러가 CPU를 할당하면 Running 상태로 전환
3. Running 상태
- 설명: 실제로 CPU를 점유하여 명령어를 수행 중인 상태
- 예시: 메모장에 입력 중, 계산기에서 연산 수행 중
상태 전이 분기
전이 원인 | 다음 | 상태설명 및 예시 |
타임슬라이스 종료 | Ready | 일정 시간 동안 실행한 뒤 CPU 반납 (interrupt) |
I/O 요청 | Waiting | 디스크 읽기, 네트워크 응답 등 I/O 작업 요청 (I/O or event wait) |
프로세스 종료 | Terminated | 모든 작업 완료 후 종료 (exit) |
4. Waiting 상태
- 설명: CPU를 사용하지 않고, I/O 등의 이벤트를 기다리는 상태
- 예시: 사용자가 파일을 열었고, 디스크에서 데이터를 불러오는 중
- 전이: 이벤트가 완료되면 다시 Ready 상태로 복귀 (I/O or event completion)
5. Terminated 상태
- 설명: 프로세스 실행이 완료되어 종료된 상태. OS가 자원 회수 및 정리 수행
- 예시: 메모장 종료, 실행 파일이 정상적으로 끝난 상태
2. 자바의 스레드 상태 (Thread States in Java)
자바는 좀 더 객체지향적이고 고수준의 개념으로 스레드 상태를 정의.
총 6가지로 구성되어 있으며, wait/notify, sleep, 락 획득 대기 등 다양한 동기화 상황까지 포괄.
상태 | 설명 |
New | Thread 객체가 생성되었으나 아직 start()되지 않은 상태 |
Runnable | 실행 준비 완료 → JVM은 OS 스케줄러에 맡김 실제로 CPU를 점유 중이거나 점유 대기 중 |
Blocked | synchronized 블록(모니터락)을 점유하려다 다른 스레드가 이미 점유 중이라 대기 중인 상태 |
Waiting | 다른 스레드의 작업을 무기한 기다리는 상태 ex) Object.wait(), Thread.join() |
Timed Waiting | 일정 시간만 대기 후 자동 해제됨 ex) Thread.sleep(), join(timeout), wait(timeout) |
Terminated | 스레드 실행 종료 |
자바 스레드 상태별 핵심 개념 정리
🔸 Runnable
- 실제 CPU에서 실행 중이거나, 실행 대기 중
- OS의 Ready + Running 상태와 유사
- synchronized 블록 외에서는 대부분 이 상태
🔸 Blocked
- 다른 스레드가 모니터락을 점유 중일 때,
해당 락을 기다리며 진입 불가 → Blocked - ex) synchronized 진입 실패 시
🔸 Waiting
- 다른 스레드의 signal 없이 절대 깨어나지 않음
- ex) obj.wait(), Thread.join()
🔸 Timed Waiting
- 일정 시간이 지나면 자동 복귀
- ex) sleep(1000), wait(5000)
🔸 New & Terminated
- 시작 전과 종료 후 상태로, OS 개념과 동일
synchronized와 모니터(Monitor)의 관계
자바에서 synchronized는 **객체에 내장된 모니터락(Monitor Lock)**을 사용하는 구조입니다.
- 객체 단위로 **뮤텍스(Mutex)**가 존재한다고 보면 됨
- synchronized 진입 시 → 해당 객체의 모니터 락을 획득
- 이미 다른 스레드가 모니터를 점유 중이면 → Blocked 상태로 대기
📌 그래서 흔히 말하는:
"뮤텍스를 쥐고 간다" = 객체의 모니터 락을 점유했다는 뜻입니다.
✅ OS 상태와 자바 상태 비교 정리
구분 | OS 프로세스 상태 | 자바 스레드 상태 | 대응 |
시작 전 | New | New | ✔ |
실행 대기 | Ready | Runnable | ✔ |
실행 중 | Running | Runnable | ✔ (JVM+OS 스케줄링 포함) |
자원 대기 | Waiting | Waiting / Timed Waiting / Blocked | ✔ (더 세분화됨) |
종료 | Terminated | Terminated | ✔ |
자바와 디테일한 비교
상태 | 설명 | OS 상태와의 비교 | 예시 |
New | Thread t = new Thread(); 생성됨 (아직 start() 안됨) | OS: New | 객체만 존재, 실행 요청 전 |
Runnable | 실행 준비 완료 or 실행 중 (JVM이 스케줄러에게 맡김) | OS: Ready + Running 통합 개념 | start() 호출됨, CPU 점유 여부는 JVM/OS에 따라 |
Blocked | synchronized 사용 중 다른 스레드가 락을 점유 중이라 진입 실패 → 대기 | OS: Waiting (락 대기) | synchronized(lock) 진입 못함 |
Waiting | 무한 대기 (wait(), join() 등) → 다른 스레드가 신호 주기 전까지 깨어나지 않음 | OS: Waiting | Thread.join(), obj.wait() |
Timed Waiting | 제한 시간 동안 대기, 이후 자동 복귀 | OS: Waiting | sleep(1000), join(5000), wait(1000) |
Terminated | 스레드 실행 종료됨 | OS: Terminated | run() 메서드 종료됨 |
마무리
자바는 OS의 스케줄링 개념 위에, **자바 내부의 동기화 구조 (wait/notify, synchronized 등)**를 덧붙여
스레드 상태를 더 세밀하게 표현합니다.
이해 포인트는 다음과 같습니다:
- Runnable은 CPU 실행 중일 수도 있고 아닐 수도 있음
- Blocked는 락(모니터) 점유 실패로 인한 대기 상태
- Waiting / Timed Waiting은 다른 스레드의 완료나 시간 제한을 기다리는 상태
- synchronized는 객체 단위로 모니터락을 이용한 **상호배제(Mutual Exclusion)**의 대표적인 구현
'CS지식 > 운영체제 (Operating System)' 카테고리의 다른 글
(OS) 유저 모드와 커널 모드, 그리고 인터럽트와 시스템 콜 (예제 있음) (1) | 2025.04.13 |
---|---|
(OS) CPU 스케줄러와 디스패처, 그리고 스케줄링 알고리즘 총정리 (0) | 2025.04.13 |
(OS) 데드락이란? (발생조건 , 해결방안 포함) (0) | 2025.04.12 |
(CS) 모니터(Monitor)란? (컴퓨터 모니터 아님.) synchronized (0) | 2025.04.11 |
(CS 운영체제) 동기화 (기본) (0) | 2025.04.07 |