Skip to main content

5. ꡐ착 μƒνƒœ

1. ꡐ착 μƒνƒœ(Deadlock)의 κ°œλ…β€‹

두 개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ„œλ‘œ μžμ› 할당을 μœ„ν•΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ μž‘μ—…μ΄ λλ‚˜κΈ°λ§Œμ„ λ¬΄ν•œν•˜κ²Œ 기닀리고 μžˆλŠ” μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€.

  • κΈ°μ•„ μƒνƒœ (Starvation): ν”„λ‘œμ„ΈμŠ€μ˜ 일뢀가 μžμ› 할당을 λ°›μ§€ λͺ»ν•΄ λŒ€κΈ°κ°€ μ§€μ†μ μœΌλ‘œ μΌμ–΄λ‚˜λŠ” ν˜„μƒ (μ–Έμ  κ°€λŠ” ν•΄μ†Œλ  κ°€λŠ₯성이 있음)
  • ꡐ착 μƒνƒœ (Deadlock): μ„œλ‘œκ°€ μ„œλ‘œμ˜ μžμ›μ„ μ›ν•˜μ—¬ λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€μ˜ 진행이 μ™„μ „νžˆ 멈좘 μƒνƒœ

ꡐ착 μƒνƒœμ˜ 도식

ꡐ착 μƒνƒœμ˜ 도식

2. ꡐ착 μƒνƒœμ˜ νŠΉμ„±β€‹

ꡐ착 μƒνƒœμ˜ ν•„μš” 쑰건 (4κ°€μ§€)​

ꡐ착 μƒνƒœκ°€ λ°œμƒν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒ 4κ°€μ§€ 쑰건이 λͺ¨λ‘ μΆ©μ‘±λ˜μ–΄μ•Ό ν•œλ‹€. ν•˜λ‚˜λΌλ„ μΆ©μ‘±λ˜μ§€ μ•ŠμœΌλ©΄ ꡐ착 μƒνƒœλŠ” λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.

  1. μƒν˜Έ 배제 (Mutual Exclusion)
    • μžμ›μ— λŒ€ν•œ 배타적인 ν†΅μ œκΆŒμ„ μ˜λ―Έν•œλ‹€. ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ§Œ μžμ›μ„ μ‚¬μš©ν•  수 μžˆλ‹€.
  2. 점유 λŒ€κΈ° (Hold and Wait)
    • μžμ›μ„ μ΅œμ†Œν•œ ν•˜λ‚˜ λ³΄μœ ν•˜κ³ (점유), λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ 점유 쀑인 μžμ›μ„ μ–»κΈ° μœ„ν•΄ κΈ°λ‹€λ¦¬λŠ”(λŒ€κΈ°) ν”„λ‘œμ„ΈμŠ€κ°€ μžˆμ–΄μ•Ό ν•œλ‹€.
  3. 비선점 (No Preemption)
    • λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ 점유 쀑인 μžμ›μ„ κ°•μ œλ‘œ 빼앗을 수 μ—†λ‹€. μžμ›μ€ μ μœ ν•˜κ³  μžˆλŠ” ν”„λ‘œμ„ΈμŠ€κ°€ 자발적으둜 λ°˜ν™˜ν•  λ•Œλ§Œ ν•΄μ œλœλ‹€.
  4. ν™˜ν˜• λŒ€κΈ° (Circular Wait)
    • λŒ€κΈ° ν”„λ‘œμ„ΈμŠ€μ˜ 집합이 μ„œλ‘œκ°€ 꼬리λ₯Ό λ¬Όκ³  μˆœν™˜ ν˜•νƒœλ‘œ μžμ›μ„ λŒ€κΈ°ν•΄μ•Ό ν•œλ‹€. (P0β†’P1β†’...β†’Pnβ†’P0P_0 \to P_1 \to ... \to P_n \to P_0)

μžμ› ν• λ‹Ή κ·Έλž˜ν”„ (Resource Allocation Graph)​

