Skip to content

Latest commit

Β 

History

History
151 lines (98 loc) Β· 9.24 KB

Deadlock.md

File metadata and controls

151 lines (98 loc) Β· 9.24 KB

Deadlock

λ°λ“œλ½

λ°λ“œλ½(κ΅μ°©μƒνƒœ)λž€ 일련의 ν”„λ‘œμ„ΈμŠ€λ“€μ΄ 각자 μžμ›μ„ μ μœ ν•˜κ³  μžˆλŠ” μƒνƒœμ—μ„œ μ„œλ‘œκ°€ μ„œλ‘œμ˜ μžμ›μ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ blocking된 μƒνƒœ(λ¬΄ν•œμ • λŒ€κΈ° μƒνƒœ)이닀.

  • μžμ›μ€ ν•˜λ“œμ›¨μ–΄, μ†Œν”„νŠΈμ›¨μ–΄ μžμ›μ„ ν¬ν•¨ν•˜λŠ” κ°œλ…μ΄λ‹€. (IO device, CPU cycle, Memory Space, Semaphore λ“±)

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

  1. μƒν˜Έ 배제(Mutual Exclusion) : μžμ›μ€ 맀 μˆœκ°„ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ§Œ μ‚¬μš©ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€. (독점)
  2. 비선점(No Preemption) : ν”„λ‘œμ„ΈμŠ€λŠ” μžμ›μ„ 슀슀둜 λ°˜λ‚©ν•  뿐 κ°•μ œλ‘œ 빼앗기지 μ•ŠλŠ”λ‹€.
  3. 점유 λŒ€κΈ°(Hold and Wait) : μžμ›μ„ 가진 ν”„λ‘œμ„ΈμŠ€κ°€ 이λ₯Ό λ°˜λ‚©ν•˜μ§€ μ•Šκ³  또 λ‹€λ₯Έ μžμ›μ„ 기닀릴 수 μžˆλ‹€.
  4. μˆœν™˜ λŒ€κΈ°(Circular Wait) : μžμ›μ„ κΈ°λ‹€λ¦¬λŠ” ν”„λ‘œμ„ΈμŠ€λ“€ 간에 사이클이 ν˜•μ„±λœλ‹€. (p0λŠ” p1이 가진 μžμ›μ„ 기닀리고, p1은 p2κ°€ 가진 μžμ›μ„ 기닀리고, ... , pn은 p0κ°€ 가진 μžμ›μ„ κΈ°λ‹€λ¦°λ‹€)

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

  1. Deadlock Prevention (λ°λ“œλ½ 예방)
  2. Deadlock Avoidance (λ°λ“œλ½ νšŒν”Ό)
  3. Deadlock Detection and recovery (λ°λ“œλ½ 감지 및 회볡)
  4. Deadlock Ignorance (λ°λ“œλ½ λ¬΄μ‹œ)

πŸ“Œ 1. Deadlock Prevention

