πŸ‘€ Deadlock(κ΅μ°©μƒνƒœ)λž€?

  • 일련의 ν”„λ‘œμ„ΈμŠ€λ“€μ΄ μ„œλ‘œκ°€ 가진 μžμ›μ„ 기닀리며 block된 μƒνƒœ

Resource(μžμ›)

  • ν•˜λ“œμ›¨μ–΄, μ†Œν”„νŠΈμ›¨μ–΄ 등을 ν¬ν•¨ν•˜λŠ” κ°œλ…
  • 예) I/O device, CPU cycle, memory space, semaphore λ“±
  • ν”„λ‘œμ„ΈμŠ€κ°€ μžμ›μ„ μ‚¬μš©ν•˜λŠ” 절차
    • Request -> Allocate -> Use -> Release

λ°λ“œλ½μ΄ λ°œμƒν•˜λŠ” 예

  • μ‹œμŠ€ν…œμ— 2개의 tape driveκ°€ 있고 ν”„λ‘œμ„ΈμŠ€ P1, P2 각각이 ν•˜λ‚˜μ˜ tape driveλ₯Ό λ³΄μœ ν•œ 채 λ‹€λ₯Έ ν•˜λ‚˜λ₯Ό 기닀리고 μžˆλŠ” 경우

P0          P1
P(A);       P(B);
P(B);       P(A);
  • 두 μ„Έλ§ˆν¬μ–΄κ°€ ν•„μš”ν•œ μžμ›μ„ μ„œλ‘œ μžμ›μ„ ν•˜λ‚˜μ”© 가진 μƒνƒœμ—μ„œ μƒλŒ€κ°€ 내놓기λ₯Ό κΈ°λ‹€λ¦¬λŠ” 경우

λ°λ“œλ½ λ°œμƒμ˜ 4가지 쑰건

Mutual exclusion (μƒν˜Έ 배제)

  • 맀 μˆœκ°„ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ§Œμ΄ μžμ›μ„ μ‚¬μš©ν•  수 있음

No preemption (비선점)

  • ν”„λ‘œμ„ΈμŠ€λŠ” μžμ›μ„ 슀슀둜 내어놓을 뿐 κ°•μ œλ‘œ 빼앗기지 μ•ŠμŒ

Hold and wait (보유 λŒ€κΈ°)

  • μžμ›μ„ 가진 ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ μžμ›μ„ 기닀릴 λ•Œ 보유 μžμ›μ„ 놓지 μ•Šκ³  계속 가지고 있음

Circular wait (μˆœν™˜ λŒ€κΈ°)

  • μžμ›μ„ κΈ°λ‹€λ¦¬λŠ” ν”„λ‘œμ„ΈμŠ€κ°„μ— 사이클이 ν˜•μ„±λ˜μ–΄μ•Ό 함
  • ν”„λ‘œμ„ΈμŠ€ 1, 2, 3, 4κ°€ μžˆμ„ λ•Œ
    • 1은 2κ°€ 가진 μžμ›μ„ κΈ°λ‹€λ¦Ό
    • 2λŠ” 3이 가진 μžμ›μ„ κΈ°λ‹€λ¦Ό
    • 3은 4κ°€ 가진 μžμ›μ„ κΈ°λ‹€λ¦Ό
    • 4λŠ” 1이 가진 μžμ›μ„ κΈ°λ‹€λ¦Ό

λ°λ“œλ½ 처리 방법

Deadlock Prevention

  • μžμ› ν• λ‹Ή μ‹œ λ°λ“œλ½μ˜ 4가지 ν•„μš” 쑰건 쀑 μ–΄λŠ ν•˜λ‚˜κ°€ λ§Œμ‘±λ˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” 것

Deadlock Avoidance

  • μžμ› μš”μ²­μ— λŒ€ν•œ 뢀가적인 정보λ₯Ό μ΄μš©ν•΄μ„œ λ°λ“œλ½μ˜ κ°€λŠ₯성이 μ—†λŠ” κ²½μš°μ—λ§Œ μžμ› ν• λ‹Ή
  • μ‹œμŠ€ν…œ stateκ°€ μ›λž˜ state둜 λŒμ•„μ˜¬ 수 μžˆλŠ” κ²½μš°μ—λ§Œ μžμ› ν• λ‹Ή

Deadlock Detection and recovery

  • λ°λ“œλ½ λ°œμƒμ€ ν—ˆμš©ν•˜λ˜ 그에 λŒ€ν•œ detection 루틴을 두어 λ°λ“œλ½ λ°œκ²¬μ‹œ recover

Deadlock Ingorance

  • λ°λ“œλ½μ„ μ‹œμŠ€ν…œμ΄ μ±…μž„μ§€μ§€ μ•ŠμŒ
  • UNIXλ₯Ό ν¬ν•¨ν•œ λŒ€λΆ€λΆ„μ˜ OSκ°€ 채택
  • λ°λ“œλ½ μžμ²΄κ°€ 자주 λ°œμƒν•˜λŠ” 일이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— λ°λ“œλ½μ— λŒ€λΉ„ν•œλ‹€κ³  μ‹œμŠ€ν…œμ˜ μžμ› λΆ„λ°°λ₯Ό μ‘°μ ˆν•˜λŠ” 것은 λΉ„νš¨μœ¨μ μ΄κΈ° λ•Œλ¬Έμ— μ‚¬μš©μžκ°€ μ•Œμ•„μ„œ μ²˜λ¦¬ν•˜λ„λ‘ ν•œλ‹€.