ꡐ착 μƒνƒœλ₯Ό λͺ…ν™•ν•˜κ²Œ μ‹œκ°ν™”ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 유ν–₯ κ·Έλž˜ν”„μ΄λ‹€.

  • 정점 (Vertex)
    • P: ν”„λ‘œμ„ΈμŠ€(Process)λ₯Ό μ˜λ―Έν•˜λŠ” μ •μ μ˜ μ§‘ν•©
    • R: μžμ›(Resource)을 μ˜λ―Έν•˜λŠ” μ •μ μ˜ μ§‘ν•©
  • κ°„μ„  (Edge)
    • μš”κ΅¬ κ°„μ„  (Piβ†’RjP_i \to R_j): ν”„λ‘œμ„ΈμŠ€ PiP_iκ°€ μžμ› RjR_jλ₯Ό μš”μ²­ν•¨ (λŒ€κΈ°)
    • ν• λ‹Ή κ°„μ„  (Rjβ†’PiR_j \to P_i): μžμ› RjR_jκ°€ ν”„λ‘œμ„ΈμŠ€ PiP_i에 할당됨 (점유)

ꡐ착 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚Έ κ°„μ„  κ·Έλž˜ν”„μ˜ 예

ꡐ착 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚Έ κ°„μ„  κ·Έλž˜ν”„μ˜ 예

3. ꡐ착 μƒνƒœ μ²˜λ¦¬β€‹

3-1. λ°©μ§€ (Prevention)​

ꡐ착 μƒνƒœ λ°œμƒ ν•„μš” 쑰건 4κ°€μ§€ 쀑 ν•˜λ‚˜λ₯Ό λΆ€μ •ν•˜μ—¬ ꡐ착 μƒνƒœλ₯Ό μ˜ˆλ°©ν•˜λŠ” 방법이닀.

  • μƒν˜Έ 배제 쑰건의 제거
    • 곡유 κ°€λŠ₯ν•œ μžμ›(Read-only 파일 λ“±)으둜 λ§Œλ“€λ©΄ λ˜μ§€λ§Œ, 근본적으둜 곡유 λΆˆκ°€λŠ₯ν•œ μžμ›(ν”„λ¦°ν„° λ“±)이 μ‘΄μž¬ν•˜λ―€λ‘œ 사싀상 λΆˆκ°€λŠ₯ν•˜λ‹€.
  • 점유 λŒ€κΈ° 쑰건의 제거
    • μžμ›μ„ μš”μ²­ν•˜λŠ” μ‹œμ μ— μ–΄λ– ν•œ λ‹€λ₯Έ μžμ›λ„ μ μœ ν•˜κ³  μžˆμ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
    • 방법 1: μž‘μ—…μ„ μ‹œμž‘ν•˜λŠ” μ‹œμ μ— ν•„μš”ν•œ λͺ¨λ“  μžμ›μ„ ν•œκΊΌλ²ˆμ— μš”μ²­ν•˜μ—¬ ν• λ‹Ήλ°›λŠ”λ‹€. (μžμ› νš¨μœ¨μ„± μ €ν•˜)
    • 방법 2: μžμ›μ΄ ν•„μš”ν•  λ•Œ 보유 μžμ›μ„ λͺ¨λ‘ 내렀놓고 λ‹€μ‹œ μš”μ²­ν•œλ‹€. (κΈ°μ•„ μƒνƒœ 유발 κ°€λŠ₯)
  • 비선점 쑰건의 제거
    • 방법 1: λ‹€λ₯Έ μžμ›μ„ μš”μ²­ν–ˆμœΌλ‚˜ μ¦‰μ‹œ ν• λ‹Ήλ°›μ§€ λͺ»ν•˜λŠ” 경우, 점유 μ€‘μ΄λ˜ λͺ¨λ“  μžμ›μ„ λ°˜ν™˜ν•˜κ³  λŒ€κΈ°ν•œλ‹€.
    • 방법 2: μš”μ²­ν•œ μžμ›μ΄ λ‹€λ₯Έ λŒ€κΈ° 쀑인 ν”„λ‘œμ„ΈμŠ€μ— μ˜ν•΄ μ μœ λ˜μ–΄ μžˆλ‹€λ©΄, κ·Έ μžμ›μ„ 선점(λΉΌμ•—μŒ)ν•˜μ—¬ κ°€μ Έμ˜¨λ‹€.
    • CPU λ ˆμ§€μŠ€ν„°λ‚˜ λ©”λͺ¨λ¦¬μ²˜λŸΌ μƒνƒœ μ €μž₯이 μ‰¬μš΄ μžμ›μ—λ§Œ 적용 κ°€λŠ₯ν•˜λ‹€.
  • ν™˜ν˜• λŒ€κΈ° 쑰건의 제거
    • λͺ¨λ“  μžμ› μœ ν˜•μ— 일련번호λ₯Ό λΆ€μ—¬ν•˜κ³ , μ˜€λ¦„μ°¨μˆœμœΌλ‘œλ§Œ μžμ›μ„ μš”μ²­ν•˜κ²Œ ν•œλ‹€.
    • 예: 3번 μžμ›μ„ λ³΄μœ ν•œ μƒνƒœμ—μ„œλŠ” 1번 μžμ›μ„ μš”μ²­ν•  수 μ—†κ³ , λ°˜λ“œμ‹œ 4번 μ΄μƒμ˜ μžμ›λ§Œ μš”μ²­ κ°€λŠ₯ν•˜λ‹€.

