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

๐Ÿ–ฅ CS/์šด์˜์ฒด์ œ

[์šด์˜์ฒด์ œ] ๊ต์ฐฉ ์ƒํƒœ (Deadlock)

๋ณธ ๊ฒŒ์‹œ๊ธ€์€ KOCW ์ดํ™”์—ฌ์ž๋Œ€ํ•™๊ต ๋ฐ˜ํšจ๊ฒฝ ๊ต์ˆ˜๋‹˜์˜ <์šด์˜์ฒด์ œ> ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ ,
<ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋Š” ์ปดํ“จํ„ฐ๊ตฌ์กฐ + ์šด์˜์ฒด์ œ> ์ฑ…์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
๊ฒŒ์‹œ๊ธ€์— ํฌํ•จ๋˜๋Š” ์ด๋ฏธ์ง€ ์ž๋ฃŒ๋Š” <์šด์˜์ฒด์ œ> ๊ฐ•์˜์— ํฌํ•จ๋œ ๊ฐ•์˜ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค.

๊ต์ฐฉ ์ƒํƒœ(Deadlock)๋ž€?

์ผ๋ จ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์„œ๋กœ๊ฐ€ ๊ฐ€์ง„ ์ž์›(resource)์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ block๋œ ์ƒํƒœ๋ฅผ ๊ต์ฐฉ์ƒํƒœ(deadlock)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์ž์›(resource)

  • ํ•˜๋“œ์›จ์–ด, ์†Œํ”„ํŠธ์›จ์–ด ๋“ฑ์„ ํฌํ•จํ•˜๋Š” ๊ฐœ๋…
    • ex) I/O device, CPU cycle, memory space, semaphore ๋“ฑ
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ์ ˆ์ฐจ
    •  Request(์š”์ฒญ) -> Allocate(ํš๋“) -> Use(์‚ฌ์šฉ) -> Release(๋ฐ˜๋‚ฉ)

Deadlock ๋ฐœ์ƒ์˜ 4๊ฐ€์ง€ ์กฐ๊ฑด

๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์กฐ๊ฑด์—๋Š” ๋„ค ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค ๊ฐ€์ง€ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ, ์•„๋ž˜์˜ ์กฐ๊ฑด์ด ๋ชจ๋‘ ๋งŒ์กฑ๋  ๋•Œ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ๊น๋‹ˆ๋‹ค.

 

Mutual exclution (์ƒํ˜ธ ๋ฐฐ์ œ)

๋งค ์ˆœ๊ฐ„ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ž์›์„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

No preemption (๋น„์„ ์ )

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

 

Hold and Wait (์ ์œ ์™€ ๋Œ€๊ธฐ)

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

์–ด๋–ค ์ž์›์„ ํ• ๋‹น๋ฐ›์€ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ž์›์„ ํ• ๋‹น๋ฐ›๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋ฉด ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Circular wait (์›ํ˜• ๋Œ€๊ธฐ)

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

ex) ํ”„๋กœ์„ธ์Šค P0, P1, ..., Pn์ด ์žˆ์„ ๋•Œ

P0์€ P1์ด ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆผ

P1์€ P2๊ฐ€ ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆผ

Pn์€ P0์ด ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆผ

์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„ (Resource-Allocation Graph)

๊ต์ฐฉ ์ƒํƒœ๋Š” ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ๋‹จ์ˆœํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„๋Š” ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์ž์›์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ , ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.

 

์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„

  • ์›: ํ”„๋กœ์„ธ์Šค(process), ์‚ฌ๊ฐํ˜•: ์ž์›(resource), ์ (์‚ฌ๊ฐํ˜• ๋‚ด): ์ž์›์˜ ๊ฐœ์ˆ˜
  • ํ™”์‚ดํ‘œ ๋ฐฉํ–ฅ
    • ํ”„๋กœ์„ธ์Šค(์›) -> ์ž์›(์‚ฌ๊ฐํ˜•): ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ
    • ์ž์›(์‚ฌ๊ฐํ˜•) -> ํ”„๋กœ์„ธ์Šค(์›): ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉ ์ค‘

 

  • ๊ทธ๋ž˜ํ”„์— cycle์ด ์—†์œผ๋ฉด deadlock์ด ์•„๋‹˜
  • ๊ทธ๋ž˜ํ”„์— cycle์ด ์žˆ์œผ๋ฉด - deadlock ๊ฐ€๋Šฅ์„ฑ (๋ฌด์กฐ๊ฑด deadlock์€ ์•„๋‹˜)
    • 1๋ฒˆ ๊ทธ๋ฆผ: deadlock O
    • 2๋ฒˆ ๊ทธ๋ฆผ: deadlock X - cycle์ด 1๊ฐœ ์žˆ์œผ๋‚˜ ์ž์›์ด 2๊ฐœ์”ฉ์ด๊ณ  P2์™€ P4๋Š” ๊ด€๋ จ์—†๊ธฐ ๋•Œ๋ฌธ(P2 or P4 ์ž์› ๋ฐ˜๋‚ฉ ์‹œ ์‚ฌ์ดํด ์‚ฌ๋ผ์ง)

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

