๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

OS

7์žฅ Deadlock

 

reference: kocw์˜ ๋ฐ˜ํšจ๊ฒฝ ๊ต์ˆ˜๋‹˜ ๊ฐ•์˜์™€ ๊ถŒ์ง„์šฑ ๊ต์ˆ˜๋‹˜ ๊ฐ•์˜(๋Œ€ํ•™ ์ •๊ทœ ์ˆ˜์—…)
์ˆ˜์—…์„ ๋“ฃ๊ณ ๋‚˜์„œ ๊ฐ•์˜ ๊ต์žฌ๋ฅผ ํƒ€์ดํ•‘ํ•˜๊ณ  ํ•„๊ธฐํ•œ ๋ถ€๋ถ„์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์›น๋ทฐ์—์„œ toc๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
github์˜ md ํŒŒ์ผ๋กœ ๋ณด๋Š” ๊ฒŒ ํŽธํ•˜์‹œ๋‹ค๋ฉด, ์—ฌ๊ธฐ๋กœ ์ด๋™ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


1 deadlock, resource์˜ ์ •์˜

deadlock

  • ์ผ๋ จ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์„œ๋กœ๊ฐ€ ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ block๋œ ์ƒํƒœ
  • ์–ด๋Š ๋ˆ„๊ตฌ๋„ ์–‘๋ณด๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋”์ด์ƒ ์ง„ํ–‰๋˜์ง€ ์•Š๋Š” ์ƒํƒœ

Resource

  • ํ•˜๋“œ์›จ์–ด, ์†Œํ”„ํŠธ์›จ์–ด ๋“ฑ์„ ํฌํ•จํ•œ ๊ฐœ๋…
    • ์˜ˆ: I/O device, CPU cycle, memory space, semaphore ๋“ฑ
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
    1. ์š”์ฒญ (Request)
    2. ํš๋“ (Allocate)
    3. ์‚ฌ์šฉ (Use)
    4. ๋ฐ˜๋‚ฉ (Release)
  • ์˜ˆ์‹œ
    • deadlock example 1 (ํ•˜๋“œ์›จ์–ด ๋ฆฌ์†Œ์Šค)
      • ์‹œ์Šคํ…œ์— 2๊ฐœ์˜ tape drive๊ฐ€ ์žˆ๋Š”๋ฐ, ํ”„๋กœ์„ธ์Šค P1๊ณผ P2 ๊ฐ๊ฐ์ด ํ•˜๋‚˜์˜ tape drive๋ฅผ ๋ณด์œ ํ•œ ์ฑ„ ๋‹ค๋ฅธ ํ•˜๋‚˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค
    • deadlock example 2 (์†Œํ”„ํŠธ์›จ์–ด ๋ฆฌ์†Œ์Šค)
      • binary semaphores A and B
      •   

Deadlock ๋ฐœ์ƒ ์กฐ๊ฑด

2-1. Mutual exclusion (์ƒํ˜ธ ๋ฐฐ์ œ)

  • ๋งค ์ˆœ๊ฐ„ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์–ด๋–ค ์ž์›์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋™์•ˆ์— ๊ทธ ์ž์›์„ ๋…์ ์ ์œผ๋กœ ์“ด๋‹ค.

2-2. No preemption (๋น„์„ ์ )

  • ํ”„๋กœ์„ธ์Šค๋Š” ์ž์›์„ ์Šค์Šค๋กœ ๋‚ด์–ด๋†“์„ ๋ฟ ๊ฐ•์ œ๋กœ ๋นผ์•—๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
  • ์ž์›์„ ๊ฐ•์ œ๋กœ ๋นผ์•—์„ ์ˆ˜ ์—†๋‹ค.

2-3. Hold and wait (๋ณด์œ  ๋Œ€๊ธฐ)

  • ์ž์›์„ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ์ž์›์„ ๊ธฐ๋‹ค๋ฆด ๋•Œ ๋ณด์œ  ์ž์›(์ž์‹ ์˜ ์ž์›)์„ ๋†“์ง€ ์•Š๊ณ  ๊ณ„์† ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋‹ค.

2-4. Circular wait (์ˆœํ™˜ ๋Œ€๊ธฐ)

  • ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค.

3 Resource Allocation Graph

3-1. ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„

