Post

[OS] Operating System(8): Deadlocks

[OS] Operating System(8): Deadlocks

๐Ÿ€ ์šด์˜์ฒด์ œ ์ „๊ณต ์ˆ˜์—… ์ •๋ฆฌ

System Model


๋ฐ๋“œ๋ฝ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „์— ์šด์˜์ฒด์ œ์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋Š”์ง€ ์•Œ์•„๋ณด์ž

์‹œ์Šคํ…œ์€ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๋ฆฌ์†Œ์Šค๋กœ ๊ตฌ์„ฑ๋จ

  • ๋ฆฌ์†Œ์Šค ํƒ€์ž…: $R_1, R_2, โ€ฆ, R_m$ (์˜ˆ: CPU cycle, memory space, I/O device)
  • ๊ฐ ๋ฆฌ์†Œ์Šค ํƒ€์ž… $R_i$๋Š” $W_i$๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง„๋‹ค.

โœ…ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” 3๊ฐ€์ง€ ๋‹จ๊ณ„:

  1. request
  2. use
  3. release

Deadlock in Multithreaded Application


์ด์ œ ์‹ค์ œ deadlock์ด ์–ด๋–ป๊ฒŒ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž

1
2
3
4
5
pthread_mutex_t first_mutex;
pthread_mutex_t second_mutex;

pthread_mutex_init(&first_mutex, NULL);
pthread_mutex_init(&second_mutex, NULL);

๐Ÿ’€ deadlock ๋ฐœ์ƒ ์‹œ๋‚˜๋ฆฌ์˜ค:

  1. Thread 1์ด first_mutex๋ฅผ ํš๋“
  2. Thread 2๊ฐ€ second_mutex๋ฅผ ํš๋“
  3. Thread 1์ด second_mutex๋ฅผ ๊ธฐ๋‹ค๋ฆผ (Thread 2๊ฐ€ ๋ณด์œ  ์ค‘)
  4. Thread 2๊ฐ€ first_mutex๋ฅผ ๊ธฐ๋‹ค๋ฆผ (Thread 1์ด ๋ณด์œ  ์ค‘) โ†’ ๋ฌดํ•œ ๋Œ€๊ธฐ ์ƒํƒœ ๋ฐœ์ƒ!

alt text

deadlock์˜ resource allocation graph

  • thread_one์ด first_mutex๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ƒํƒœ๋กœ second_mutex๋ฅผ ์š”์ฒญ
  • thread_two๊ฐ€ second_mutex๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ƒํƒœ๋กœ first_mutex๋ฅผ ์š”์ฒญ
  • deadlock์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ!

  • deadlock: ์Šค๋ ˆ๋“œ๋“ค์ด ์™„์ „ํžˆ ๋ฉˆ์ถ˜ ์ƒํƒœ(์•„๋ฌด๊ฒƒ๋„ ์ง„ํ–‰ X)
  • livelock: ์Šค๋ ˆ๋“œ๊ฐ€ ์ •์ฒด๋œ ์ƒํƒœ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ณ„์† ์‹œ๋„ํ•ด๋„ ์ง„ํ–‰์ด ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ
    • ex: ๋งˆ์ฃผ ์˜ค๋˜ ๋‘ ์‚ฌ๋žŒ์ด ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ ํ”ผํ•  ๋•Œ, CSMA/CD

Deadlock Characterization


โœ…Deadlock ๋ฐœ์ƒ ํ•„์š”์กฐ๊ฑด:

  1. Mutual exclusion:
    • ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ž์› ์‚ฌ์šฉ ๊ฐ€๋Šฅ โ†’ ์ ์–ด๋„ ํ•˜๋‚˜ ์ž์› ๊ณต์œ ๋ถˆ๊ฐ€!
  2. Hold and wait:
    • ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์ž์›์„ ๋ณด์œ ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณด์œ ํ•œ ์ถ”๊ฐ€ ์ž์›์„ ๊ธฐ๋‹ค๋ ค์•ผํ•จ
  3. No preemption:
    • Task๊ฐ€ ์™„๋ฃŒํ•œ ํ›„ ์ž์›์„ release
  4. Circular wait:
    • ๋Œ€๊ธฐ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์›ํ˜•์ ์œผ๋กœ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ตฌ์กฐ(ex: ์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž ๋ฌธ์ œ)

4๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค๊ณ  ๋ฌด์กฐ๊ฑด deadlock์€ ์•„๋‹ˆ์ง€๋งŒ, deadlock์ผ ๋•Œ 4๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•จ!