Deadlock Prevention (๊ต์ฐฉ ์ƒํƒœ ์˜ˆ๋ฐฉ)

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

 

Deadlock Avoidance (๊ต์ฐฉ ์ƒํƒœ ํšŒํ”ผ)

- ์ž์› ์š”์ฒญ์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ deadlock์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž์›์„ ํ• ๋‹น

- ์‹œ์Šคํ…œ state๊ฐ€ ์›๋ž˜ state๋กœ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž์› ํ• ๋‹น

 

Deadlock Detection and recovery (๊ต์ฐฉ ์ƒํƒœ ๊ฒ€์ถœ ํ›„ ํšŒ๋ณต)

- deadlock ๋ฐœ์ƒ์€ ํ—ˆ์šฉํ•˜๋˜ ๊ทธ์— ๋Œ€ํ•œ detection ๋ฃจํ‹ด์„ ๋‘์–ด deadlock ๋ฐœ๊ฒฌ ์‹œ recover

 

Deadlock Ignorance

- deadlock์„ ์‹œ์Šคํ…œ์ด ์ฑ…์ž„์ง€์ง€ ์•Š์Œ

- UNIX๋ฅผ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ OS๊ฐ€ ์ฑ„ํƒ

Deadlock Prevention

deadlock ๋ฐœ์ƒ์กฐ๊ฑด 4๊ฐ€์ง€ ์ค‘ ์–ด๋Š ํ•˜๋‚˜๋ฅผ ์›์ฒœ์ ์œผ๋กœ ์ฐจ๋‹จํ•ด์„œ deadlock์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•

 

1. Mutual Exclusion (์ƒํ˜ธ๋ฐฐ์ œ)

๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ์ž์›์˜ ๊ฒฝ์šฐ ๋ฐฐ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์€ ์•„๋‹˜ (ํ˜„์‹ค์ ์œผ๋กœ ๋ฌด๋ฆฌ)

 

2. Hold and Wait (์ ์œ ์™€ ๋Œ€๊ธฐ)

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์š”์ฒญํ•  ๋•Œ ๋‹ค๋ฅธ ์–ด๋–ค ์ž์›๋„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์•„์•ผ ํ•จ

๋ฐฉ๋ฒ• 1) ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘ ์‹œ ๋ชจ๋“  ํ•„์š”ํ•œ ์ž์›์„ ํ• ๋‹น๋ฐ›๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ• (๋น„ํšจ์œจ์ )

๋ฐฉ๋ฒ• 2) ์ž์›์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ๋ณด์œ  ์ž์›์„ ๋ชจ๋‘ ๋†“๊ณ  ๋‹ค์‹œ ์š”์ฒญ

 

3. No Preemption (๋น„์„ ์ )

- ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์ž์›์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ ๋ณด์œ ํ•œ ์ž์›์ด ์„ ์ ๋จ

- ๋ชจ๋“  ํ•„์š”ํ•œ ์ž์›์„ ์–ป์„ ์ˆ˜ ์žˆ์„ ๋•Œ ๊ทธ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์‹œ ์‹œ์ž‘๋œ๋‹ค

- ์ž์›์„ ์ด์šฉ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ํ•ด๋‹น ์ž์›์„ ๋นผ์•—์„ ์ˆ˜ ์žˆ์Œ

- State๋ฅผ ์‰ฝ๊ฒŒ saveํ•˜๊ณ  restoreํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ. ์ฆ‰, ์ผ๋ถ€ ์ž์›์— ๋Œ€ํ•ด์„œ๋Š” ํšจ๊ณผ์ (CPU, memory)

 

4. Circular Wait (์›ํ˜• ๋Œ€๊ธฐ)

๋ชจ๋“  ์ž์› ์œ ํ˜•์— ํ• ๋‹น ์ˆœ์„œ๋ฅผ ์ •ํ•˜์—ฌ ์ •ํ•ด์ง„ ์ˆœ์„œ๋Œ€๋กœ๋งŒ ์ž์› ํ• ๋‹น

ex) ์ˆœ์„œ๊ฐ€ 3์ธ ์ž์› Ri๋ฅผ ๋ณด์œ  ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆœ์„œ๊ฐ€ 1์ธ ์ž์› Rj๋ฅผ ํ• ๋‹น๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  Ri๋ฅผ releaseํ•ด์•ผ ํ•จ

 