λ°λ“œλ½ 방지

Mutual exclusion

  • κ³΅μœ ν•΄μ„œλŠ” μ•ˆ λ˜λŠ” μžμ›μ˜ 경우 λ°˜λ“œμ‹œ 성립해야 함
  • 즉 이 쑰건이 λ°˜λ“œμ‹œ μ„±λ¦½ν•œλ‹€λ©΄ λ°λ“œλ½μ΄ λ°œμƒν•  수 μ—†λ‹€.

Hold and Wait

  • ν”„λ‘œμ„ΈμŠ€κ°€ μžμ›μ„ μš”μ²­ν•  λ•Œ λ‹€λ₯Έ μ–΄λ–€ μžμ›λ„ 가지고 μžˆμ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
  • 방법 1 : ν”„λ‘œμ„ΈμŠ€ μ‹œμž‘ μ‹œ λͺ¨λ“  ν•„μš”ν•œ μžμ›μ„ ν• λ‹Ήλ°›κ²Œ ν•˜λŠ” 방법
  • 방법 2 : μžμ›μ΄ ν•„μš”ν•  경우 보유 μžμ›μ„ λͺ¨λ‘ 놓고 λ‹€μ‹œ μš”μ²­

No Preemption

  • ν”„λ‘œμ„ΈμŠ€κ°€ μžμ›μ„ κΈ°λ‹€λ €μ•Ό ν•˜λŠ” 경우 이미 λ³΄μœ ν•œ μžμ›μ΄ 선점됨
  • λͺ¨λ“  ν•„μš”ν•œ μžμ›μ„ 얻을 수 μžˆμ„ λ•Œ κ·Έ ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€μ‹œ μ‹œμž‘λ¨
  • 즉 μžμ›μ„ 선점할 수 있게 ν•˜λŠ” 것
  • stateλ₯Ό μ‰½κ²Œ saveν•˜κ³  restoreν•  수 μžˆλŠ” μžμ›μ—μ„œ 주둜 μ‚¬μš© (예: CPU, memory)

Circular Wait

  • λͺ¨λ“  μžμ› μœ ν˜•μ— ν• λ‹Ή μˆœμ„œλ₯Ό μ •ν•˜μ—¬ 정해진 μˆœμ„œλŒ€λ‘œλ§Œ μžμ› ν• λ‹Ή
  • 예λ₯Ό λ“€μ–΄ μˆœμ„œκ°€ 3인 μžμ›μ„ 보유 쀑인 ν”„λ‘œμ„ΈμŠ€κ°€ μˆœμ„œκ°€ 1인 μžμ›μ„ ν• λ‹Ήλ°›κΈ° μœ„ν•΄μ„œλŠ” μš°μ„  μˆœμ„œ 3을 releaseν•΄μ•Ό ν•œλ‹€.
  • μžμ› μš”μ²­ 사이클이 μƒμ„±λ˜μ§€ μ•Šκ²Œ ν•˜λŠ” 것

  • ν•˜μ§€λ§Œ μœ„ 기법듀을 μ μš©ν•˜λ©΄ Utilization(이용λ₯ ) μ €ν•˜, Throughput(μ„±λŠ₯) κ°μ†Œ, Starvation λ¬Έμ œκ°€ μƒκ²¨μ„œ ꡉμž₯히 λΉ„νš¨μœ¨μ μ΄λ‹€.

Deadlock Avoidance

  • μžμ› μš”μ²­μ— λŒ€ν•œ 뢀가정보λ₯Ό μ΄μš©ν•΄μ„œ μžμ› 할당이 λ°λ“œλ½μœΌλ‘œλΆ€ν„° μ•ˆμ „ν•œμ§€ λ™μ μœΌλ‘œ μ‘°μ‚¬ν•΄μ„œ μ•ˆμ „ν•œ κ²½μš°μ—λ§Œ ν• λ‹Ή
  • κ°€μž₯ λ‹¨μˆœν•˜κ³  일반적인 λͺ¨λΈμ€ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ ν•„μš”λ‘œ ν•˜λŠ” 각 μžμ›λ³„ μ΅œλŒ€ μ‚¬μš©λŸ‰μ„ 미리 μ„ μ–Έν•˜λ„λ‘ ν•˜λŠ” 방법