Resource-Allocation Graph


P = {Pโ‚, Pโ‚‚, ..., Pโ‚™} = ์‹œ์Šคํ…œ ๋‚ด ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ R = {Rโ‚, Rโ‚‚, ..., Rโ‚˜} = ์‹œ์Šคํ…œ ๋‚ด ๋ฆฌ์†Œ์Šค ํƒ€์ž… ์ง‘ํ•ฉ

  • $P_i$ โ†’ $R_j$ = requset edge
  • $R_j$ โ†’ $P_j$ = assignment edge

alt text

$T_1$: $R_2$ ์ธ์Šคํ„ด์Šค 1๊ฐœ ๋ณด์œ , $R_1$ ์š”์ฒญ
$T_2$: $R_1$๊ณผ $R_2$ ์ธ์Šคํ„ด์Šค ๊ฐ 1๊ฐœ ๋ณด์œ , $R_3$ ์š”์ฒญ
$T_3$: $R_3$ ์ธ์Šคํ„ด์Šค 1๊ฐœ ๋ณด์œ 

  • ๊ฒฐ๊ณผ: No cycle โ†’ No deadlock

alt text

Tโ‚ โ†’ Rโ‚ โ†’ Tโ‚‚ โ†’ Rโ‚ƒ โ†’ Tโ‚ƒ โ†’ Rโ‚‚ โ†’ Tโ‚ : cycle ์กด์žฌ!!!

  • deadlock โ†’ cycle
  • nocycle โ†’ nodeadlock
  • cycle โ†’ deadlock/nodeadlock

alt text

cycle โ†’ nodeadlock ์˜ˆ์‹œ

  • single instacne(Ri์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ 1๊ฐœ)์ธ ๊ฒฝ์šฐ
    • deadlock โ†” cycle
  • multiple instacne(Ri์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ)์ธ ๊ฒฝ์šฐ
    • deadlock โ†’ cycle
    • cycle โ†’ nodeadlock

Methods for Handling Deadlocks


โœ…deadlock์„ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ• 4๊ฐ€์ง€:

  • Deadlcok prevention
    • ํ•„์š”์กฐ๊ฑด 4๊ฐœ ์ค‘ ์ ์–ด๋„ ํ•˜๋‚˜ ์ด์ƒ ์ฐจ๋‹จ
  • Deadlock avoidance
    • ํ•„์š”ํ•œ ์ž์›์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ด์šฉ(๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๋“ค์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ž์›์ด ํ•„์š”ํ•œ์ง€)
  • Deadlock detection
  • Deadlock ignore
  • deadlock์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ์„ ๊ฐ€์ •ํ•˜๊ณ  ๋ฌด์‹œ
  • ๋Œ€๋ถ€๋ถ„์˜ OS๊ฐ€ ์‚ฌ์šฉ โ†’ ๋น„์šฉ์ด ์ €๋ ดํ•˜๊ธฐ ๋•Œ๋ฌธ!

Deadlock Prevention


๐Ÿ“šDeadlock Prevention: deadlock์˜ 4๊ฐ€์ง€ ํ•„์š”์กฐ๊ฑด ์ค‘ ์ ์–ด๋„ ํžŒ ๊ฐœ ์ด์ƒ ๋งŒ์กฑ ๋ชปํ•˜๊ฒŒ ์ฐจ๋‹จ

  • Mutual Exclusion:
    • ๋ฐฉ๋ฒ•: ๊ณต์œ  ๊ฐ€๋Šฅํ•œ ์ž์› ์‚ฌ์šฉ
    • ๋ฌธ์ œ: ๊ณต์œ ์ž์›์ด ๋งŽ์•„์„œ ์ด ์กฐ๊ฑด์„ ๋ง‰๋Š” ๊ฒƒ์€ ์–ด๋ ค์›€!
  • Hold and wait:
    1. ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ์ž์›์„ ํ•œ๊บผ๋ฒˆ์— ํ• ๋‹น
    2. ์žก๊ณ  ์žˆ๋Š” ์ž์›์ด ์—†์„ ๋•Œ๋งŒ ์ž์›์„ ์š”์ฒญ
      • ๋ฌธ์ œ: ์ž์› ํ™œ์šฉ๋„ โ†“, starvation ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • No preemption
    1. ์ž์› ํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž์›์„ ๋‹ค ๋‚ด๋†“์Œ
    2. ๋Œ€๊ธฐ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๊ฒŒ ํ•จ
    3. ์ž์›์„ ๋‹ค ํ• ๋‹น ๋ฐ›์„ ์ˆ˜ ์žˆ์„ ๋•Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•จ
  • Circular Wait
    • ๊ฐ€์žฅ ํ˜„์‹ค์ ์ธ ๋ฐฉ๋ฒ•
    • ์ž์›์— ์ˆœ๋ฒˆ ๋ถ€์—ฌ, ๊ทธ ์ˆœ์„œ๋Œ€๋กœ ์ž์›์„ ํ• ๋‹นํ•จ
    • 1 โ†’ 2 ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ทธ ๋ฐ˜๋Œ€๋Š” X