์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด deadlock ์ƒํƒœ์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๊ฐ€๋ฆ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋™๊ทธ๋ž€ ๊ฑด ํ”„๋กœ์„ธ์Šค
  • ๋„ค๋ชจ๋Š” ๋ฆฌ์†Œ์Šค
  • ์  ๊ฐœ์ˆ˜๋Š” ๋ฆฌ์†Œ์Šค์˜ ๊ฐœ์ˆ˜-instance์˜ ๊ฐœ์ˆ˜
    • Resource๋Š” ํ•˜๋‚˜์˜ Block์— ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
  • Process์—์„œ ๋‚˜๊ฐ€๋Š” ํ™”์‚ดํ‘œ๋Š” Resource๋ฅผ ์š”์ฒญํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • Resource์—์„œ ๋‚˜๊ฐ€๋Š” ํ™”์‚ดํ‘œ๋Š” ํ•ด๋‹น Resource๋ฅผ Process๊ฐ€ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

3-2. deadlock ์ƒํƒœ ํŒ๋‹จ

  • ๊ทธ๋ž˜ํ”„์— cycle์ด ์—†๋‹ค๋ฉด ๋ชจ๋“  ๊ฒฝ์šฐ์— deadlock์ด ์•„๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜ํ”„์— cycle์ด ์žˆ๊ณ  ๋ชจ๋“  Resouce Block์— ์ž์›์ด ํ•˜๋‚˜์”ฉ๋งŒ ์žˆ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ deadlock ์ƒํƒœ์ด๋‹ค.
  • ๊ทธ๋ž˜ํ”„์— cycle์ด ์žˆ์ง€๋งŒ ๋ชจ๋“  Resoucr Block์˜ ์ž์›์ด ํ•˜๋‚˜์”ฉ๋งŒ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด (์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ๋Š” Block์ด ์กด์žฌํ•œ๋‹ค๋ฉด) deadlock์ผ ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹์ˆ˜๋„ ์žˆ๋‹ค. (์ถ”๊ฐ€์  ๊ฒ€์ฆ ํ•„์š”)

  • ์™ผ์ชฝ ๊ทธ๋ฆผ์€ deadlock ์ƒํƒœ์ด๋‹ค.
  • ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์€ cycle์ด ํ˜•์„ฑ๋˜์–ด์žˆ์ง€๋งŒ deadlock ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • P2๊ฐ€ ์–ธ์  ๊ฐ€ ๋๋‚˜๊ฒŒ ๋˜์–ด instance 1๊ฐœ๊ฐ€ free ๋˜๋ฉด P1์€ R1์„ ์ ์œ ํ•  ์ˆ˜ ์žˆ๊ณ  P3๋Š” R1์˜ ๋‘๋ฒˆ์งธ resource๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๊ฒƒ์€ deadlock์ด ์•„๋‹ˆ๋‹ค.

4 Deadlock์˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

  • Deadlock Prevention
    • ์ž์› ํ• ๋‹น ์‹œ Deadlock์˜ 4๊ฐ€์ง€ ํ•„์š” ์กฐ๊ฑด ์ค‘ ์–ด๋Š ํ•˜๋‚˜๊ฐ€ ๋งŒ์กฑ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ
  • Deadlock Avoidance
    • ์ž์› ์š”์ฒญ์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ deadlock์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ (์ฆ‰, ์‹œ์Šคํ…œ state๊ฐ€ ์›๋ž˜ state ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ)์—๋งŒ ์ž์› ํ• ๋‹น
  • Deadlock Detection and Recovery
    • deadlock ๋ฐœ์ƒ์€ ํ—ˆ์šฉํ•˜๋˜ ๊ทธ์— ๋Œ€ํ•œ detection ๋ฃจํ‹ด์„ ๋‘์–ด deadlock ๋ฐœ๊ฒฌ ์‹œ recovery
  • Deadlock Ignorance
    • Deadlock์„ ์‹œ์Šคํ…œ์ด ์ฑ…์ž„์ง€์ง€ ์•Š๋Š”๋‹ค. UNIX๋ฅผ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ OS๊ฐ€ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค.

4-1. Deadlock Prevention

์ž์› ํ• ๋‹น ์‹œ Deadlock์˜ 4๊ฐ€์ง€ ํ•„์š” ์กฐ๊ฑด ์ค‘ ์–ด๋Š ํ•˜๋‚˜๊ฐ€ ๋งŒ์กฑ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ

1) Mutual exclusion

  • ๋ฐฐ์ œ ๋ถˆ๊ฐ€ํ•˜๋‹ค. ๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ์ž์›์˜ ๋ฐ˜๋“œ์‹œ ์„ฑ๋ฆฝํ•˜๊ฒŒ ๋˜์–ด ์žˆ๋‹ค.