deadlock ๋ฐœ์ƒ ์กฐ๊ฑด์„ ์›์ฒœ์ ์œผ๋กœ ์ œ๊ฑฐํ•˜์—ฌ deadlock์„ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜๋Š” ์˜ˆ๋ฐฉ ๋ฐฉ์‹์€ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž์› ์ด์šฉ๋ฅ (utilization)์ด ๋‚ฎ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์„ฑ๋Šฅ(throughput) ๋˜ํ•œ ๊ฐ์†Œํ•˜๋ฉฐ, starvation ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋Š” ๋ถ€์ž‘์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Deadlock Avoidance

๊ต์ฐฉ ์ƒํƒœ ํšŒํ”ผ๋Š” ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ์ •๋„๋กœ๋งŒ ์กฐ์‹ฌ ์กฐ์‹ฌ ์ž์›์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ต์ฐฉ ์ƒํƒœ ํšŒํ”ผ ๋ฐฉ์‹์—์„œ๋Š” ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํ•œ์ •๋œ ์ž์›์˜ ๋ฌด๋ถ„๋ณ„ํ•œ ํ• ๋‹น์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

 

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

safe state

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

safe sequence

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

์ž์› ๋‹น ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ - Resource Allocation Graph Algorithm

์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„์—์„œ Claim Edge ๋ผ๋Š” ๊ฐœ๋… ์ถ”๊ฐ€

 

Claim Edge

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ๋ฏธ๋ž˜์— ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Œ์„ ๋œปํ•จ (์ ์„ ์œผ๋กœ ํ‘œ์‹œ)
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•ด๋‹น ์ž์› ์š”์ฒญ ์‹œ request edge(์‹ค์„ )์œผ๋กœ ๋ฐ”๋€œ
  • ์ž์›์ด release ๋˜๋ฉด assignment edge๋Š” ๋‹ค์‹œ claim edge๋กœ ๋ฐ”๋€œ
  • ์ ์„ ์„ ํฌํ•จํ•˜์—ฌ cycle์ด ์ƒ๊ธฐ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋งŒ ์š”์ฒญ ์ž์›์„ ํ• ๋‹น

์ž์› ๋‹น ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ - Banker's Algorithm

๊ฐ€์ •

  • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ์ž์›์˜ ์ตœ๋Œ€ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ฏธ๋ฆฌ ๋ช…์‹œ
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”์ฒญ ์ž์›์„ ๋ชจ๋‘ ํ• ๋‹น๋ฐ›์€ ๊ฒฝ์šฐ ์œ ํ•œ ์‹œ๊ฐ„ ์•ˆ์— ์ด๋“ค ์ž์›์„ ๋‹ค์‹œ ๋ฐ˜๋‚ฉํ•œ๋‹ค

๋ฐฉ๋ฒ•

  • ๊ธฐ๋ณธ ๊ฐœ๋…: ์ž์› ์š”์ฒญ ์‹œ safe ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ๊ฒฝ์šฐ์—๋งŒ ํ• ๋‹น
  • ์ด ์š”์ฒญ ์ž์›์˜ ์ˆ˜๊ฐ€ ๊ฐ€์šฉ ์ž์›์˜ ์ˆ˜๋ณด๋‹ค ์ ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒ (๊ทธ๋Ÿฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋‹ค๋ฉด unsafe ์ƒํƒœ)
  • (์ด ์š”์ฒญ ์ž์›์˜ ์ˆ˜ <= ๊ฐ€์šฉ ์ž์›์˜ ์ˆ˜) ์ธ ํ”„๋กœ์„ธ์Šค ์žˆ์œผ๋ฉด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ž์› ํ• ๋‹น
  • ํ• ๋‹น๋ฐ›์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ชจ๋“  ์ž์›์„ ๋ฐ˜๋‚ฉ
  • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ด๋Ÿฌํ•œ ๊ณผ์ • ๋ฐ˜๋ณต

์˜ˆ์‹œ

  • 5๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค : P0~P4
  • 3๊ฐœ์˜ ์ž์› : A 10๊ฐœ, B 5๊ฐœ, C 7๊ฐœ
  • Allocation : ํ˜„์žฌ ๊ฐ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž์›
  • Max : ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ‰์ƒ ์‚ฌ์šฉํ•  ์ž์›
  • Available : ๊ฐ€์šฉ ์ž์› 
  • Need : ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•ž์œผ๋กœ ์‚ฌ์šฉํ•  ์ž์›

  • Need <= Available ์ด๋ฉด safe ์ƒํƒœ์ด๋ฏ€๋กœ ์ž์› ํ• ๋‹น
  • safe sequence < P1 P3 P2 P4 P0 >์ด ์กด์žฌํ•˜๋ฏ€๋กœ ์‹œ์Šคํ…œ์€ safe state
  • ํ•ญ์ƒ ์ตœ์•…์˜ ๊ฒฝ์šฐ ๊ณ ๋ ค (unsafe ์ƒํƒœ๋ผ๋ฉด ํ• ๋‹นx ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ํ›„ ์ž์› ๋ฐ˜๋‚ฉ๊นŒ์ง€ ๋Œ€๊ธฐ)
  • ์ ˆ๋Œ€ ๋ฐ๋“œ๋ฝ์ด ์ƒ๊ธธ ์ˆ˜๊ฐ€ ์—†์Œ. but ์ž์›์ด ๋‚จ๋Š”๋ฐ๋„ ์ตœ์•…์˜ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•˜๊ณ  ์ž์› ํ• ๋‹น์„ ์•ˆํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ 

