κΈ°λ³Έμ μΈ OS νλ‘μΈμ€μ μνμ μ μ΄ κ³Όμ
μ΄μ체μ μμ νλ‘μΈμ€(Process)λ μ€ν μ€μΈ νλ‘κ·Έλ¨μ μλ―Ένλ©°, νΉμ ν μν(state)λ₯Ό κ°μ§λ©΄μ μ€ν νλ¦μ μ΄μ΄κ°λ€.
μλλ λνμ μΈ νλ‘μΈμ€ μν μ μ΄ κ³Όμ μ λν μ 리 λ΄μ©μ΄λ€.
1. NEW → READY
- νλ‘μΈμ€κ° μ²μ μμ±λλ©΄ NEW μνλ‘ μμνλ€.
- OSκ° μ΄ νλ‘μΈμ€λ₯Ό μ€λΉ μνλ‘ μ¬λ¦¬λ©΄, READY μνκ° λλ€.
β READY μνλ?
CPUμμ μ€νλ μ€λΉλ λμμ§λ§, μμ§ CPUλ₯Ό λ°°μ λ°μ§ λͺ»ν μνμ΄λ€.
2. READY → RUNNING
- μ€μΌμ€λ¬μ μν΄ μ΄ νλ‘μΈμ€μκ² CPUκ° ν λΉλλ©΄, RUNNING μνλ‘ μ μ΄λλ€.
- RUNNING μνλ νλ‘μΈμ€λ μ€μ λ‘ CPU μμμ λͺ λ Ήμ΄λ₯Ό μ€ν μ€μΈ μνμ΄λ€.
3. RUNNING → READY (νμμ¬λΌμ΄μ€ λ§λ£)
- νλ‘μΈμ€λ ν λΉλ time slice(CPU μ¬μ© μκ°)λ₯Ό λ€ μ¬μ©νλ©΄, READY μνλ‘ λμκ°λ€.
- μ΄λ μ μ ν(preemptive) μ€μΌμ€λ§ νκ²½μμ νν λ°μνλ λμμ΄λ€.
β μ RUNNINGμμ λ€μ READYλ‘ κ°λ κ±ΈκΉ?
CPUλ₯Ό λ μ νμ§ μκ³ , λ€λ₯Έ νλ‘μΈμ€μκ²λ CPUλ₯Ό μ보νκΈ° μν΄μμ΄λ€
4. RUNNING → WAITING (I/O λλ λκΈ°ν λκΈ°)
- μ€ν μ€μ΄λ νλ‘μΈμ€κ° I/O μμ
μ μμ²νκ±°λ,
λλ μκ³ κ΅¬μ(critical section)μ μ§μ ν΄μΌ νλλ° λ½(lock)μ νλνμ§ λͺ»ν κ²½μ°,
WAITING μνλ‘ μ μ΄λλ€.
5. WAITING → READY
- κΈ°λ€λ¦¬λ μμ
μ΄ μλ£λκ±°λ(μ: λμ€ν¬ I/O μλ£),
μκ³ κ΅¬μ μ§μ μ‘°κ±΄μ΄ λ§μ‘±λλ©΄, νλ‘μΈμ€λ λ€μ READY μνκ° λλ€. - μ΄λμλ λ°λ‘ μ€νλμ§ μκ³ , μ€μΌμ€λ¬κ° λ€μ CPUλ₯Ό λ°°μ ν λκΉμ§ κΈ°λ€λ¦°λ€.
β WAITING → RUNNINGμΌλ‘ λ°λ‘ μ μ΄λμ§ μλ μ΄μ λ?
λͺ¨λ μ€νμ νμ μ€μΌμ€λ¬μ νλ¨μ κ±°μ³μΌ νκΈ° λλ¬Έμ΄λ€.
6. RUNNING → TERMINATED
- νλ‘μΈμ€μ μ€νμ΄ λͺ¨λ λλ¬κ±°λ, μμΈ(Exception) λ±μΌλ‘ λΉμ μ μ’ λ£λλ κ²½μ°, TERMINATED(μ’ λ£ μν)λ‘ μ μ΄λλ€.
- μ΄ μμ λΆν° OSλ ν΄λΉ νλ‘μΈμ€μ μμ(λ©λͺ¨λ¦¬ λ±)μ ν΄μ ν μ€λΉλ₯Ό νλ€.
π μ°Έκ³
- μ€λ λμ μν μ μ΄ νλ¦μ 컀λ μμ€μμ νλ‘μΈμ€μ κ±°μ λμΌν λ°©μμΌλ‘ μ²λ¦¬λλ€.
- νμ§λ§ κ° μνμ μ΄λ¦μ΄λ μΈλΆ λμ λ°©μμ μ΄μ체μ μ’ λ₯(Windows, Linux λ±)μ λ°λΌ μ½κ°μ© λ€λ₯Ό μ μλ€.
- μλ₯Ό λ€μ΄, μΌλΆ OSλ Ready, Blocked, Suspended λ±μ μ©μ΄λ₯Ό λ€λ₯΄κ² μ μνκ±°λ λΆλ¦¬ν΄μ μ¬μ©νκΈ°λ νλ€.
State of Java Thread
νλ‘κ·Έλλ° μΈμ΄λ§λ€ μ€λ λμ μνλ₯Ό μ μνλ λ°©μμ μλ‘ λ€λ₯΄κΈ° λλ¬Έμ, μ¬κΈ°μμλ Javaμ μ€λ λ μνλ₯Ό μ΄ν΄λ³΄μ.
μλ° μ€λ λ μνλ JVM(Java Virtual Machine)μ΄ Java νλ‘κ·Έλ¨μ λ³΄κ³ νλ μνλ₯Ό μλ―Ένλ©°, μ΄λ μ΄μ체μ (OS)μ μ€λ λ μνλ₯Ό μ§μ μ μΌλ‘ λ°μνλ κ²μ μλλ€. μ¦, λ μΆμνλ μνλ₯Ό μ 곡νλ€.
μλ°μλ java.lang.Thread ν΄λμ€ λ΄λΆμ StateλΌλ μ΄λ¦μ EnumμΌλ‘ μ΄ 6κ°μ μ€λ λ μνκ° μ μΈλμ΄ μλ€.
μλ° μ€λ λμ μν μ’ λ₯
- NEW: μ€λ λκ° μμ±λκ³ λμ μμ§ μ€νλμ§ μμ μν
- RUNNABLE: JVM κ΄μ μμ μ€ν μ€μΈ μν
- νμ¬ CPUμμ μ€ν μ€μ΄κ±°λ, OSμ μ€μΌμ€λ§μ λ°λΌ CPU μ μ λκΈ° μ€μΈ κ²½μ°λ RUNNABLE μνμ΄λ€.
- μ¦, OSμ RUNNINGκ³Ό READY μνλ₯Ό ν¬κ΄νλ€. IO μμ μ κ²°κ³Όλ₯Ό κΈ°λ€λ¦¬λ κ²½μ°λ μ΄ μνμΈ κ²μ΄λ€.
- OSμ RUNNING μνμ λΉν΄ Javaμ RUNNABLE μνλ ν¨μ¬ ν¬κ΄μ μ΄λ€.
- BLOCKED: Critial sectionμΌλ‘ λ€μ΄κ°λ €κ³ Monitorλ₯Ό μ»κΈ° μν΄ κΈ°λ€λ¦¬λ μν
- WAITING: λ€λ₯Έ μ€λ λκ° νΉμ μμ
μ ν΄μ€ λκΉμ§ μμν κΈ°λ€λ¦¬λ μν(timeout μμ)
- Object.wait(), Thread.join(), LockSupport.park() λ©μλ λ±μ ν΅ν΄ μ΄ μνλ‘ μ§μ νμ¬ λκΈ°νλ μνκ° λλ€.
- Object.wait()λ₯Ό νΈμΆν μ€λ λλ → λ€λ₯Έ μ€λ λκ° κ°μ κ°μ²΄μ λν΄ notify() λλ notifyAll()μ νΈμΆν΄μ£ΌκΈ°λ₯Ό κΈ°λ€λ¦Ό.
- Thread.join()μ νΈμΆν μ€λ λλ → μ§μ λ λ€λ₯Έ μ€λ λκ° μ’ λ£λ λκΉμ§ κΈ°λ€λ¦Ό.
- TIMED_WAITING: μ ν μκ°λμ λκΈ°νλ μν
- μ΅λ λκΈ° μκ°μ λͺ μν μ μλ€λ κ²μ΄ WAITING μνμμ μ°¨μ΄μ μ΄λ€.
- λ€μ λ©μλ νΈμΆλ‘ μΈν΄ μ§μ
ν¨ (λͺ¨λ μκ° μ ν μμ):
- Thread.sleep(sleeptime)
- Object.wait(timeout)
- Thread.join(timeout)
- LockSupport.parkNanos(timeout)
- LockSupport.parkUntil(timeout)
- TERMINATED: μ€νμ λ§μΉκ³ μ’ λ£λ μν
- μ κ·Έλ¦Όμ μλ Readyμ Running μνλ μλ°μ λ κ±°μ μνμΈλ°, μ΄ν΄μ νΈμλ₯Ό μν΄ Runnableμ substatesλ‘ μΆκ°ν κ²μ΄λ€.
'π» Computer Science > Operating System' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[OS] λ©ν°νλ‘κ·Έλλ°, λ©ν°νμ€νΉ, λ©ν°μ€λ λ©, λ©ν°νλ‘μΈμ± (0) | 2025.04.07 |
---|---|
[OS] π λκΈ°νμ λ½ λ§€μ»€λμ¦μ λν΄ μΉ μ 리ν΄λ³΄μ! (2) | 2025.03.24 |