2) Hold and Wait

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์š”์ฒญํ•  ๋•Œ ๋‹ค๋ฅธ ์–ด๋–ค ์ž์›๋„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  • hold๋ฅผ ํ•˜์ง€ ์•Š๋„๋ก ํ•ด์„œ deadlock์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
  • ๋ฐฉ๋ฒ• 1. ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘ ์‹œ ๋ชจ๋“  ํ•„์š”ํ•œ ์ž์›์„ ํ• ๋‹น๋ฐ›๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ๋‹จ์ : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งค ์‹œ์  ํ•„์š”ํ•œ ์ž์›์ด ๋‹ค๋ฅด๊ธฐ์— ์ž์›์˜ ๋น„ํšจ์œจ์„ฑ์ด ๋†’์•„์ง€๋ฏ€๋กœ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค
  • ๋ฐฉ๋ฒ• 2. (์ž์›์„ ๋‚ด๋†“์ง€ ์•Š๊ณ  ์š”์ฒญํ•  ๊ฒฝ์šฐ deadlock ๋ฐœ์ƒํ•˜๊ธฐ์—) ์ž์›์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณด์œ ์ž์›์„ ๋ชจ๋‘ ๋ฐ˜ํ™˜ ๋’ค ๋‹ค์‹œ ์š”์ฒญ
    • ์ž์› ๋น„ํšจ์œจ์„ฑ์ด ๋†’์ง€ ์•Š๋‹ค.

3) No Preemption

  • process๊ฐ€ ์–ด๋–ค ์ž์›์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ ๋ณด์œ ํ•œ ์ž์›์ด ์„ ์ ๋จ(๊ฐ•์ œ๋กœ ๋นผ์•—๊ธธ ์ˆ˜ ์žˆ์Œ)
  • ๋ชจ๋“  ํ•„์š”ํ•œ ์ž์›์„ ์–ป์„ ์ˆ˜ ์žˆ์„ ๋•Œ ํ”„๋กœ์„ธ์Šค ๋‹ค์‹œ ์‹œ์ž‘
  • State๋ฅผ ์‰ฝ๊ฒŒ save์ €์žฅ, restore๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”(=context switch) ์ž์›์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ (CPU, memory)

4) Circular wait

  • ๋ชจ๋“  ์ž์› ์œ ํ˜•์— ํ• ๋‹น ์ˆœ์„œ๋ฅผ ์ •ํ•˜์—ฌ ์ •ํ•ด์ง„ ์ˆœ์„œ๋Œ€๋กœ๋งŒ ์ž์›์„ ํ• ๋‹นํ•œ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์Œ๋ฐฉํ–ฅ์œผ๋กœ์˜ ์ž์› ์š”๊ตฌ๊ฐ€ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ Cycle์ด ์ƒ๊ธธ ์šฐ๋ ค๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆœ์„œ๊ฐ€ 3์ธ ์ž์› Ri ๋ฅผ ๋ณด์œ  ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆœ์„œ 1์ธ ์ž์› Rj๋ฅผ ํ• ๋‹น๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  Ri๋ฅผ releaseํ•ด์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์œ„์˜ ๋ฐฉ๋ฒ•๋“ค์€ Utilization ์ž์› ์ด์šฉ๋ฅ  ์ €ํ•˜, throughput ์ฒ˜๋ฆฌ๋Ÿ‰ ๊ฐ์†Œ, starvation ํ˜„์ƒ ๋“ฑ์ด ๋ฐœ์ƒํ•œ๋‹ค.

๋˜ํ•œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์€ deadlock ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์ด ๋งŽ๊ธฐ์— ๋น„ํšจ์œจ์ ์ด๋‹ค.

4-2. Deadlock Avoidance

*์ฐธ๊ณ ๋กœ prevention๊ณผ avoidance์˜ ๋‰˜์•™์Šค์˜ ์ฐจ์ด์ ์€

  • prevention: activeํ•˜๊ฒŒ ์ ๊ทน์ ์œผ๋กœ ๋ง‰๋Š”๋‹ค.
  • avoidance: ๋ฌธ์ œ์ ์œผ๋กœ๋ถ€ํ„ฐ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง€๋„๋ก ํ•ด์„œ deadlock์„ ๋ง‰๋Š”๋‹ค.

 