Circular Wait

  • ๊ฐ๊ฐ์˜ ๋ฆฌ์†Œ์Šค์— ๊ณ ์œ ํ•œ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌ
  • ๊ทธ ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ์ž์›์„ ํ• ๋‹น

alt text

Deadlock Avoidance


๐Ÿ“šDeadlock Avoidance: deadlock์„ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž์› ํ• ๋‹น์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์ž์›์˜ Maximum number๋ฅผ ๋ฏธ๋ฆฌ ์„ ์–ธํ•ด์•ผํ•จ(a priori information)

Safe State


์–ด๋– ํ•œ task๋ฅผ ๋๋‚ด๊ธฐ ์œ„ํ•ด โ€œํ•„์š”ํ•œโ€ ์ž์›์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ํŒŒ์•…ํ•จ ํ•˜์ง€๋งŒ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜๋ˆ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— deadlock ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•จ ์™œ๋ƒ๋ฉด ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ๋งŒํผ ์ž์›์„ ๋‚˜๋ˆ ๊ฐ€์ง€์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค ๋ชจ๋‘๊ฐ€ ํ•„์š”ํ•œ ์ž์›์„ ์œ„ํ•ด ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ฐ˜๋‚ฉํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆผ

๊ทธ๋ž˜์„œ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—…์ด ๋๋‚˜๊ณ  ์ž์› ๋ฐ˜๋‚ฉ โ†’ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์› ๋ฐ˜๋‚ฉ ์ด ์ˆœํ™˜์ด Safe state์ด๋‹ค

๐Ÿ“šSafe state: ์‹œ์Šคํ…œ์— ์žˆ๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ์ž ํ•„์š”ํ•œ ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹คํ–‰์ˆœ์„œ๊ฐ€ ์กด์žฌํ•˜๋Š” ์ƒํƒœ

alt text

  • safe state โ†’ no deadlocks
  • unsafe state โ†’ possibility of deadlocks

์‹œ์Šคํ…œ์ด ํ•ญ์ƒ ์•ˆ์ „ํ•œ ์ƒํƒœ์— ๋‚จ์•„ ์žˆ๋„๋ก ์œ ์ง€ ์ฆ‰, ์‹œ์Šคํ…œ์ด ์•ˆ์ „ํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์„๋•Œ๋งŒ ์ž์›์„ ๊ณต์œ 

alt text

Avoidance Algorithms


  • Single instance์˜ ๊ฒฝ์šฐ
    • resource-allocation graph ์‚ฌ์šฉ
  • Multiple instance์˜ ๊ฒฝ์šฐ
    • Bankerโ€™s Algorithm ์‚ฌ์šฉ

Resource-allocation Graph Scheme

alt text

alt text

alt text

T2 โ†’ R2 ํ• ๋‹นํ•ด๋„ no cycle: ํ• ๋‹น ํ—ˆ์šฉ!

alt text

Bankerโ€™s Algorithm

๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค ์ž์›์—์„œ deadlock์„ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•  ์ž์›์˜ ์ตœ๋Œ€์น˜๋ฅผ ๋ฏธ๋ฆฌ ์„ ์–ธ
  • ์ž์› ์š”์ฒญ ์‹œ๋งˆ๋‹ค ํ• ๋‹น ํ›„ safe state ์œ ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌ

โœ…ํ•ต์‹ฌ ์›๋ฆฌ:

  1. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์š”์ฒญํ•˜๋ฉด ์ผ์‹œ์ ์œผ๋กœ ํ• ๋‹นํ•ด๋ณธ ํ›„ ์•ˆ์ „ ์ƒํƒœ ๊ฒ€์‚ฌ
  2. ์•ˆ์ „ํ•˜๋ฉด ํ• ๋‹น, ๋ถˆ์•ˆ์ „ํ•˜๋ฉด ๊ฑฐ๋ถ€ํ•˜๊ณ  ๋Œ€๊ธฐ
  3. ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋“  ์ž์›์„ ํ™•๋ณดํ•˜๋ฉด ์œ ํ•œ ์‹œ๊ฐ„ ๋‚ด์— ๋ฐ˜๋“œ์‹œ ๋ฐ˜๋‚ฉ

