μΌλ ¨μ νλ‘μΈμ€λ€μ΄ μλ‘κ° κ°μ§ μμμ κΈ°λ€λ¦¬λ©° block λ μν
- νμ¬ μλ‘ μνλ μμμ΄ μλλ°©μκ² ν λΉλμ΄ μμ΄μ, νλ‘μΈμ€κ° 무νμ wait μνμ λΉ μ Έμλ κ².
- μ£Όλ‘ multi-programming νκ²½μμ νμ λ μμμ μ¬μ©νλ €κ³ μλ‘ κ²½μνλ μν©μμ λ°μνλ€.
- Deadlock == 'κ΅μ°© μν'
cf. multi-programming
- μ»΄ν¨ν°μμ μ¬λ¬ μμ μ λμμ μννλ κ²μ λ»νλ€.
- Multiprogrammingμ μ¬λ¬ νλ‘κ·Έλ¨μ΄ λ©λͺ¨λ¦¬μ μ¬λΌκ° μμμ κ°μ‘°
β λ°λλ½ λ°μμ νμ쑰건
- μλ 4κ°μ§ μ‘°κ±΄μ΄ λͺ¨λ λ§μ‘±λλ κ²½μ° λ°λλ½μ΄ λ°μν κ°λ₯μ±μ΄ μλ€.
- νλλΌλ λ§μ‘±νμ§ μμΌλ©΄ μ λ λ°μνμ§ μλλ€.
- Mutual exclusion(μνΈ λ°°μ )
- 맀 μκ° νλμ νλ‘μΈμ€λ§μ΄ μμμ μ¬μ©ν μ μλ€.
- νλμ processλ§μ΄ 곡μ μμ(shared resource)μ μ κ·Όν μ μλ€.
- No preemption (λΉμ μ )
- νλ‘μΈμ€λ μμμ μ€μ€λ‘ λ΄λλ κ²μ΄μ§ κ°μ λ‘ λΉΌμκΈ°λ κ²μ΄ μλλ€.
- νλ‘μΈμ€κ° taskλ₯Ό λ§μΉ ν 리μμ€λ₯Ό μλ°μ μΌλ‘ λ°νν λκΉμ§ κΈ°λ€λ¦°λ€. (κ°μ λ‘ λΉΌμμ§ μλλ€)
- Hold and wait (보μ λκΈ°)
- μμμ κ°μ§ νλ‘μΈμ€κ° λ€λ₯Έ μμμ κΈ°λ€λ¦΄ λ 보μ μμμ λμ§ μκ³ κ³μ κ°μ§κ³ μλ€.
- Circular wait (μνλκΈ°)
- Hold and wait κ΄κ³μ νλ‘μΈμ€λ€μ΄ μλ‘λ₯Ό κΈ°λ€λ¦¬λ μν
- μμμ κΈ°λ€λ¦¬λ νλ‘μΈμ€ κ°μ μ¬μ΄ν΄μ΄ νμ±λμ΄ μλ€.
- νλ‘μΈμ€ p0, p1, p2, ... , pn μ΄ μμ λ,
p0μ p1μ΄ κ°μ§ μμμ κΈ°λ€λ¦¬κ³ ,
p1μ p2κ° κ°μ§ μμμ κΈ°λ€λ¦¬κ³ ,
Pn-1μ Pnμ΄ κ°μ§ μμμ κΈ°λ€λ¦¬κ³ ,
Pnμ P0μ΄ κ°μ§ μμμ κΈ°λ€λ¦°λ€.
- μ¬μ μ κ΅μ°©μνκ° λ°μνμ§ μλλ‘ μ‘°μΉνκ±°λ, λ°μν λ€μ κ³ μΉλ λ°©λ²μ΄ μλ€. λνμ μΌλ‘ μλ μΈκ°μ§λ‘ λλλ€.
- 1.prevention, λ°©μ§
- μ¬μ μ κ΅μ°©μνκ° λ°μνμ§ μλλ‘ μ‘°μΉ
- 2.avoidence, ννΌ
- 리μμ€ ν λΉμ μΈ‘λ©΄μμ, κ΅μ°©μνκ° λ°μν κ°λ₯μ±μ΄ μλ μμ ν λΉ(unsafe allocation)μ νμ§ μλλ€.
- λνμ μΌλ‘
μνμ μκ³ λ¦¬μ¦, μμ ν λΉ κ·Έλν
κ° μλ€.
- λνμ μΌλ‘
- 리μμ€ ν λΉμ μΈ‘λ©΄μμ, κ΅μ°©μνκ° λ°μν κ°λ₯μ±μ΄ μλ μμ ν λΉ(unsafe allocation)μ νμ§ μλλ€.
- 3.Detection and Recovery, νμ§ λ° ν볡
- κ΅μ°©μνκ° λ°μνλ λ§λ λ λκ³ κ΅μ°©μνκ° λ°μ ν κ²½μ° μ°Ύμλ΄μ΄ κ³ μΉλ€.
- μμ ν λΉ μ Deadlockμ 4κ°μ§ νμ 쑰건 μ€μ μ΄λ νλκ° λ§μ‘±λμ§ μλλ‘ νλ κ²,
- μ μ΄λΆν° Deadlockμ΄ λ°μνμ§ μλλ‘.
-
μμ μμ²μ λν λΆκ°μ μΈ μ 보(eg.μ΅λν μ¬μ©ν MAX μμ)λ₯Ό μ΄μ©ν΄μ deadlockμ κ°λ₯μ±μ΄ μλ κ²½μ°μλ§ μμμ ν λΉ
-
μμ€ν state κ° μλ state λ‘ λμ μ¬ μ μλ κ²½μ°μλ§ μμ ν λΉ (eg. cpu, memory)
-
μμ λΉ μΈμ€ν΄μ€κ° νλμΌ λ -> Resource Allocation Graph algorithm
-
μμ λΉ μ¬λ¬ κ°μ μΈμ€ν΄μ€μΌ λ -> Banker's Algorithm
-> μμ λ κ°μ§ prevention => Utilization μ ν, throughput κ°μ, starvation λ¬Έμ
-> λ°λλ½μ λ°μμ μμ²μ μΌλ‘ λ§μ μ μμ§λ§, μμ£Ό μκΈ°μ§λ μμ λ°λλ½μ μκ°ν΄μ μ΄λ κ² μ μ½μ‘°κ±΄μ λ§μ΄ λ¬μλμΌλ©΄ μλΉν λΉν¨μ¨μ .
- Deadlock λ°μμ νμ©νλ κ·Έμ λν detection 루ν΄μ λμ΄ deadlock λ°κ²¬ μ recover
- λΉλ²ν λ°μνλ μ΄λ²€νΈκ° μλ λ°λλ½μ λ―Έμ°μ λ°©μ§νκΈ° μν΄μ λΉν¨μ¨μ μΈ λ°©λ²μ μΈ λ°μ,
λ λλ€κ° κ°μκΈ° μμ€ν μ΄ λλ €μ§κ±°λ μν©μ΄ μ΄μνλ€μΆμΌλ©΄, κ·Έ λ Deadlock detectionμ νκ³ recovery νλ λ°©λ²
- Deadlockμ μμ€ν μ΄ μ± μμ§μ§ μμ
- UNIXλ₯Ό ν¬ν¨ν λλΆλΆμ OSκ° μ±ν
κ΅μ°© μν ννΌ
μμ μμ²μ λν λΆκ°μ μΈ μ 보λ₯Ό μ΄μ©ν΄μ μΈμ λ safe stateλ₯Ό μ μ§νλ κ²
μμ€ν λ΄μ νλ‘μΈμ€λ€μ λν safe sequenceκ° μ‘΄μ¬ν΄μ, λͺ¨λ νλ‘μΈμ€κ° λκΉμ§ μνλ μ μλ μν.
cf. unsafe stateλΌκ³ ν΄μ deadlockμ μλλ€. κ·Έλ¬λ unsafe sateλ₯Ό λ§λ€μ§ μκ³ μΈμ λ safe stateλ₯Ό μ μ§ν΄μ λ°λλ½μ λ§λ€μ§ μκ² μμ νκ² κ°μλ κ²μ΄ Deadlock Avoidanceμ΄λ€. (-> λ―Έμ°μ λ°©μ§νλ κ²)
- μμ€ν μ΄ safe stateμ μμΌλ©΄ => no deadlock
- μμ€ν μ΄ unsafe stateμ μμΌλ©΄ => possibility of deadlock
- Deadlock Avoidance => μμ€ν μ΄ unsafe stateμ λ€μ΄κ°μ§ μλ κ²μ 보μ₯
- Single instance per resource types
- Resource Allocation Graph algorithm μ¬μ©
- Multiple instance per resource types
- Banker's algorithm μ¬μ©
- μμ per μΈμ€ν΄μ€ ν κ°.
- μ μ μ μ§κΈ μμ²μ ν κ²½μ°λ μλμ§λ§, μ΄ νλ‘μΈμ€κ° νμμ μ μ΄λ ν λ²μ μμ²ν μ μλ€λ μλ―Έ
- 3λ²μ§Έ κ·Έλ¦Όμ λ°λλ½μ΄ μλλ€. 1λ² νλ‘μΈμ€κ° μμ²ν μλ μμ§λ§ μ΄ μμ μ μμ²μ ν κ²μ μλκΈ° λλ¬Έμ μ€μ μΌλ‘ κ·Έλ €μ§λ©΄ λ°λλ½μ΄ λ°μν κ²½μ°μ΄λ€. μΈμ κ° 1λ² νλ‘μΈμ€κ° 2λ² λ¦¬μμ€λ₯Ό μμ ν λ°λ©νλ©΄ 2λ² νλ‘μΈμ€μκ² λ΄μ΄μ€ μ μμ κ²μ΄λ€.
- μμ per μ¬λ¬ κ° μΈμ€ν΄μ€.
- μνμ μκ³ λ¦¬μ¦ μ΄λΌκ³ λ λΆλ₯Έλ€.
- λ± μ»€μ€ μκ³ λ¦¬μ¦μ μ΄ νλ‘μΈμ€λ€μ΄ μμμ μμ²νμ λ, κ·Έ μμ²μ λ°μλ€μΌ κ²μΈμ§ μμ κ²μΈμ§λ§ κ²°μ νλ μκ³ λ¦¬μ¦μ΄λ€.
- (κ°μ©μμμΌλ‘ μ΅λ μμ²μμ(Max)μ΄ μΆ©μ‘±λλμ§μ μ¬λΆμ λ°λΌμ, μΈμ κ° κ°μ©μμμΌλ‘ μΆ©μ‘±λ λ κ·Έ νλ‘μΈμ€μ μμ²μ λ€μ΄μ€λ€.)
- Allocationμ μ΄λ―Έ ν λΉ λ κ²
- Availableμ μ무λ μ¬μ©νμ§ μκ³ μλ κ°μ© μμ
- Maxλ ν΄λΉ νλ‘μΈμ€κ° μ΅λλ‘ μμμ μμ²ν λμ κ°μ
- Needλ μΌλ§λ λ μ΅λλ‘ μμ²ν μ μλμ§ (Max-Allocation)
- μνμ μκ³ λ¦¬μ¦μ μ²μμ μ΅λλ‘ μΌλ§λ μμμ μ¬μ©ν μ§(max) declare νλ€.
- κ°μ©μμ(Available)μ΄ Allocationμ μΆ©μ‘±μν€μ§ λͺ»νλ€κ³ ν΄μ λ°λλ½μ μλλ€.
- νμ¬ Allocation λ°μ μμμ λ€ μ°κ³ λ°λ©ν μλ μκ³ , κ°μ§κ³ κ·Έλλ‘ κ° μλ μκΈ° λλ¬Έμ΄λ€.
- κ·Έλ¬λ λ± μ»€μ€ μκ³ λ¦¬μ¦μ κ΅μ₯ν 보μμ μΌλ‘, μ λ λ°λλ½μ λ°μμν€μ§ μμΌλ €λ μκ³ λ¦¬μ¦μ΄λ€. (λ safe stateλ₯Ό μ μ§νλ €κ³ νλ)
- μ΅λ μμ²μ λ°μ μν©μ κ³ λ €νκ³ , κ·Έ μ΅λ μμ²μ΄ νμ¬ κ°μ©μμμΌλ‘ μΆ©μ‘±λλκ°λ₯Ό λ κ³ λ €νλ€.
- μ΅λ μμ²ν μ μλ μμμ κ°μλ Needλ₯Ό λ²μ΄λμ§ μλλ€.
- κ°μ©μμκ³Ό νλ‘μΈμ€μκ² λ°λ©λ°μ μμμ κ°μ§κ³ μ΅λμμ²νλ μμμ λ€ λ§μ‘±μν€λ©° νλ‘μΈμ€λ₯Ό λκΉμ§ μ€νμν¬ μ μλ μμκ° μ‘΄μ¬νλ©΄, safe μνλΌκ³ λ³Ό μ μλ€.
- μ κ·Έλ¦Όμ κ²½μ° sequence <P1, P3, P4, P2, P0> μ΄ μ‘΄μ¬νλ―λ‘ safe state.
- λ± μ»€μ€ μκ³ λ¦¬μ¦μ deadlockμ λ°μνμ§ μλλ€.
- κ·Έλ¬λ μ λ°μνμ§λ μλ λ°λλ½μ λ―Έμ°μ λ°©μ§νκΈ° μν΄μ μ 곡ν μμμ΄ μμμλ λΆκ΅¬νκ³ μ΅λ μμ²μμμ λ κ³ λ €ν΄μ μ 곡νμ§ μκΈ°μ κ΅μ₯ν λΉν¨μ¨μ μ΄λ€.
μμ λΉ μΈμ€ν΄μ€κ° νλμΌ λ κ·Έλνλ₯Ό, μ¬λ¬ κ°μΌ λ ν μ΄λΈμ μ¬μ©νλ€. (κ·Έλ¬λ νλμΌ λλ ν μ΄λΈ μ¬μ©κ°λ₯νλ€.)
- μ¬κΈ°μλ μ΅λ μμ²μμμ μ νμ μλ€.
- λ°λλ½μΈμ§ νλ³νλ €λ©΄, μκΉμ λ€λ₯΄κ² μν©μ λκ΄μ μΌλ‘ 보면 λλ€.
- 0λ² νλ‘μΈμ€λ μΆκ°λ‘ μμ²ν μ λ μμ§λ§ B 1κ°λ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ λ°λ©ν κ±°λΌ κ³ λ €.
- 2λ² νλ‘μΈμ€λ μΆκ°λ‘ μμ²ν κ² μμΌλκΉ μΌλ¨ λ°λ©νλ€κ³ κ°μ νκ³ κ·ΈλΌ 3,1,3 κ°κ° μκΈ΄λ€.
- κ·Έλ¬λ©΄ 1λ² νλ‘μΈμ€κ° κ°μ©μμμΌλ‘λΆν° λ°μμ, μΆκ°λ‘ μμ²ν μλ μμ§λ§ μΌλ¨ μ°κ³ λμ λ°λ©νλ€κ³ κ°μ .
- 4λ²λ λ§μ°¬κ°μ§λ‘ κ°μ©μμμ λ°μμ μμ²λ κ²λ€μ μ λΆ νμ©μ νκ³ λ°λ©μ ν΄μ
- μμ²μ λ€ λ°μλ€μ΄λ μνμ€κ° μ‘΄μ¬νλ©΄ λ°λλ½μ΄ μλ€κ³ λ³Έλ€.
- λ°λλ½μΈμ§ νλ³νκΈ° μν΄μλ, κ°μ©μμμ λ³΄κ³ μ²λ¦¬ν μ μλ νλ‘μΈμ€κ° μλμ§λ₯Ό λ³Έλ€.
- μμ²νμ§ μμ νλ‘μΈμ€λ€μ(requestκ° μλ) κ°μ©μμμΌλ‘ ν©μ³λκ³ , κ·Έκ±Έ κ°μ§κ³ μ²λ¦¬κ°λ₯ν νλ‘μΈμ€κ° μλ€λ©΄ μ²λ¦¬νκ³ λ°λ©λ°μΌλ©΄μ λκΉμ§ κ° μ μλμ§λ₯Ό 체ν¬ν΄λ³΄λ©΄ λλ€.
- λ§μ½μ Deadlockμ΄ λ°μνλ©΄, Recoveryλ₯Ό νλ€.
λ°λλ½μ΄ detectionλμ recoveryλ₯Ό ν μ μλ,
Process termination
: λ°λλ½μ μ°λ£¨λ λͺ¨λ νλ‘μΈμ€λ₯Ό μ¬μ΄νλ λ°©μμ΄ μλ€.Resource Preemption
: λ°λλ½μ μ°λ£¨λ νλ‘μΈμ€λ₯Ό νλμ© μ£½μ¬λ³΄λ κ². λ°λλ½μ΄ μμ΄μ§ λκΉμ§.
νΉμ ν νλ‘μΈμ€λ₯Ό λΉμ© μ μ₯μμ κ³ λ €ν΄μ κ³μ κ·Έ νλ‘μΈμ€λ§ μμμ λΊκ²¨μΌνλ€λ©΄ κ·Έ νλ‘μΈμ€λ§ κ³μ rollback λμΌνλ―λ‘ starvation λ¬Έμ κ° λ°μλ μ μκΈ° λλ¬Έμ νμλ₯Ό κ³ λ €νλ€.
- Deadlockμ΄ μΌμ΄λμ§ μλλ€κ³ μκ°νκ³ μλ¬΄λ° μ‘°μΉλ μ·¨νμ§ μλ λ°©μ.
- λ§€μ° λλ¬Όκ² λ°μνλ Deadlockμ λν μ‘°μΉ μμ²΄κ° λ ν° overheadμΌ μ μκΈ° λλ¬Έμ΄λ€.
- λ§μ½ μμ€ν μ deadlockμ΄ λ°μν κ²½μ°μλ, μμ€ν μ΄λ osμμ λμ²νλ κ²μ΄ μλλΌ μ¬λμ΄ λΉμ μμ μΈ μμ€ν μ λλ ν μ§μ processλ₯Ό μ£½μ΄λ λ±μ λ°©λ²μΌλ‘ λμ²νλ€.
- UNIX λ₯Ό ν¬ν¨ν λλΆλΆμ λ²μ© OSμμ μ±νν λ°©μ.
- κ΅μ°©μν(Deadlock)κ° λ¬΄μμ λκΉ?
- λ°λλ½μ 4κ°μ§ νμ쑰건 μ λν΄ μ€λͺ νμΈμ.
- κ΅μ°© μν ν΄κ²° λ°©λ²μ μ€λͺ νμΈμ.
- Banker's algorithm μ 무μμ λκΉ?