์ •์˜

  • ์ž์› ์š”์ฒญ์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ deadlock์œผ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „(safe)ํ•œ์ง€๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์‚ฌํ•ด์„œ ์•ˆ์ „ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ž์› ํ• ๋‹น
    • ์‹œ์Šคํ…œ์ด unsafe state์— ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณด์žฅ
  • ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ์ผ๋ฐ˜์ ์ธ ๋ชจ๋ธ์€ ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ•„์š”๋กœ ํ•˜๋Š” ๊ฐ ์ž์›๋ณ„ ์ตœ๋Œ€ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ฏธ๋ฆฌ ์„ ์–ธํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ์‹œ์Šคํ…œ state๊ฐ€ ์›๋ž˜ state ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž์› ํ• ๋‹น

safe state: ์‹œ์Šคํ…œ ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๋“ค์— ๋Œ€ํ•œ safe sequence๊ฐ€ ์กด์žฌํ•˜๋Š” ์ƒํƒœ

safe sequence:

  • ํ”„๋กœ์„ธ์Šค์˜ sequence <P1, P2, ..., Pn>์ด safeํ•˜๋ ค๋ฉด Pi์˜ ์ž์›์š”์ฒญ์ด "๊ฐ€์šฉ ์ž์› + ๋ชจ๋“  Pj (i < i)"์— ์˜ํ•ด ์ถฉ์กฑ๋˜์–ด์•ผ ํ•จ.
  • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค๋ฉด ๋‹ค์Œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์„ ๋ณด์žฅ
    • Pi์˜ ์ž์› ์š”์ฒญ์ด ์ฆ‰์‹œ ์ถฉ์กฑ๋  ์ˆ˜ ์—†์œผ๋ฉด ๋ชจ๋“  Pj (j < i)๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
    • Pi-1์ด ์ข…๋ฃŒ๋˜๋ฉด Pi์˜ ์ž์›์š”์ฒญ์„ ๋งŒ์กฑ์‹œ์ผœ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ •๋ฆฌํ•˜๋ฉด:

์ž์› ์š”์ฒญ์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ deadlock ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž์›์„ ํ• ๋‹นํ•ด์ค€๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ๊ทธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ตœ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ž์›์„ ๋ฏธ๋ฆฌ ์•Œ๋ ค์ค€๋‹ค. ๋”ฐ๋ผ์„œ ์ž์›์„ ์š”์ฒญ ์‹œ deadlock ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฉด ์ž์›์ด ์ถฉ๋ถ„ํ•ด๋„ ํ• ๋‹นํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค.

์‹œ์Šคํ…œ์ด safe state์— ์žˆ์œผ๋ฉด → no deadlock

์‹œ์Šคํ…œ์ด unsafe state์— ์žˆ์œผ๋ฉด → possibility of deadlock

 

2๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ avoidance ์•Œ๊ณ ๋ฆฌ์ฆ˜

  1. Single instance per resource types
    • Resource Allocation Graph Algorithm ์‚ฌ์šฉ์ ์„  ํ™”์‚ดํ‘œ๋Š” claim edge๋ผ๊ณ  ํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ๋ฏธ๋ž˜์— ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค. ์š”์ฒญํ•˜๋ฉด request edge๋กœ ๋ฐ”๋€Œ๊ณ  ์ž์›์ด release ๋˜๋ฉด assignment edge๋Š” ๋‹ค์‹œ claim edge๋กœ ๋ณ€ํ•œ๋‹ค.
    • ๋‘๋ฒˆ์งธ ๊ทธ๋ฆผ์—์„œ ์ƒ๊ธด request edge์˜ ๊ฒฝ์šฐ P2๊ฐ€ R2๋ฅผ ์š”์ฒญํ•ด๋„ ์ž์›์„ ํ• ๋‹น๋ฐ›์ง€ ๋ชปํ•œ๋‹ค. ๋‚ด์–ด์ฃผ๊ฒŒ ๋œ๋‹ค๋ฉด(assignment edge ๋ณ€๊ฒฝ ์‹œ) ์„ธ๋ฒˆ์งธ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด cycle์ด ํ˜•์„ฑ๋˜์–ด deadlock์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  2. Multiple instances per resource types
    • Banker's Algorithm
      • ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ์ตœ๋Œ€ ์š”์ฒญ ์ž์› ์ˆ˜๋ฅผ ์ถฉ์กฑํ•˜๋Š” ์‹œํ€€์Šค๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ safe state (์ ˆ๋Œ€ deadlock์ด ์ƒ๊ธฐ์ง€ ์•Š์Œ)
      • ํ•˜์ง€๋งŒ ์ž์›์ด ๋‚จ์•„ ๋Œ์•„๋„ ์ตœ๋Œ€ ์š”์ฒญ์ด ๊ฐ€์šฉ ์ž์› ์ˆ˜๋ณด๋‹ค ์ ์œผ๋ฉด ์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ 