λ°λ“œλ½ λ°œμƒ 4가지 쑰건 쀑 ν•˜λ‚˜λ₯Ό μ œκ±°ν•¨μœΌλ‘œ λ°λ“œλ½μ„ ν•΄κ²°ν•˜λŠ” 방법

  1. μƒν˜Έ 배제 λΆ€μ • : μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ 곡유 μžμ›μ„ μ‚¬μš©ν•˜λ„λ‘ ν•œλ‹€.
    • 단, κ³΅μœ ν•΄μ„œλŠ” μ•ˆλ˜λŠ” μžμ›μ€ μƒν˜Έ 배제 쑰건을 λ§Œμ‘±μ‹œμΌœμ•Ό ν•œλ‹€.
  2. 비선점 λΆ€μ • : 보유 μžμ›μ„ 가진 ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ μžμ›μ„ κΈ°λ‹€λ¦¬λŠ” 경우, ν•΄λ‹Ή 보유 μžμ›μ΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ— μ˜ν•΄ μ„ μ λ˜λ„λ‘ ν•œλ‹€.
    • 단, ν”„λ‘œμ„Έκ°€ μƒνƒœλ₯Ό save & restoreν•  수 μžˆλŠ” μžμ›λ§Œ μ„ μ λ˜λ„λ‘ ν•΄μ•Ό ν•œλ‹€
  3. 보유 λŒ€κΈ° λΆ€μ • : ν”„λ‘œμ„ΈμŠ€κ°€ μžμ›μ„ μš”μ²­ν•  λ•Œ λ‹€λ₯Έ μ–΄λ–€ μžμ›λ„ 가지고 μžˆμ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
    • 방법1 : ν”„λ‘œμ„ΈμŠ€ μ‹œμž‘ μ‹œμ— ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€κ°€ ν•„μš”ν•œ β€œλͺ¨λ“ β€ μžμ›μ„ ν• λ‹Ήλ°›κ²Œ ν•˜λŠ” 방법 (λΉ„νš¨μœ¨μ )
    • 방법2 : μžμ›μ΄ ν•„μš”ν•œ 경우 보유 μžμ›μ„ λͺ¨λ‘ 놓고 λŒ€κΈ°ν•˜λŠ” 방법
  4. μˆœν™˜ λŒ€κΈ° λΆ€μ • : λͺ¨λ“  μžμ› μœ ν˜•μ— ν• λ‹Ή μˆœμ„œλ₯Ό μ •ν•˜μ—¬ μˆœμ„œλŒ€λ‘œλ§Œ μžμ›μ„ ν• λ‹Ήν•˜λ„λ‘ ν•œλ‹€.
    • ν”„λ‘œμ„ΈμŠ€κ°€ μˆœμ„œκ°€ 3인 μžμ›μ„ λ³΄μœ ν•˜κ³  μžˆμ„ λ•Œ, μˆœμ„œκ°€ 1인 μžμ›μ„ ν• λ‹Ήλ°›μœΌλ €λ©΄ μˆœμ„œκ°€ 3인 μžμ›μ„ λ°˜λ‚©ν•΄μ•Ό ν•œλ‹€. (1β†’ 3의 μˆœμ„œ)

예방 방법을 μ‚¬μš©ν•˜κ²Œ 될 λ•Œ λ°œμƒν•˜λŠ” 문제점 β‡’ utilization μ €ν•˜(system μž…μž₯), throughput κ°μ†Œ(system μž…μž₯), starvation 문제(process μž…μž₯)

πŸ“Œ 2. Deadlock Avoidance

