The Deadlock problem

Deadlock

  • ์ผ๋ จ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์„œ๋กœ๊ฐ€ ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ block๋œ ์ƒํƒœ

Resource(์ž์›)

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

Deadlock Example 1

  • ์‹œ์Šคํ…œ์— 2๊ฐœ์˜ tape drive๊ฐ€ ์žˆ์Œ
  • ํ”„๋กœ์„ธ์Šค P1๊ณผ P2 ๊ฐ๊ฐ์ด ํ•˜๋‚˜์˜ tape drive๋ฅผ ๋ณด์œ ํ•œ ์ฑ„ ๋‹ค๋ฅธ ํ•˜๋‚˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Œ

Deadlock Example 2

  • Binary semaphores A and B
P0       P1
P(A);    P(B);
P(B);    P(A);

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

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

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

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

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

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

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

4. Circular wait(ํ™˜ํ˜• ๋Œ€๊ธฐ)

  • ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„์— ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋˜์–ด์•ผ ํ•จ
  • ํ”„๋กœ์„ธ์Šค P0, P1 โ€ฆ Pn์ด ์žˆ์„ ๋•Œ
P0์€ P1์ด ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆผ
P1์€ P2๊ฐ€ ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆผ
Pn-1์€ Pn์ด ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆผ
Pn์€ P0์ด ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆผ

Resource-Allocation Graph (์ž์›ํ• ๋‹น ๊ทธ๋ž˜ํ”„) -> deadlock ํŒ๋ณ„ ๋ฐฉ๋ฒ•

  • ์ž์›์—์„œ ํ”„๋กœ์„ธ์Šค๋กœ ๊ฐ€๋Š” ํ™”์‚ดํ‘œ์˜ ์˜๋ฏธ
    • ์ž์›์„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๋œป
  • ํ”„๋กœ์„ธ์Šค์—์„œ ์ž์›์œผ๋กœ ๊ฐ€๋Š” ํ™”์‚ดํ‘œ
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š”๋‹ค๋Š” ๋œป
  • ์ž์› ์•ˆ์— ์ ์˜ ์˜๋ฏธ
    • ์ž์› ์•ˆ์— ์ธ์Šคํ„ด์Šค์˜ ๊ฐฏ์ˆ˜

Vertex

  • Process = {P1, P2, โ€ฆ, Pn}
    • ๊ทธ๋ฆผ์—์„œ ๋™๊ทธ๋ผ๋ฏธ
  • Resource = {R1, R2, โ€ฆ, Rm}
    • ๊ทธ๋ฆผ์—์„œ ์‚ฌ๊ฐํ˜•

Edge

  • request edge Pi -> Rj
  • assignment edge Rj -> Pi

  • ๊ทธ๋ž˜ํ”„์— cycle์ด ์—†์œผ๋ฉด deadlock์ด ์•„๋‹˜
  • ๊ทธ๋ž˜ํ”„์— cycle์ด ์žˆ์œผ๋ฉด
    • if only one instance per resoure type, then deadlock
    • if several instances per resource type, possibility of deadlock
  • ์™ผ์ชฝ ๊ทธ๋ฆผ์—์„œ P1 ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋‹ค์‹œ P1์œผ๋กœ ๋Œ์•„์˜ค๋Š” cycle ํ•œ ๊ฐœ๊ฐ€์ด ์žˆ๊ณ  P2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋‹ค์‹œ P2๋กœ ๋Œ์•„์˜ค๋Š” cycle์ด ์กด์žฌํ•จ, R2 ์ž์›์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ 2๊ฐœ ์ด์ง€๋งŒ ๋ชจ๋‘ cycle๋กœ ํ˜•์„ฑ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— deadlock ์ž„
  • ์˜ค๋ฅธ์ชฝ์˜ ๊ทธ๋ฆผ์€ P1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ cycle์€ ์žˆ์ง€๋งŒ R1๊ณผ R2์˜ ์ž์›์— ์ธ์Šคํ„ด์Šค๊ฐ€ 2๊ฐœ์”ฉ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— deadlock์ด ์•„๋‹˜ ๋‚˜๋จธ์ง€ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋Š” ์‚ฌ์ดํด๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ณ  ์žˆ์Œ

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

1. Deadlock Prevention

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

2. Deadlock Avoidance

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

3. Deadlock Detection and recovery

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