๐Ÿ’พ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ:

  • n: ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜
  • m: resource type ๊ฐœ์ˆ˜

  • Available
    • ํฌ๊ธฐ: m(์ž์› ํƒ€์ž… ์ˆ˜)
    • ์˜๋ฏธ: Available[j] = k โ†’ ์ž์› ํƒ€์ž… Rj๊ฐ€ k๊ฐœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • Max
    • ํฌ๊ธฐ: n x m
    • ์˜๋ฏธ: Max[i,j] = k โ†’ ํ”„๋กœ์„ธ์Šค Pi๊ฐ€ ์ž์› ํƒ€์ž… Rj๋ฅผ ์ตœ๋Œ€ k๊ฐœ๊นŒ์ง€ ์š”์ฒญ ๊ฐ€๋Šฅ
  • Allocation
    • ํฌ๊ธฐ: n x m
    • ์˜๋ฏธ: Allocation[i,j] = k โ†’ ํ”„๋กœ์„ธ์Šค Pi๊ฐ€ ํ˜„์žฌ ์ž์› ํƒ€์ž… Rj๋ฅผ k๊ฐœ ํ• ๋‹น๋ฐ›์Œ
  • Need
    • ํฌ๊ธฐ: n x m
    • ์˜๋ฏธ: Need[i,j] = k โ†’ ํ”„๋กœ์„ธ์Šค Pi๊ฐ€ ์ž‘์—… ์™„๋ฃŒ๋ฅผ ์œ„ํ•ด ์ž์› ํƒ€์ž… Rj๋ฅผ k๊ฐœ ๋” ํ•„์š”
    • ๊ณ„์‚ฐ: Need[i,j] = Max[i,j] - Allocation[i,j]
Safety Algorithm

1๋‹จ๊ณ„: ์ดˆ๊ธฐํ™”

1
2
Work = Available (์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž์› ๋ณต์‚ฌ)
Finish[i] = false (๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฏธ์™„๋ฃŒ๋กœ ์„ค์ •)

2๋‹จ๊ณ„: ์™„๋ฃŒ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์„ธ์Šค ์ฐพ๊ธฐ

1
2
3
4
5
๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ”„๋กœ์„ธ์Šค i ์ฐพ๊ธฐ:
(a) Finish[i] = false (์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์Œ)
(b) Need_i โ‰ค Work (ํ•„์š”ํ•œ ์ž์›์ด ํ˜„์žฌ ๊ฐ€์šฉ ์ž์›๋ณด๋‹ค ์ ๊ฑฐ๋‚˜ ๊ฐ™์Œ)

์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” i๊ฐ€ ์—†์œผ๋ฉด โ†’ 4๋‹จ๊ณ„๋กœ

3๋‹จ๊ณ„: ์ž์› ํšŒ์ˆ˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

1
2
3
Work = Work + Allocation_i (ํ”„๋กœ์„ธ์Šค i ์™„๋ฃŒ ํ›„ ์ž์› ํšŒ์ˆ˜)
Finish[i] = true (ํ”„๋กœ์„ธ์Šค i ์™„๋ฃŒ ํ‘œ์‹œ)
2๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ€๊ธฐ

4๋‹จ๊ณ„: ๊ฒฐ๊ณผ ํŒ์ •

1
2
๋ชจ๋“  i์— ๋Œ€ํ•ด Finish[i] = true์ด๋ฉด โ†’ ์•ˆ์ „ ์ƒํƒœ
๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด โ†’ ๋ถˆ์•ˆ์ „ ์ƒํƒœ
Resource-request Algorithm

1๋‹จ๊ณ„: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

1
2
Request_i โ‰ค Need_i ์ธ๊ฐ€?
โ†’ ์•„๋‹ˆ๋ฉด ์—๋Ÿฌ (์ตœ๋Œ€ ์š”๊ตฌ๋Ÿ‰ ์ดˆ๊ณผ)

2๋‹จ๊ณ„: ๊ฐ€์šฉ์„ฑ ๊ฒ€์‚ฌ