λ°λ“œλ½μ˜ λ°œμƒ κ°€λŠ₯성이 μ—†λŠ” κ²½μš°μ—λ§Œ μžμ›μ„ ν• λ‹Ήν•˜λŠ” 방법.

  • νŠΉμ • μžμ›μ„ 할당해주어도 μ‹œμŠ€ν…œμ΄ μ—¬μ „νžˆ 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. μžμ› μœ ν˜• λ‹Ή μΈμŠ€ν„΄μŠ€κ°€ 1개인 경우 β‡’ Resource Allocation Graph μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•œλ‹€.

    https://raw.githubusercontent.com/CS-studi/CS-study/master/CS/OS/img/deadlock/RAG.png

    ν™”μ‚΄ν‘œ 의미

    • 점선 ν™”μ‚΄ν‘œ(claim edge) : ν”„λ‘œμ„ΈμŠ€κ°€ 적어도 ν•œ 번 이상 μžμ›μ„ μ‚¬μš©ν•œλ‹€λŠ” 의미
    • ν”„λ‘œμ„ΈμŠ€ β†’ μžμ›μœΌλ‘œ κ°€λŠ” μ‹€μ„  ν™”μ‚΄ν‘œ(request edge) : ν˜„μž¬ ν”„λ‘œμ„ΈμŠ€κ°€ μžμ›μ„ μš”κ΅¬ν•˜λŠ” μƒνƒœ
    • μžμ› β†’ ν”„λ‘œμ„ΈμŠ€λ‘œ κ°€λŠ” μ‹€μ„  ν™”μ‚΄ν‘œ(asignment edge) : μžμ›μ΄ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ ν• λ‹Ήλœ μƒνƒœ

    μ‹œκ°„ λ³΅μž‘λ„

    • cycle 생성 μ—¬λΆ€ μ‘°μ‚¬μ‹œ ν”„λ‘œμ„ΈμŠ€μ˜ μˆ˜κ°€ n일 λ•Œ O(n^2) μ‹œκ°„μ΄ κ±Έλ¦°λ‹€.

    κ°€μž₯ 였λ₯Έμͺ½ 그림을 보면 Cycle이 ν˜•μ„±λ˜μ–΄μžˆμ§€λ§Œ λ°λ“œλ½μ΄ λ°œμƒν•œκ±΄ μ•„λ‹ˆλ‹€. λ§Œμ•½ P1이 R2λ₯Ό μš”κ΅¬ν•œλ‹€λ©΄ 점선이 μ‹€μ„ μœΌλ‘œ λ°”λ€Œκ³  λ°λ“œλ½μ΄ ν˜•μ„±λœλ‹€. 즉, P1μ—κ²Œ μžμ› R2λ₯Ό ν• λ‹Ήν•΄μ£Όλ©΄ μ‹œμŠ€ν…œμ΄ unsafeν•œ μƒνƒœκ°€ λ˜λ―€λ‘œ 할당해주지 μ•ŠλŠ”λ‹€.

  2. μžμ› μœ ν˜• λ‹Ή μΈμŠ€ν„΄μŠ€κ°€ μ—¬λŸ¬ 개인 경우 β‡’ Banker’s μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•œλ‹€

    https://raw.githubusercontent.com/CS-studi/CS-study/master/CS/OS/img/deadlock/bankers.png

    Banker's μ•Œκ³ λ¦¬μ¦˜μ˜ κ°€μ •

    • λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€λŠ” μ΅œλŒ€λ‘œ μ‚¬μš©ν•  μžμ›μ˜ 양을 미리 λͺ…μ‹œν•œλ‹€ (Max)
    • ν”„λ‘œμ„ΈμŠ€κ°€ μžμ›μ„ 할당받을 경우 μœ ν•œ μ‹œκ°„λ‚΄μ— λ‹€μ‹œ λ°˜λ‚©ν•œλ‹€

    Banker's μ•Œκ³ λ¦¬μ¦˜ 방식

    • μ‹œμŠ€ν…œμ΄ safe stateλ₯Ό μœ μ§€ν•  κ²½μš°μ—λ§Œ μžμ›μ„ ν• λ‹Ήν•΄μ€€λ‹€.
      • ν”„λ‘œμ„ΈμŠ€μ˜ 총 μš”μ²­ μžμ›μ˜ 수(Need) > μ‹œμŠ€ν…œ 속 κ°€μš© μžμ›μ˜ 수(Available) ν•˜λ‹€λ©΄ unsafeν•œ μƒνƒœμ΄λ‹€. β†’ ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μžμ›μ„ 할당해주지 μ•ŠλŠ”λ‹€.
      • ν”„λ‘œμ„ΈμŠ€μ˜ 총 μš”μ²­ μžμ›μ˜ 수(Need) ≀ μ‹œμŠ€ν…œ 속 κ°€μš© μžμ›μ˜ 수(Available) ν•˜λ‹€λ©΄ safeν•œ μƒνƒœμ΄λ‹€. β†’ ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ—κ²Œ Need만큼의 μžμ›μ„ ν• λ‹Ήν•΄μ€€λ‹€.

    Banker’s μ•Œκ³ λ¦¬μ¦˜μ€ ν”„λ‘œμ„ΈμŠ€κ°€ μžμ›μ„ μ΅œλŒ€λ‘œ μš”μ²­ν•œ μžμ›μ΄ κ°€μš©μžμ›μœΌλ‘œ μΆ©μ‘±λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μžμ›μ„ 할당해주지 μ•ŠλŠ” 보수적인 μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.

πŸ“Œ 3. Deadlock Detection and Recovery

λ°λ“œλ½μ΄ λ°œμƒν•˜λŠ” 것을 미연에 λ°©μ§€ν•˜μ§€λŠ” μ•Šμ§€λ§Œ, detection λ£¨ν‹΄μœΌλ‘œ λ°λ“œλ½μ„ κ°μ§€ν•œλ‹€. λ§Œμ•½ κ°μ§€λ˜μ—ˆλ‹€λ©΄ recoveryν•œλ‹€.