Deadlock Detection and Recovery

Deadlock ๋ฐœ์ƒ์€ ํ—ˆ์šฉํ•˜๋‚˜ Deadlock Detiction Routine ์„ ๋‘์–ด์„œ Deadlock ๋ฐœ๊ฒฌ ์‹œ Recover์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ๊ต์ฐฉ ์ƒํƒœ ๋ฐœ์ƒ์„ ์ธ์ •ํ•˜๊ณ  ์‚ฌํ›„์— ์กฐ์น˜ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

Detection) ์ž์›์ด ์ธ์Šคํ„ด์Šค ๋‹น ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ - ๊ทธ๋ž˜ํ”„ ์‚ฌ์šฉ

์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„ vs. wait-for ๊ทธ๋ž˜ํ”„

Wait-for graph

  • ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„์˜ ๋ณ€ํ˜•
  • ํ”„๋กœ์„ธ์Šค๋งŒ์œผ๋กœ node ๊ตฌ์„ฑ
  • Pj๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž์›์„ Pk๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒฝ์šฐ Pk -> Pj
  • Wait-for graph ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • Wait-for graph์— ์‚ฌ์ดํด์ด ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์กฐ์‚ฌ (์‚ฌ์ดํด์ด ๊ณง deadlock์„ ์˜๋ฏธ)
    • O(n^2)

Detection) ์ž์›์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ - Banker's Algorithm๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ๋ฒ• ํ™œ์šฉ

 

  • Banker's ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋น„์Šทํ•˜๋‚˜ ์—ฌ๊ธฐ๋Š” ์ตœ์„ ์˜ ์ƒํ™ฉ ๊ฐ€์ •
  • ์ž์›์„ ํ˜„์žฌ ์š”์ฒญํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค๋Š” ํ• ๋‹น๋œ ์ž์›์„ ๋ฐ˜๋‚ฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋ณธ๋‹ค.
  • Request <= (Available + Request 0 0 0) ์ด๋ฉด ์ž์› ํ• ๋‹น
  • But ์ž์›์„ ๋ฐ˜๋‚ฉํ•œ๋‹ค๊ณ  ํ•ด๋„ Request ๋ณด๋‹ค ์ ๊ฒŒ ๋ฐ˜๋‚ฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Deadlock์˜ ๊ฐ€๋Šฅ์„ฑ์€ ์žˆ์Œ

Recovery

Processs termination (์ข…๋ฃŒ)

๋ฐฉ๋ฒ• 1) ๋ฐ๋“œ๋ฝ์— ์—ฐ๊ด€๋œ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ์ข…๋ฃŒ

๋ฐฉ๋ฒ• 2) ์‚ฌ์ดํด ์—†์–ด์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ๋“œ๋ฝ ์‚ฌ์ดํด์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ์ข…๋ฃŒ์‹œ์ผœ๋ณด๋Š” ๋ฐฉ๋ฒ•

 

Resource Preemption (์ž์›์„ ๋นผ์•—์Œ)

- ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•  victim ์„ ์ •

- safe state๋กœ rollbackํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ restart

- Starvation ๋ฌธ์ œ ๊ฐ€๋Šฅ

   ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์†ํ•ด์„œ victim์œผ๋กœ ์„ ์ •๋˜๋Š” ๊ฒฝ์šฐ ๊ทธ ํ”„๋กœ์„ธ์Šค๋Š” ๊ณ„์†ํ•ด์„œ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 

   ๋น„์šฉ์˜ ๊ณ ๋ ค ์š”์†Œ์— rollback ํšŸ์ˆ˜ (์ž์›์„ ๋นผ์•—๊ธด ํšŸ์ˆ˜) ๋„ ๊ณ ๋ คํ•ด์„œ ์ž์› ๋นผ์•—์„ ํ”„๋กœ์„ธ์Šค ์ •ํ•ด์•ผ ํ•จ

Deadlock Ignorance

Deadlock์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์•„๋ฌด๋Ÿฐ ์กฐ์น˜๋„ ์ทจํ•˜์ง€ ์•Š๋Š”(๋ฌด์‹œ) ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

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