4. Deadlock Ignorance

  • Deadlock์„ ์‹œ์Šคํ…œ์ด ์ฑ…์ž„์ง€์ง€ ์•Š์Œ
  • UNIX๋ฅผ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ OS๊ฐ€ ์ฑ„ํƒ

  • 1๋ฒˆ๊ณผ 2๋ฒˆ์€ deadlock์ด ์•ˆ์ƒ๊ธฐ๊ฒŒ ๋ฏธ์—ฐ์— ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • 3๋ฒˆ๊ณผ 4๋ฒˆ์€ deadlock์ด ์ƒ๊ธฐ๋“ ์ง€ ๋ง๋“ ์ง€ ๋‚ด๋น„๋‘ 

Deadlock Prevention

Mutual Exclusion

  • ๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ์ž์›์˜ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ์„ฑ๋ฆฝํ•ด์•ผ ํ•จ

Hold and wait

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์š”์ฒญํ•  ๋•Œ ์–ด๋–ค ์ž์›๋„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Œ
  • ๋ฐฉ๋ฒ• 1. ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘ ์‹œ ๋ชจ๋“  ํ•„์š”ํ•œ ์ž์›์„ ํ• ๋‹น ๋ฐ›๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋ฐฉ๋ฒ• 2. ์ž์›์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ๋ณด์œ  ์ž์›์„ ๋ชจ๋‘ ๋†“๊ณ  ๋‹ค์‹œ ์š”์ฒญ

No Preemption

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

Circular Wait

  • ๋ชจ๋“  ์ž์› ์œ ํ˜•์— ํ• ๋‹น ์ˆœ์„œ๋ฅผ ์ •ํ•˜์—ฌ ์ •ํ•ด์ง„ ์ˆœ์„œ๋Œ€๋กœ๋งŒ ์ž์› ํ• ๋‹น
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆœ์„œ๊ฐ€ 3์ธ ์ž์› Ri๋ฅผ ๋ณด์œ  ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆœ์„œ๊ฐ€ 1์ธ ์ž์› Rj์„ ํ• ๋‹น๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  Ri๋ฅผ releaseํ•ด์•ผ ํ•จ

-> Utilization ์ €ํ•˜, throughput ๊ฐ์†Œ, starvation ๋ฌธ์ œ

Deadlock Avoidance

Deadlock avoidance

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

safe state

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

safe sequence

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

Deadlock Avoidance

  • ์‹œ์Šคํ…œ์ด safe state์— ์žˆ์œผ๋ฉด -> no deadlock
  • ์‹œ์Šคํ…œ์ด unsafe state์— ์žˆ์œผ๋ฉด -> possibility of deadlock
  • Deadlock Avoidance
    • ์‹œ์Šคํ…œ์ด unsafe state์— ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณด์žฅ

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

  • Single instance per resource types
    • Resource Allocation Graph algorithm ์‚ฌ์šฉ
  • Multiple instance per resource types
    • Bankerโ€™s Algorithm ์‚ฌ์šฉ

Resource Allocation Graph algorithm

์ ์„ ์€ ํ•œ ๋ฒˆ ์žˆ์„ ๊นŒ ๋ง ๊นŒํ•œ ๊ฒฝ์šฐ๋ฅผ ํ‘œ์‹œํ•œ ๊ฒƒ

์ ์„ ์„ ํฌํ•จํ•ด์„œ ์‚ฌ์ดํด์ด ๋งŒ๋“ค์–ด ์งˆ๊ฑฐ ๊ฐ™์œผ๋ฉด ์•„์˜ˆ ์ž์›์„ ์ฃผ์ง€ ์•Š์Œ

Example of Bankerโ€™s Algorithm

Deadlock Detection and recovery

Deadlock Detection

  • Resource type ๋‹น single instance์ธ ๊ฒฝ์šฐ
    • ์ž์›ํ• ๋‹น ๊ทธ๋ž˜ํ”„์—์„œ์˜ cycle์ด ๊ณง deadlock์„ ์˜๋ฏธ
  • Resource type ๋‹น multiple instance์ธ ๊ฒฝ์šฐ
    • Bankerโ€™s algorithm๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ๋ฒ• ํ™œ์šฉ

Wait-for graph ์•Œ๊ณ ๋ฆฌ์ฆ˜

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

Deadlock Ignorance

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

reference

์šด์˜์ฒด์ œ - ์ดํ™”์—ฌ์ž๋Œ€ํ•™๊ต