1
2
Request_i โ‰ค Available ์ธ๊ฐ€?
โ†’ ์•„๋‹ˆ๋ฉด ๋Œ€๊ธฐ (์ž์› ๋ถ€์กฑ)

3๋‹จ๊ณ„: ํ• ๋‹น ์‹œ๋ฎฌ

1
2
3
Available = Available - Request_i
Allocation_i = Allocation_i + Request_i  
Need_i = Need_i - Request_i

4๋‹จ๊ณ„: safe state ๊ฒ€์‚ฌ

1
2
3
์•ˆ์ „ ์ƒํƒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰
โ†’ ์•ˆ์ „ํ•˜๋ฉด: ํ• ๋‹น ํ™•์ •
โ†’ ๋ถˆ์•ˆ์ „ํ•˜๋ฉด: ์›๋ž˜ ์ƒํƒœ๋กœ ๋ณต๊ตฌ ํ›„ ๋Œ€๊ธฐ
Example of Bankerโ€™s Algorithm

  • ํ”„๋กœ์„ธ์Šค: P0, P1, P2, P3, P4 (5๊ฐœ)
  • resource: A(10๊ฐœ), B(5๊ฐœ), C(7๊ฐœ) (3types) alt text

    ์ดˆ๊ธฐ์ƒํƒœ

  • Need ํ–‰๋ ฌ ๊ณ„์‚ฐ: Need = Max - Allocation
    1
    2
    3
    4
    5
    6
    7
    
        Need
        A B C
    P0    7 4 3
    P1    1 2 2
    P2    6 0 0
    P3    0 1 1
    P4    4 3 1
    

โœ…์•ˆ์ „ ์ˆœ์„œ ์ฐพ๊ธฐ:
์ดˆ๊ธฐ: Work = (3,3,2), ๋ชจ๋“  Finish = false

1์ฐจ ์‹œ๋„:

  • P1 ๊ฒ€์‚ฌ: Need(1,2,2) โ‰ค Work(3,3,2) - ์œ ํšจ
  • P1 ์™„๋ฃŒ: Work = (3,3,2) + (2,0,0) = (5,3,2)

2์ฐจ ์‹œ๋„:

  • P3 ๊ฒ€์‚ฌ: Need(0,1,1) โ‰ค Work(5,3,2) - ์œ ํšจ
  • P3 ์™„๋ฃŒ: Work = (5,3,2) + (2,1,1) = (7,4,3)

3์ฐจ ์‹œ๋„:

  • P4 ๊ฒ€์‚ฌ: Need(4,3,1) โ‰ค Work(7,4,3) - ์œ ํšจ
  • P4 ์™„๋ฃŒ: Work = (7,4,3) + (0,0,2) = (7,4,5)

4์ฐจ ์‹œ๋„:

  • P0 ๊ฒ€์‚ฌ: Need(7,4,3) โ‰ค Work(7,4,5) - ์œ ํšจ
  • P0 ์™„๋ฃŒ: Work = (7,4,5) + (0,1,0) = (7,5,5)

5์ฐจ ์‹œ๋„:

  • P2 ๊ฒ€์‚ฌ: Need(6,0,0) โ‰ค Work(7,5,5) - ์œ ํšจ
  • P2 ์™„๋ฃŒ: Work = (7,5,5) + (3,0,2) = (10,5,7)

๊ฒฐ๊ณผ: ์•ˆ์ „ ์ˆœ์„œ < P1, P3, P4, P0, P2 > ์กด์žฌ โ†’ ์•ˆ์ „ ์ƒํƒœ

alt text

Example: P1 request (1,0,2)

๐Ÿ”„ P1์ด (1,0,2) ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ
1๋‹จ๊ณ„: Request(1,0,2) โ‰ค Need(1,2,2)? โ†’ ์œ ํšจ
2๋‹จ๊ณ„: Request(1,0,2) โ‰ค Available(3,3,2)? โ†’ ๊ฐ€๋Šฅ
3๋‹จ๊ณ„: ํ• ๋‹น ์‹œ๋ฎฌ๋ ˆ์ด์…˜

1
2
3
Available = (3,3,2) - (1,0,2) = (2,3,0)
Allocation_1 = (2,0,0) + (1,0,2) = (3,0,2)
Need_1 = (1,2,2) - (1,0,2) = (0,2,0)

4๋‹จ๊ณ„: ์•ˆ์ „ ์ƒํƒœ ๊ฒ€์‚ฌ ์‹คํ–‰ โ†’ ์•ˆ์ „ ์ˆœ์„œ ๋ฐœ๊ฒฌ โ†’ โœ… ํ• ๋‹น ์Šน์ธ