3-2. νšŒν”Ό (Avoidance)​

ν”„λ‘œμ„ΈμŠ€μ˜ μžμ› μ‚¬μš©μ— λŒ€ν•œ 사전 정보λ₯Ό ν™œμš©ν•˜μ—¬, ꡐ착 μƒνƒœκ°€ λ°œμƒν•  κ°€λŠ₯성이 μžˆλŠ” λΆˆμ•ˆμ „ μƒνƒœλ₯Ό ν”Όν•΄ κ°€λŠ” 방법이닀.

  • ν•„μš”ν•œ 사전 정보: ν• λ‹Ήλœ μžμ›, κ°€μš© μžμ›, ν”„λ‘œμ„ΈμŠ€λ“€μ˜ μ΅œλŒ€ μš”κ΅¬λŸ‰(Max Need)
  • μ•ˆμ „ μƒνƒœ (Safe State): μ‹œμŠ€ν…œμ΄ ꡐ착 μƒνƒœλ₯Ό μΌμœΌν‚€μ§€ μ•ŠμœΌλ©΄μ„œ 각 ν”„λ‘œμ„ΈμŠ€κ°€ μš”κ΅¬ν•œ μ΅œλŒ€ μžμ›κΉŒμ§€ λͺ¨λ‘ ν• λ‹Ήν•΄ 쀄 수 μžˆλŠ” μ•ˆμ „ μˆœμ„œμ—΄μ΄ μ‘΄μž¬ν•˜λŠ” μƒνƒœ.

μ•ˆμ „ μˆœμ„œμ—΄ (Safe Sequence)​

ν”„λ‘œμ„ΈμŠ€ μ§‘ν•© P={p1,p2,…,pn}P = \{p_1, p_2, \dots, p_n\}에 κ΄€ν•˜μ—¬, pip_iκ°€ μΆ”κ°€λ‘œ μš”κ΅¬ν•˜λŠ” μžμ›μ΄ 'ν˜„μž¬ κ°€μš© μžμ›' + 'λͺ¨λ“  pj(j<i)p_j (j < i)κ°€ λ°˜λ‚©ν•  μžμ›'으둜 μΆ©μ‘± κ°€λŠ₯ν•˜λ‹€λ©΄ μ•ˆμ „ μˆœμ„œμ—΄μ΄ μ‘΄μž¬ν•œλ‹€κ³  ν•œλ‹€.