Resource Allocation Graph algorithm

  • μžμ›λ‹Ή ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ μžˆμ„ λ•Œ μ‚¬μš©ν•˜λŠ” 방법
  • μžμ›λ“€κ³Ό ν”„λ‘œμ„ΈμŠ€λ“€ 간을 μ‹€μ„ κ³Ό μ μ„ μœΌλ‘œ μž‡λŠ” κ·Έλž˜ν”„λ₯Ό κ·Έλ € ν• λ‹Ήκ³Ό μš”μ²­λœ μžμ›μ€ μ‹€μ„ μœΌλ‘œ ν‘œμ‹œν•˜κ³  μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€κ°€ λ―Έλž˜μ— ν•œ λ²ˆμ€ μ‚¬μš©ν•  수 μžˆλŠ” μžμ›μ€ μ μ„ μœΌλ‘œ ν‘œμ‹œν•˜λŠ” 것이닀.
  • μƒˆλ‘œμš΄ μžμ› μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ 싀선을 μ μ„ μœΌλ‘œ 바꿨을 λ•Œ 사이클이 생기지 μ•Šμ„ λ•Œμ—λ§Œ μš”μ²­ μžμ›μ„ ν• λ‹Ήν•œλ‹€.
  • 사이클 생성 μ—¬λΆ€ μ‘°μ‚¬μ‹œ ν”„λ‘œμ„ΈμŠ€μ˜ μˆ˜κ°€ n일 λ•Œ O(n^2) μ‹œκ°„μ΄ κ±Έλ¦°λ‹€.

Banker’s Algorithm

  • κ°€μ •
    • λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€λŠ” μžμ›μ˜ μ΅œλŒ€ μ‚¬μš©λŸ‰μ„ 미리 λͺ…μ‹œ
    • ν”„λ‘œμ„ΈμŠ€κ°€ μš”μ²­ μžμ›μ„ λͺ¨λ‘ 할당받은 경우 μœ ν•œ μ‹œκ°„ μ•ˆμ— 이듀 μžμ›μ„ λ‹€μ‹œ λ°˜λ‚©ν•œλ‹€.
  • 방법
    • κΈ°λ³Έ κ°œλ… : μžμ› μš”μ²­ μ‹œ safe μƒνƒœλ₯Ό μœ μ§€ν•  κ²½μš°μ—λ§Œ ν• λ‹Ή
    • 총 μš”μ²­ μžμ›μ˜ μˆ˜κ°€ κ°€μš© μžμ›μ˜ μˆ˜λ³΄λ‹€ 적은 ν”„λ‘œμ„ΈμŠ€λ₯Ό 선택 (그런 ν”„λ‘œμ„ΈμŠ€κ°€ μ—†μœΌλ©΄ unsafe μƒνƒœ)
    • μœ„μ˜ κ²½μš°μ— λΆ€ν•©ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ 있으면 κ·Έ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μžμ› ν• λ‹Ή
    • 할당받은 ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ˜λ©΄ λͺ¨λ“  μžμ› λ°˜λ‚©
    • λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μ΄λŸ¬ν•œ κ³Όμ • 반볡

Deadlock Detection and Recovery

Detection

  • Banker's Algorithmκ³Ό μœ μ‚¬ν•œ λ°©λ²•μœΌλ‘œ μ‚¬μ΄ν΄μ˜ 쑴재 μ—¬λΆ€λ₯Ό 주기적으둜 κ²€μ‚¬ν•˜μ—¬ μžμ›μ„ ν• λ‹Ήν•˜λŠ” 방법이 μžˆλ‹€.

Recovery

Process termination

  • λ°λ“œλ½ 된 λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ
  • λ°λ“œλ½μ΄ 해결될 λ•Œ κΉŒμ§€ λ°λ“œλ½μ— κ°‡ν˜€ μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό ν•˜λ‚˜μ”© μ’…λ£Œ

Resource preemption

  • λΉ„μš©μ„ μ΅œμ†Œν™” ν•  victim μ„ μ •
  • safe state둜 rollbackν•˜μ—¬ ν”„λ‘œμ„ΈμŠ€ μž¬μ‹œμž‘
  • Starvation 문제
    • λ™μΌν•œ ν”„λ‘œμ„ΈμŠ€κ°€ κ³„μ†ν•΄μ„œ victim으둜 μ„ μ •λ˜λŠ” 경우
    • cost factor에 rollback νšŸμˆ˜λ„ 같이 κ³ λ €

Deadlock Ignorance

  • λ°λ“œλ½μ΄ μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€κ³  μƒκ°ν•˜κ³  μ•„λ¬΄λŸ° μ‘°μΉ˜λ„ μ·¨ν•˜μ§€ μ•ŠμŒ
  • λ°λ“œλ½μ€ 맀우 λ“œλ¬Όκ²Œ λ°œμƒν•˜λ―€λ‘œ λ°λ“œλ½μ— λŒ€ν•œ 쑰치 μžμ²΄κ°€ 더 큰 μ˜€λ²„ν—€λ“œμΌ 수 μžˆλ‹€.
  • λ§Œμ•½, μ‹œμŠ€ν…œμ— λ°λ“œλ½μ΄ λ°œμƒν•œ 경우 μ‹œμŠ€ν…œμ΄ λΉ„μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜λŠ” 것을 μ‚¬λžŒμ΄ λŠλ‚€ ν›„ 직접 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ£½μ΄λŠ” λ“±μ˜ λ°©λ²•μœΌλ‘œ λŒ€μ²˜
  • UNIX, Windows λ“± λŒ€λΆ€λΆ„μ˜ λ²”μš© OSκ°€ 채택


좜처