λ°λλ½(κ΅μ°©μν)
λ μΌλ ¨μ νλ‘μΈμ€λ€μ΄ κ°μ μμμ μ μ νκ³ μλ μνμμ μλ‘κ° μλ‘μ μμμ μ κ·ΌνκΈ° μν΄ blockingλ μν(무νμ λκΈ° μν)μ΄λ€.
- μμμ νλμ¨μ΄, μννΈμ¨μ΄ μμμ ν¬ν¨νλ κ°λ μ΄λ€. (IO device, CPU cycle, Memory Space, Semaphore λ±)
μνΈ λ°°μ (Mutual Exclusion)
: μμμ 맀 μκ° νλμ νλ‘μΈμ€λ§ μ¬μ©ν μ μμ΄μΌ νλ€. (λ μ )λΉμ μ (No Preemption)
: νλ‘μΈμ€λ μμμ μ€μ€λ‘ λ°λ©ν λΏ κ°μ λ‘ λΉΌμκΈ°μ§ μλλ€.μ μ λκΈ°(Hold and Wait)
: μμμ κ°μ§ νλ‘μΈμ€κ° μ΄λ₯Ό λ°λ©νμ§ μκ³ λ λ€λ₯Έ μμμ κΈ°λ€λ¦΄ μ μλ€.μν λκΈ°(Circular Wait)
: μμμ κΈ°λ€λ¦¬λ νλ‘μΈμ€λ€ κ°μ μ¬μ΄ν΄μ΄ νμ±λλ€. (p0λ p1μ΄ κ°μ§ μμμ κΈ°λ€λ¦¬κ³ , p1μ p2κ° κ°μ§ μμμ κΈ°λ€λ¦¬κ³ , ... , pnμ p0κ° κ°μ§ μμμ κΈ°λ€λ¦°λ€)
Deadlock Prevention
(λ°λλ½ μλ°©)Deadlock Avoidance
(λ°λλ½ ννΌ)Deadlock Detection and recovery
(λ°λλ½ κ°μ§ λ° ν볡)Deadlock Ignorance
(λ°λλ½ λ¬΄μ)
λ°λλ½ λ°μ 4κ°μ§ 쑰건 μ€ νλλ₯Ό μ κ±°ν¨μΌλ‘ λ°λλ½μ ν΄κ²°νλ λ°©λ²
μνΈ λ°°μ λΆμ
: μ¬λ¬ νλ‘μΈμ€κ° 곡μ μμμ μ¬μ©νλλ‘ νλ€.- λ¨, 곡μ ν΄μλ μλλ μμμ μνΈ λ°°μ 쑰건μ λ§μ‘±μμΌμΌ νλ€.
λΉμ μ λΆμ
: 보μ μμμ κ°μ§ νλ‘μΈμ€κ° λ€λ₯Έ μμμ κΈ°λ€λ¦¬λ κ²½μ°, ν΄λΉ 보μ μμμ΄ λ€λ₯Έ νλ‘μΈμ€μ μν΄ μ μ λλλ‘ νλ€.- λ¨, νλ‘μΈκ° μνλ₯Ό save & restoreν μ μλ μμλ§ μ μ λλλ‘ ν΄μΌ νλ€
보μ λκΈ° λΆμ
: νλ‘μΈμ€κ° μμμ μμ²ν λ λ€λ₯Έ μ΄λ€ μμλ κ°μ§κ³ μμ§ μμμΌ νλ€.- λ°©λ²1 : νλ‘μΈμ€ μμ μμ ν΄λΉ νλ‘μΈμ€κ° νμν βλͺ¨λ β μμμ ν λΉλ°κ² νλ λ°©λ² (λΉν¨μ¨μ )
- λ°©λ²2 : μμμ΄ νμν κ²½μ° λ³΄μ μμμ λͺ¨λ λκ³ λκΈ°νλ λ°©λ²
μν λκΈ° λΆμ
: λͺ¨λ μμ μ νμ ν λΉ μμλ₯Ό μ νμ¬ μμλλ‘λ§ μμμ ν λΉνλλ‘ νλ€.- νλ‘μΈμ€κ° μμκ° 3μΈ μμμ 보μ νκ³ μμ λ, μμκ° 1μΈ μμμ ν λΉλ°μΌλ €λ©΄ μμκ° 3μΈ μμμ λ°λ©ν΄μΌ νλ€. (1β 3μ μμ)
μλ°© λ°©λ²μ μ¬μ©νκ² λ λ λ°μνλ λ¬Έμ μ β utilization μ ν(system μ μ₯), throughput κ°μ(system μ μ₯), starvation λ¬Έμ (process μ μ₯)
λ°λλ½μ λ°μ κ°λ₯μ±μ΄ μλ κ²½μ°μλ§ μμμ ν λΉνλ λ°©λ².
- νΉμ μμμ ν λΉν΄μ£Όμ΄λ μμ€ν μ΄ μ¬μ ν safe stateνμ§ νμΈνλ―λ‘μ¨ λ°λλ½μ κ°λ₯μ±μ νμΈν μ μλ€.
1. νλ‘μΈμ€κ° μμaλ₯Ό μꡬνλ€.
2. μμ€ν
μ μμaλ₯Ό ν λΉν΄μ€ κ²½μ°, μμ€ν
μ μνκ° safeνμ§ νμΈνλ€.
2-1. safeνλ€λ©΄ μμaλ₯Ό ν λΉν΄μ€λ€.
2-2. unsafeνλ€λ©΄ λ€λ₯Έ νλ‘μΈμ€λ€μ΄ μμμ λ°νν λκΉμ§ μμaλ₯Ό ν λΉν΄μ£Όμ§ μλλ€.
safe stateλ
μμ€ν λ΄μ νλ‘μΈμ€λ€μ΄ safe sequenceλ₯Ό μ΄λ£¨λ μνμ΄λ€.
- μμ€ν μ΄ safe stateνλ€λ©΄ λ°λλ½μ΄ λ°μνμ§ μλλ€.
- μμ€ν μ΄ unsafe stateνλ€λ©΄ λ°λλ½μ΄ λ°μνλ€.
safe sequenceλ
νλ‘μΈμ€μ sequence<P1, P2 ,... Pn>κ° safeν κ²½μ° ν΄λΉ νλ‘μΈμ€ sequnceλ₯Ό βsafe sequenceνλ€βλΌκ³ λ§νλ€.
- safe sequenceλ₯Ό λ§μ‘±νλ €λ©΄ νλ‘μΈμ€ Pi(1 β€ i β€ n)μ μμ μμ²μ΄
κ°μ© μμ + λͺ¨λ νλ‘μΈμ€ Pj (j < i)μ 보μ μμ
λ³΄λ€ μ μ΄μΌ νλ€ - λ€μ λ§ν΄,
Pn νλ‘μΈμ€κ° νμ¬ νμν μμ
<μ 체 κ°μ©μμ + P1 ~ Pn-1 νλ‘μΈμ€κ° λμ€μ λ°λ©ν μμ
μ λ§μ‘±νλ νλ‘μΈμ€ sequenceλ₯Ό βsafe sequenceβλΌκ³ ν μ μλ€.
Deadlock Avoidance μκ³ λ¦¬μ¦
-
μμ μ ν λΉ μΈμ€ν΄μ€κ° 1κ°
μΈ κ²½μ° βResource Allocation Graph μκ³ λ¦¬μ¦
μ μ¬μ©νλ€.νμ΄ν μλ―Έ
- μ μ νμ΄ν(claim edge) : νλ‘μΈμ€κ° μ μ΄λ ν λ² μ΄μ μμμ μ¬μ©νλ€λ μλ―Έ
- νλ‘μΈμ€ β μμμΌλ‘ κ°λ μ€μ νμ΄ν(request edge) : νμ¬ νλ‘μΈμ€κ° μμμ μꡬνλ μν
- μμ β νλ‘μΈμ€λ‘ κ°λ μ€μ νμ΄ν(asignment edge) : μμμ΄ νλ‘μΈμ€μκ² ν λΉλ μν
μκ° λ³΅μ‘λ
- cycle μμ± μ¬λΆ μ‘°μ¬μ νλ‘μΈμ€μ μκ° nμΌ λ O(n^2) μκ°μ΄ κ±Έλ¦°λ€.
κ°μ₯ μ€λ₯Έμͺ½ κ·Έλ¦Όμ 보면 Cycleμ΄ νμ±λμ΄μμ§λ§ λ°λλ½μ΄ λ°μν건 μλλ€. λ§μ½ P1μ΄ R2λ₯Ό μꡬνλ€λ©΄ μ μ μ΄ μ€μ μΌλ‘ λ°λκ³ λ°λλ½μ΄ νμ±λλ€. μ¦, P1μκ² μμ R2λ₯Ό ν λΉν΄μ£Όλ©΄ μμ€ν μ΄ unsafeν μνκ° λλ―λ‘ ν λΉν΄μ£Όμ§ μλλ€.
-
μμ μ ν λΉ μΈμ€ν΄μ€κ° μ¬λ¬ κ°
μΈ κ²½μ° βBankerβs μκ³ λ¦¬μ¦
μ μ¬μ©νλ€Banker's μκ³ λ¦¬μ¦μ κ°μ
- λͺ¨λ νλ‘μΈμ€λ μ΅λλ‘ μ¬μ©ν μμμ μμ 미리 λͺ μνλ€ (Max)
- νλ‘μΈμ€κ° μμμ ν λΉλ°μ κ²½μ° μ ν μκ°λ΄μ λ€μ λ°λ©νλ€
Banker's μκ³ λ¦¬μ¦ λ°©μ
- μμ€ν
μ΄ safe stateλ₯Ό μ μ§ν κ²½μ°μλ§ μμμ ν λΉν΄μ€λ€.
νλ‘μΈμ€μ μ΄ μμ² μμμ μ(Need) > μμ€ν μ κ°μ© μμμ μ(Available)
νλ€λ©΄ unsafeν μνμ΄λ€. β ν΄λΉ νλ‘μΈμ€μκ² μμμ ν λΉν΄μ£Όμ§ μλλ€.νλ‘μΈμ€μ μ΄ μμ² μμμ μ(Need) β€ μμ€ν μ κ°μ© μμμ μ(Available)
νλ€λ©΄ safeν μνμ΄λ€. β ν΄λΉ νλ‘μΈμ€μκ² Needλ§νΌμ μμμ ν λΉν΄μ€λ€.
Bankerβs μκ³ λ¦¬μ¦μ νλ‘μΈμ€κ° μμμ μ΅λλ‘ μμ²ν μμμ΄ κ°μ©μμμΌλ‘ μΆ©μ‘±λμ§ μλλ€λ©΄ μμμ ν λΉν΄μ£Όμ§ μλ 보μμ μΈ μκ³ λ¦¬μ¦μ΄λ€.
λ°λλ½μ΄ λ°μνλ κ²μ λ―Έμ°μ λ°©μ§νμ§λ μμ§λ§, detection 루ν΄μΌλ‘ λ°λλ½μ κ°μ§νλ€. λ§μ½ κ°μ§λμλ€λ©΄ recoveryνλ€.
Deadlock Detection μκ³ λ¦¬μ¦
-
μμ μ ν λΉ μΈμ€ν΄μ€κ° 1κ°
μΈ κ²½μ° βWait-for Graph μκ³ λ¦¬μ¦
μ μ¬μ©νλ€.μκ° λ³΅μ‘λ
- cycle μμ± μ¬λΆ μ‘°μ¬μ νλ‘μΈμ€μ μκ° nμΌ λ O(n^2) μκ°μ΄ κ±Έλ¦°λ€.
Resource Allocation Graphμμ μμμ λΉΌλ²λ¦¬κ³ μ€μ μ μ΄μΌλ©΄ Waif-for graphκ° λλ€.
-
μμ μ ν λΉ μΈμ€ν΄μ€κ° μ¬λ¬ κ°
μΈ κ²½μ° βBankerβs μκ³ λ¦¬μ¦κ³Ό μ μ¬ν λ°©λ²
μ νμ©νλ€.Detectionμμ Banker's μκ³ λ¦¬μ¦ λ°©μ
- νλ‘μΈμ€κ° μμμ μμ²νλ©΄ λ°λ‘ ν λΉν΄μ€λ€ (Max, Needλ₯Ό μ νμ μμ)
- νλ‘μΈμ€κ° 보μ νκ³ μλ μμμ μΈμ κ° λ°λ©ν κ²μ΄λΌκ³ βλκ΄μ βμΌλ‘ νλ¨ νλ€.
νλ‘μΈμ€μ μμ² μμ (Request) β€ μμ€ν λ΄ κ°μ© μμ
μ΄λΌλ©΄ safeν μν
νμ¬ μμ€ν λ΄ κ°μ© μμ(Available)μ΄ (0,0,0)μ΄μ§λ§ νλ‘μΈμ€λ€μ΄ 보μ νκ³ μλ μμ(Allocation)μ΄ μΈμ κ° λ°νλ κ²μ΄λΌκ³ νλ¨νκΈ° λλ¬Έμ λ°λλ½μ΄λΌκ³ νλ¨νμ§ μλλ€.
Deadlock Recovery λ°©λ²
Process Termination νλ‘μΈμ€ μ’ λ£
- λ°©λ²1 : λͺ¨λ λ°λλ½ μνμΈ νλ‘μΈμ€λ₯Ό κ°μ μ’ λ£
- λ°©λ²2 : λ°λλ½ μ¬μ΄ν΄μ΄ μμ΄μ§ λκΉμ§ νλμ© νλ‘μΈμ€λ₯Ό κ°μ μ’ λ£
Resource Preemption μμ μ μ
- λΉμ©μ μ΅μνν victim νλ‘μΈμ€λ₯Ό μ μ
- safe stateλ‘ λ‘€λ°±νμ¬ νλ‘μΈμ€λ₯Ό μ¬μμ
- Starvation λ¬Έμ (μμΈν λ€λ£¨μ§ μμ)
- λμΌν νλ‘μΈμ€κ° κ³μ victim νλ‘μΈμ€λ‘ μ μ λλ κ²½μ°
- λΉμ© μμμ λ‘€λ°± νμλ κ°μ΄ κ³ λ €ν΄μΌ ν¨ (λ¨μν λΉμ©λ§ μ΅μννλ©΄ μ λλ€λ λ»)
λ°λλ½μ΄ μΌμ΄λμ§ μλλ€κ³ μκ°νκ³ μλ¬΄λ° μ‘°μΉλ μ·¨νμ§ μμ
- λ°λλ½μ΄ λ§€μ° λλ¬Όκ² λ°μνλ―λ‘ λ°λλ½μ λν μ‘°μΉ μμ²΄κ° λ ν° μ€λ²ν€λμΌ μ μμ
- λ§μ½, μμ€ν μ λ°λλ½μ΄ λ°μν κ²½μ° μμ€ν μ΄ λΉμ μμ μΌλ‘ μλνλ κ²μ μ¬λμ΄ λλ ν μ§μ νλ‘μΈμ€λ₯Ό μ£½μ΄λ λ±μ λ°©λ²μΌλ‘ λμ²ν¨
- UNIX, Windows λ± λλΆλΆμ OSμμ μ±ννμμ