은행원 μ•Œκ³ λ¦¬μ¦˜ (Banker's Algorithm)​

λ‹¨μœ„ μžμ›μ΄ μ—¬λŸ¬ 개일 λ•Œ μ‚¬μš©ν•˜λŠ” 기법이닀. μžμ› μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ "κ°€μƒμœΌλ‘œ ν• λ‹Ήν•΄ 보고, κ·Έ 후에도 μ•ˆμ „ μƒνƒœμΈμ§€(μ•ˆμ „ μˆœμ„œμ—΄μ΄ μ‘΄μž¬ν•˜λŠ”μ§€)" κ²€μ‚¬ν•˜μ—¬ μ•ˆμ „ν•˜λ‹€λ©΄ ν• λ‹Ή, μ•„λ‹ˆλ©΄ λŒ€κΈ°ν•œλ‹€.

데이터 ꡬ쑰:

  1. Available: κ°€μš© μžμ›
  2. Max: ν”„λ‘œμ„ΈμŠ€ 별 μ΅œλŒ€ μš”κ΅¬λŸ‰
  3. Allocation: ν˜„μž¬ ν• λ‹Ήλœ μžμ›λŸ‰
  4. Need: μ•žμœΌλ‘œ ν•„μš”ν•œ μžμ›λŸ‰ (Max - Allocation)

μ•Œκ³ λ¦¬μ¦˜ λ™μž‘ 둜직 (μ˜μ‚¬μ½”λ“œ):

1. μš”μ²­ 검사 (Request <= Need)
- ν”„λ‘œμ„ΈμŠ€κ°€ μžμ‹ μ˜ μ΅œλŒ€ μš”κ΅¬λŸ‰μ„ μ΄ˆκ³Όν•΄μ„œ μš”μ²­ν–ˆλŠ”μ§€ 확인 (초과 μ‹œ 였λ₯˜)

2. κ°€μš© μžμ› 검사 (Request <= Available)
- ν˜„μž¬ μ‹œμŠ€ν…œμ— 남은 μžμ›μœΌλ‘œ 처리 κ°€λŠ₯ν•œμ§€ 확인 (λΆ€μ‘±ν•˜λ©΄ λŒ€κΈ°)

3. 가상 ν• λ‹Ή (Simulation)
Available = Available - Request
Allocation = Allocation + Request
Need = Need - Request

4. μ•ˆμ „μ„± 검사 (Safety Check)
- λ³€κ²½λœ μƒνƒœμ—μ„œ λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€λ₯Ό 끝낼 수 μžˆλŠ” 'μ•ˆμ „ μˆœμ„œμ—΄'이 μ‘΄μž¬ν•˜λŠ”μ§€ 확인

5. κ²°μ •
- μ•ˆμ „ν•˜λ‹€λ©΄(Safe) -> μ‹€μ œ ν• λ‹Ή μˆ˜ν–‰
- λΆˆμ•ˆμ „ν•˜λ‹€λ©΄(Unsafe) -> μƒνƒœλ₯Ό 원상 λ³΅κ΅¬ν•˜κ³  ν”„λ‘œμ„ΈμŠ€ λŒ€κΈ°

각 μœ ν˜•μ˜ λ‹¨μœ„ μžμ›μ΄ ν•˜λ‚˜λ°–μ— 없을 κ²½μš°β€‹

은행원 μ•Œκ³ λ¦¬μ¦˜μ€ λ³΅μž‘λ„(mΓ—n2m \times n^2)κ°€ λ†’μœΌλ―€λ‘œ, λ‹¨μœ„ μžμ›μ΄ ν•˜λ‚˜μΈ μ‹œμŠ€ν…œμ—μ„œλŠ” μžμ› ν• λ‹Ή κ·Έλž˜ν”„μ—μ„œ **사이클(Cycle)**이 λ°œμƒν•˜λŠ”μ§€λ₯Ό νƒμ§€ν•˜μ—¬ νšŒν”Όν•œλ‹€.

3-3. ꡐ착 μƒνƒœμ˜ 탐지 및 볡ꡬ (Detection & Recovery)​

ꡐ착 μƒνƒœ λ°©μ§€λ‚˜ νšŒν”ΌλŠ” λΉ„μš©μ΄ 크기 λ•Œλ¬Έμ—, μ‹œμŠ€ν…œμ€ 주기적으둜 ꡐ착 μƒνƒœ λ°œμƒ μ—¬λΆ€λ₯Ό νƒμ§€ν•˜κ³  λ°œμƒ μ‹œ λ³΅κ΅¬ν•˜λŠ” 방법을 μ‚¬μš©ν•˜κΈ°λ„ ν•œλ‹€.

볡ꡬ μ „λž΅:

  1. ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ:
    • ꡐ착 μƒνƒœμ— λΉ μ§„ λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ (λΉ„μš© 큼, 데이터 손싀 μœ„ν—˜)
    • 사이클이 제거될 λ•ŒκΉŒμ§€ ν•˜λ‚˜μ”© ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ (μ’…λ£Œν•  λ•Œλ§ˆλ‹€ 탐지 μ•Œκ³ λ¦¬μ¦˜ μž¬μˆ˜ν–‰ ν•„μš”)
  2. μžμ› 선점:
    • ν¬μƒμž(Victim)λ₯Ό μ„ νƒν•˜μ—¬ μžμ›μ„ λΉΌμ•—κ³  λ‘€λ°±μ‹œν‚¨λ‹€. (κΈ°μ•„ μƒνƒœ λ°œμƒ κ°€λŠ₯μ„± κ³ λ € ν•„μš”)

4. 볡합적 μ ‘κ·Ό (Combined Approach)​

μš΄μ˜μ²΄μ œλŠ” νš¨μœ¨μ„±μ„ μœ„ν•΄ λ°©μ§€, νšŒν”Ό, 탐지 기법을 μžμ›μ˜ νŠΉμ„±μ— 따라 λ³΅ν•©μ μœΌλ‘œ μ‚¬μš©ν•œλ‹€.

μžμ› μœ ν˜•κΆŒμž₯ 처리 κΈ°λ²•μ΄μœ  및 상세
λ‚΄λΆ€ μžμ›(PCB λ“±)λ°©μ§€(μˆœμ„œ λΆ€μ—¬)μžμ› μš”μ²­ μˆœμ„œλ₯Ό μ •ν•˜μ—¬ ν™˜ν˜• λŒ€κΈ°λ₯Ό λ°©μ§€ν•œλ‹€.
λ©”λͺ¨λ¦¬ / CPUλ°©μ§€(선점 ν—ˆμš©)μž‘μ—… μ»¨ν…μŠ€νŠΈλ₯Ό μ €μž₯ν•˜κ³  λ³΅κ΅¬ν•˜κΈ° μ‰¬μš°λ―€λ‘œ 선점을 톡해 ν•΄κ²°ν•œλ‹€.
μž‘μ—…μš© μžμ›(ν…Œμ΄ν”„, ν”„λ¦°ν„° λ“±)νšŒν”Όμž‘μ—… μ œμ–΄ μΉ΄λ“œ 등을 톡해 ν•„μš”ν•œ μžμ› 정보λ₯Ό 미리 μ•Œ 수 μžˆμœΌλ―€λ‘œ νšŒν”Ό 기법이 μ μ ˆν•˜λ‹€.
ꡐ체 κ°€λŠ₯ 곡간(보쑰기얡μž₯치)νšŒν”Ό(사전 ν• λ‹Ή)κΈ°μ–΅μž₯치의 μ΅œλŒ€ μ‚¬μš©λŸ‰μ„ 미리 μ•Œ 수 μžˆμœΌλ―€λ‘œ 미리 ν• λ‹Ήν•˜λŠ” 방식을 μ“΄λ‹€.

이 μ‹œλ¦¬μ¦ˆμ˜ λͺ¨λ“  ν¬μŠ€νŒ…μ€ 직접 μˆ˜μ—…κ³Ό ꡐ재λ₯Ό 톡해 ν•™μŠ΅ν•œ λ‚΄μš©μ„ ν† λŒ€λ‘œ
μ†μœΌλ‘œ μ •λ¦¬ν•œ ν›„, AIλ₯Ό μ΄μš©ν•΄ ꡬ쑰 정리와 λ§žμΆ€λ²•λ§Œ 닀듬은 μžλ£Œμž…λ‹ˆλ‹€.