โŒ ๋‹ค๋ฅธ ์š”์ฒญ๋“ค:
P4๊ฐ€ (3,3,0) ์š”์ฒญ:

  • Request(3,3,0) > Available(2,3,0) โ†’ ์ž์› ๋ถ€์กฑ์œผ๋กœ ๊ฑฐ๋ถ€

P0๊ฐ€ (0,2,0) ์š”์ฒญ:

  • ํ• ๋‹น ํ›„ ์•ˆ์ „ ์ƒํƒœ ๊ฒ€์‚ฌ โ†’ unsafe state โ†’ ๊ฑฐ๋ถ€

Deadlock Detection


๐Ÿ“šDeadlock Detection: ์‹œ์Šคํ…œ์ด deadlock ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉ

  • Detection algorithm์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋Œ๋ฆฌ๋Š” ํ˜•์‹
  • ๊ฐ์ง€๊ฐ€ ๋˜๋ฉด deadlockํšŒ๋ณต์„ ์œ„ํ•œ recovery scheme๊ฐ€ ์กด์žฌ

โœ…๊ตฌ์„ฑ ์š”์†Œ:

  1. Detection Algorithm: deadlock ์กด์žฌ ์—ฌ๋ถ€ ํŒ๋ณ„
  2. Recovery Scheme: deadlock ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

Single instance ๊ฒฝ์šฐ


๐Ÿ“šWait-for Graph: Resource-Allocation Graph์—์„œ resouce node๋ฅผ ์ œ๊ฑฐํ•œ ๊ทธ๋ž˜ํ”„

  • Process ๋…ธ๋“œ๋งŒ ์กด์žฌ
  • Pi โ†’ Pj (Pi๊ฐ€ Pj๋ฅผ ๊ธฐ๋‹ค๋ฆผ)
1
2
๋ฆฌ์†Œ์Šค ํ• ๋‹น ๊ทธ๋ž˜ํ”„์—์„œ Pi โ†’ Rk โˆง Rk โ†’ Pj ์ด๋ฉด
Wait-for Graph์—์„œ Pi โ†’ Pj

โœ…ํƒ์ง€ ๋ฐฉ๋ฒ•:

  • ์ฃผ๊ธฐ์ ์œผ๋กœ Wait-for Graph์—์„œ cycle ํƒ์ง€
  • cycle ์กด์žฌ = deadlock ์กด์žฌ
  • ์‹œ๊ฐ„ ๋ณต์žก๋„: O(nยฒ) (n: ํ”„๋กœ์„ธ์Šค ์ˆ˜)

alt text

T1 โ†’ T2 โ†’ T4 โ†’ T1 cycle์ด ์กด์žฌํ•˜๋‹ˆ deadlock!

Several instance ๊ฒฝ์šฐ


Bankerโ€™s Algorithm๊ณผ ์œ ์‚ฌ

Max๊ฐ€ ์—†๋Š” ๋Œ€์‹  ํ˜„์žฌ request๋ฅผ need๋กœ ๊ฐ„์ฃผ, Bankerโ€™s algorithm ์‹คํ–‰
โ†’ unsafe state์ด๋ฉด deadlock์œผ๋กœ ํŒ์ •

โœ…Detection Algorithm:
1๋‹จ๊ณ„: ์ดˆ๊ธฐํ™”

1
2
3
4
5
Work = Available
Finish[i] = false (๋ชจ๋“  i์— ๋Œ€ํ•ด)

๋‹จ, Allocation_i = 0์ด๋ฉด Finish[i] = true
(์ž์›์„ ํ• ๋‹น๋ฐ›์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค๋Š” ์™„๋ฃŒ๋กœ ๊ฐ„์ฃผ)

2๋‹จ๊ณ„: ์™„๋ฃŒ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์„ธ์Šค ์ฐพ๊ธฐ

1
2
3
4
5
๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ”„๋กœ์„ธ์Šค i ์ฐพ๊ธฐ:
(a) Finish[i] = false
(b) Request_i โ‰ค Work

์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” i๊ฐ€ ์—†์œผ๋ฉด โ†’ 4๋‹จ๊ณ„๋กœ

3๋‹จ๊ณ„: ์ž์› ํšŒ์ˆ˜

1
2
3
4
5
๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ”„๋กœ์„ธ์Šค i ์ฐพ๊ธฐ:
(a) Finish[i] = false
(b) Request_i โ‰ค Work