4-3. Deadlock Detection and Recovery

deadlock ๋ฐœ์ƒ์€ ๊ทธ๋Œ€๋กœ ๋†”๋‘์ง€๋งŒ ๊ทธ์— ๋Œ€ํ•œ detection routine์„ ๋‘์–ด deadlock ๋ฐœ๊ฒฌ ์‹œ recovery ํ•œ๋‹ค.

Deadlock Detection

  1. resource types ๋‹น Single instance์ธ ๊ฒฝ์šฐ
    • Resource Allocation Graph์—์„œ์˜ cycle์ด ๊ณง deadlock์„ ์˜๋ฏธ
    • Wait-for graph
      • ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„์—์„œ ํ”„๋กœ์„ธ์Šค๋งŒ์œผ๋กœ node ๊ตฌ์„ฑ๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งํ•จ
      • Wait-for graph์— ์‚ฌ์ดํด์ด ์กด์žฌํ•˜๋Š”์ง€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์กฐ์‚ฌํ•˜๋Š” Algorithm O(n^2) ๋™์ž‘
  2. resource types ๋‹น Multiple instances์ธ ๊ฒฝ์šฐ
    • Banker's Algorithm๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ๋ฒ• ํ™œ์šฉ

Recovery

  • Process termination - ํ”„๋กœ์„ธ์Šค ์ฃฝ์ด๊ธฐ
    1. deadlock์— ์—ฐ๋ฃจ๋œ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๋ชจ๋‘ ์ฃฝ์ž„
    2. deadlock์— ์—ฐ๋ฃจ๋œ ํ”„๋กœ์„ธ์Šค๋“ค์„ ํ•˜๋‚˜์”ฉ ์ฃฝ์ž„ (deadlock์ด ์—†์–ด์งˆ ๋•Œ๊นŒ์ง€)
  • Resource preemption - ์ž์› ๋บ๊ธฐ
    • deadlock์— ์—ฐ๋ฃจ๋œ ํ”„๋กœ์„ธ์Šค๋“ค๋กœ๋ถ€ํ„ฐ ์ž์›์„ ๋บ๋Š” ๋ฐฉ๋ฒ•
    • ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•  victim์˜ ์„ ์ •
    • victim (ํฌ์ƒ์–‘ ํ”„๋กœ์„ธ์Šค)๋ฅผ ํ•˜๋‚˜ ์„ ์ •ํ•ด์„œ ์ž์›์„ ๊ฐ•์ œ๋กœ ๋บ์Œ → safe state๋กœ rollbackํ•˜์—ฌ process๋ฅผ restart
    • ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์† victim์œผ๋กœ ์„ ์ •๋˜๋ฉด starvation ๋ฌธ์ œ ๋ฐœ์ƒ → cost factor(๋น„์šฉ์  ์ธก๋ฉด)์—์„œ rollback ํšŸ์ˆ˜ ๊ฐ™์ด ๊ณ ๋ คํ•ด์•ผ ํ•จ.

4-4. Deadlock Ignorance

  • ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ ์šด์˜์ฒด์ œ์—์„œ ์ฑ„ํƒํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, deadlock์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค ์ƒ๊ฐํ•˜๊ณ  ์•„๋ฌด๋Ÿฐ ์กฐ์น˜๋„ ์ทจํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.
  • deadlock์€ ๋งค์šฐ ๋“œ๋ฌผ๊ฒŒ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ๋” ํฐ ์˜ค๋ฒ„ํ—ค๋“œ์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๋งŒ์•ฝ ์‹œ์Šคํ…œ์— deadlock์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์ด ๋Š๋ ค์ง€๊ฑฐ๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉˆ์ถ˜ ๊ฒƒ์„ ์‚ฌ์šฉ์ž๊ฐ€ ๋Š๋‚„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ผ๋ถ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง์ ‘ ์ฃฝ์ด๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋Œ€์ฒ˜ํ•œ๋‹ค.
  • UNIX๋ฅผ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ OS๊ฐ€ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋‹ค.

'OS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

10์žฅ File Systems  (0) 2021.06.19
9์žฅ Virtual Memory  (0) 2021.06.19
8์žฅ Memory Management  (0) 2021.06.19
6์žฅ Process Synchronization  (0) 2021.06.19
5์žฅ CPU scheduling  (0) 2021.06.18
4์žฅ Process Management  (0) 2021.06.18