Deadlock Detection μ•Œκ³ λ¦¬μ¦˜

  1. μžμ› μœ ν˜• λ‹Ή μΈμŠ€ν„΄μŠ€κ°€ 1개인 경우 β‡’ Wait-for Graph μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•œλ‹€.

    https://raw.githubusercontent.com/CS-studi/CS-study/master/CS/OS/img/deadlock/Wfg.png

    μ‹œκ°„ λ³΅μž‘λ„

    • cycle 생성 μ—¬λΆ€ μ‘°μ‚¬μ‹œ ν”„λ‘œμ„ΈμŠ€μ˜ μˆ˜κ°€ n일 λ•Œ O(n^2) μ‹œκ°„μ΄ κ±Έλ¦°λ‹€.

    Resource Allocation Graphμ—μ„œ μžμ›μ„ 빼버리고 싀선을 이으면 Waif-for graphκ°€ λœλ‹€.

  2. μžμ› μœ ν˜• λ‹Ή μΈμŠ€ν„΄μŠ€κ°€ μ—¬λŸ¬ 개인 경우 β‡’ Banker’s μ•Œκ³ λ¦¬μ¦˜κ³Ό μœ μ‚¬ν•œ 방법을 ν™œμš©ν•œλ‹€.

    https://raw.githubusercontent.com/CS-studi/CS-study/master/CS/OS/img/deadlock/bdetect.png

    Detectionμ—μ„œ Banker's μ•Œκ³ λ¦¬μ¦˜ 방식

    • ν”„λ‘œμ„ΈμŠ€κ°€ μžμ›μ„ μš”μ²­ν•˜λ©΄ λ°”λ‘œ ν• λ‹Ήν•΄μ€€λ‹€ (Max, Needλ₯Ό μ•Œ ν•„μš” μ—†μŒ)
    • ν”„λ‘œμ„ΈμŠ€κ°€ λ³΄μœ ν•˜κ³  μžˆλŠ” μžμ›μ„ μ–Έμ  κ°€ λ°˜λ‚©ν•  것이라고 β€œλ‚™κ΄€μ β€μœΌλ‘œ νŒλ‹¨ ν•œλ‹€.
      • ν”„λ‘œμ„ΈμŠ€μ˜ μš”μ²­ μžμ› (Request) ≀ μ‹œμŠ€ν…œ λ‚΄ κ°€μš© μžμ› 이라면 safeν•œ μƒνƒœ

    ν˜„μž¬ μ‹œμŠ€ν…œ λ‚΄ κ°€μš© μžμ›(Available)이 (0,0,0)μ΄μ§€λ§Œ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ λ³΄μœ ν•˜κ³  μžˆλŠ” μžμ›(Allocation)이 μ–Έμ  κ°€ λ°˜ν™˜λ  것이라고 νŒλ‹¨ν•˜κΈ° λ•Œλ¬Έμ— λ°λ“œλ½μ΄λΌκ³  νŒλ‹¨ν•˜μ§€ μ•ŠλŠ”λ‹€.

Deadlock Recovery 방법

  1. Process Termination ν”„λ‘œμ„ΈμŠ€ μ’…λ£Œ
    • 방법1 : λͺ¨λ“  λ°λ“œλ½ μƒνƒœμΈ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°•μ œ μ’…λ£Œ
    • 방법2 : λ°λ“œλ½ 사이클이 μ—†μ–΄μ§ˆ λ•ŒκΉŒμ§€ ν•˜λ‚˜μ”© ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°•μ œ μ’…λ£Œ
  2. Resource Preemption μžμ› 선점
    • λΉ„μš©μ„ μ΅œμ†Œν™”ν•  victim ν”„λ‘œμ„ΈμŠ€λ₯Ό μ„ μ •
    • safe state둜 λ‘€λ°±ν•˜μ—¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό μž¬μ‹œμž‘
    • Starvation 문제 (μžμ„Ένžˆ 닀루지 μ•ŠμŒ)
      • λ™μΌν•œ ν”„λ‘œμ„ΈμŠ€κ°€ 계속 victim ν”„λ‘œμ„ΈμŠ€λ‘œ μ„ μ •λ˜λŠ” 경우
      • λΉ„μš© μš”μ†Œμ— λ‘€λ°± νšŸμˆ˜λ„ 같이 κ³ λ €ν•΄μ•Ό 함 (λ‹¨μˆœνžˆ λΉ„μš©λ§Œ μ΅œμ†Œν™”ν•˜λ©΄ μ•ˆ λœλ‹€λŠ” 뜻)

πŸ“Œ 4. Deadlock Ignorance

λ°λ“œλ½μ΄ μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€κ³  μƒκ°ν•˜κ³  μ•„λ¬΄λŸ° μ‘°μΉ˜λ„ μ·¨ν•˜μ§€ μ•ŠμŒ

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