์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” i๊ฐ€ ์—†์œผ๋ฉด โ†’ 4๋‹จ๊ณ„๋กœ

4๋‹จ๊ณ„: deadlock ํŒ์ •

1
2
3
4
์–ด๋–ค i์— ๋Œ€ํ•ด Finish[i] = false์ด๋ฉด โ†’ ๋ฐ๋“œ๋ฝ ์กด์žฌ
๋ชจ๋“  i์— ๋Œ€ํ•ด Finish[i] = true์ด๋ฉด โ†’ ๋ฐ๋“œ๋ฝ ์—†์Œ

Finish[i] = false์ธ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋ฐ๋“œ๋ฝ์— ๊ด€์—ฌ
Example of Detection Algorithm
  • process: P0, P1, P2, P3, P4 (5๊ฐœ)
  • resource type: A(7๊ฐœ), B(2๊ฐœ), C(6๊ฐœ) (3ํƒ€์ž…)
  • ์‹œ๊ฐ„ T0์—์„œ ์ƒํƒœ:
1
2
3
4
5
6
7
    Allocation    Request     Available
      A B C        A B C       A B C
P0    0 1 0        0 0 0       0 0 0
P1    2 0 0        2 0 2
P2    3 0 3        0 0 0
P3    2 1 1        1 0 0
P4    0 0 2        0 0 2

๐Ÿ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰ ๊ณผ์ •:
์ดˆ๊ธฐํ™”:

  • Work = Available = (0, 0, 0)
  • P0, P2๋Š” Request๊ฐ€ (0,0,0)์ด๋ฏ€๋กœ ์š”์ฒญ ์—†์Œ
  • ๋‚˜๋จธ์ง€ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ž์› ์š”์ฒญ ์ค‘

1๋‹จ๊ณ„: ์š”์ฒญ ์—†๋Š” ํ”„๋กœ์„ธ์Šค ์ฒ˜๋ฆฌ

  • P0: Request(0,0,0) โ‰ค Work(0,0,0) โœ…
  • Work = (0,0,0) + (0,1,0) = (0,1,0)
  • P0 ์™„๋ฃŒ
  • P2: Request(0,0,0) โ‰ค Work(0,1,0) โœ…
  • Work = (0,1,0) + (3,0,3) = (3,1,3)
  • P2 ์™„๋ฃŒ

2๋‹จ๊ณ„: ๋‚จ์€ ํ”„๋กœ์„ธ์Šค๋“ค ๊ฒ€์‚ฌ

  • P1: Request(2,0,2) โ‰ค Work(3,1,3) โœ…
  • Work = (3,1,3) + (2,0,0) = (5,1,3)
  • P1 ์™„๋ฃŒ
  • P3: Request(1,0,0) โ‰ค Work(5,1,3) โœ…
  • Work = (5,1,3) + (2,1,1) = (7,2,4)
  • P3 ์™„๋ฃŒ
  • P4: Request(0,0,2) โ‰ค Work(7,2,4) โœ…
  • Work = (7,2,4) + (0,0,2) = (7,2,6)
  • P4 ์™„๋ฃŒ

โœ… ๊ฒฐ๊ณผ:
์™„๋ฃŒ ์ˆœ์„œ: < P0, P2, P3, P4, P1 > ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์™„๋ฃŒ ๊ฐ€๋Šฅ โ†’ No Deadlock!

P2๊ฐ€ ์ถ”๊ฐ€ ์ธ์Šคํ„ด์Šค ์š”์ฒญํ•œ ๊ฒฝ์šฐ
  • P2๊ฐ€ C ํƒ€์ž… ์ž์› 1๊ฐœ๋ฅผ ์ถ”๊ฐ€ ์š”์ฒญ:
1
2
3
4
5
6
7
    Allocation    Request     Available
      A B C        A B C       A B C
P0    0 1 0        0 0 0       0 0 0
P1    2 0 0        2 0 2
P2    3 0 3        0 0 1  โ† ๋ณ€๊ฒฝ๋จ
P3    2 1 1        1 0 0
P4    0 0 2        0 0 2

alt text

P1, P2, P3, P4๊ฐ€ ๋ฐ๋“œ๋ฝ ์ƒํƒœ

Detection-Algorithm Usage


detection ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์–ธ์ œ, ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ํ˜ธ์ถœํ•ด์•ผ ํ• ๊นŒ??

  1. ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ ๋นˆ๋„
    • ์ž์ฃผ ๋ฐœ์ƒ โ†’ ์ž์ฃผ ๊ฒ€์‚ฌ ํ•„์š”
    • ๋“œ๋ฌผ๊ฒŒ ๋ฐœ์ƒ โ†’ ๊ฒ€์‚ฌ ๋นˆ๋„ ๋‚ฎ์ถค
  2. ๋กค๋ฐฑ๋  ํ”„๋กœ์„ธ์Šค ์ˆ˜
    • ๊ฐ ๋…๋ฆฝ์ ์ธ cycle๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ๋กค๋ฐฑ ํ•„์š”
    • cycle์ด ๋งŽ์„์ˆ˜๋ก ๋” ๋งŽ์€ ํ”„๋กœ์„ธ์Šค ์˜ํ–ฅ

Deadlock detection ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์•„๋ฌด๋•Œ๋‚˜ ์ˆ˜ํ–‰ํ•˜๋ฉด deadlock์„ ์œ ๋ฐœํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ์‹๋ณ„ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ฉด์— ์ž์›์š”์ฒญ์ด ์‹คํŒจํ•  ๋•Œ deadlock detection ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜๋ฉด deadlock์„ ์œ ๋ฐœํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค.

deadlock์„ ํšŒ๋ณตํ•˜๋Š” ๋ฐฉ๋ฒ•


1. Process Termination

๋ฐฉ๋ฒ• 1: All deadlock process ์ข…๋ฃŒ

  • ํ™•์‹คํ•˜๊ณ  ํ•ด๊ฒฐ์ด ๋น ๋ฅด์ง€๋งŒ ๋†’์€ ๋น„์šฉ, ๋งŽ์€ ์ž‘์—… ์†์‹ค ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ

๋ฐฉ๋ฒ• 2: ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ข…๋ฃŒ

  • ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ โ†’ detection algorithm ์žฌ์‹คํ–‰ โ†’ ๋ฐ˜๋ณต
  • ์ตœ์†Œํ•œ์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ข…๋ฃŒํ•ด์„œ ์ž‘์—… ์†์‹ค์ด ์ ์Œ, ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ํƒ์ง€ ์‹คํ–‰ ํ•„์š”

โœ… ์ข…๋ฃŒ ํ”„๋กœ์„ธ์Šค ์„ ํƒ ๊ธฐ์ค€:

  1. ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„: ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋ถ€ํ„ฐ ์ข…๋ฃŒ
  2. ์‹คํ–‰ ์‹œ๊ฐ„๊ณผ ์™„๋ฃŒ ์˜ˆ์ƒ ์‹œ๊ฐ„: ์งง๊ฒŒ ์‹คํ–‰๋˜์—ˆ๊ฑฐ๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ฆด ํ”„๋กœ์„ธ์Šค ์šฐ์„ 
  3. ์‚ฌ์šฉํ•œ ์ž์›์˜ ์–‘: ์ ์€ ์ž์›์„ ์‚ฌ์šฉํ•œ ํ”„๋กœ์„ธ์Šค ์šฐ์„ 
  4. ์™„๋ฃŒ์— ํ•„์š”ํ•œ ์ž์›: ๋งŽ์€ ์ž์›์ด ํ•„์š”ํ•œ ํ”„๋กœ์„ธ์Šค ์šฐ์„ 
  5. ์ข…๋ฃŒํ•ด์•ผ ํ•  ํ”„๋กœ์„ธ์Šค ์ˆ˜
  6. ํ”„๋กœ์„ธ์Šค ํƒ€์ž…

ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒํ•˜๋ฉด ์‹œ์Šคํ…œ ๋ถˆ์ผ์น˜ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹ ์ค‘ํ•ด์•ผ ํ•จ

2. Resource Preemption

  1. Selecting a Victin: ๋น„์šฉ ์ตœ์†Œํ™”
  2. Rollback: deadlock ๋ฐœ์ƒ ์ด์ „ ์‹œ์ (safe state)์œผ๋กœ ๋ณต๊ท€, ์•ˆ์ „ํ•œ ์ƒํƒœ์—์„œ restart
  3. Starvation Prevention
    • ๋ฌธ์ œ: ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์† ํฌ์ƒ์ž๋กœ ์„ ํƒ
    • ํ•ด๊ฒฐ: ๋กค๋ฐฑ ํšŸ์ˆ˜๋ฅผ ๋น„์šฉ ๊ณ„์‚ฐ์— ํฌํ•จ
This post is licensed under CC BY 4.0 by the author.