• Mindscape ๐Ÿ”ฅ
    • Playlist ๐ŸŽง
    • Vim ์‚ฌ์šฉ ๋งค๋‰ด์–ผ
  • ๐Ÿง  Algorithm

    • Python ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ํŒ
    • 1966๋ฒˆ: ํ”„๋ฆฐํ„ฐ ํ
    • 1018๋ฒˆ: ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ
  • ๐Ÿ’ฐ Finance

    • ๋น„ํŠธ์ฝ”์ธ(Bitcoin)
  • ๐Ÿ›๏ธ Humanities

    • Nordvik, Russia
    • North Sentinel Island
    • ๋กฑ๊ณ ๋กฑ๊ณ (Rongorongo)
  • ๐Ÿ‹๏ธ Wellness

    • ๐Ÿซ’ ์—‘์ŠคํŠธ๋ผ ๋ฒ„์ง„ ์˜ฌ๋ฆฌ๋ธŒ์œ  (Extra Virgin Olive Oil)
    • ์ฐจ์ „์žํ”ผ(Psyllium Husk)
  • ๐Ÿ–ฅ๏ธ Computer Graphics

    • 8 - Lighting
    • 9 - Orientation & Rotation
    • 10 - Character Animation
    • 11 - Curves
    • 12 - More Lighting, Texture
  • ๐Ÿ—‚๏ธ Operating System

    • 7. Deadlocks
    • 8. Memory Management(1)
    • 9. Memory Management(2)
    • 10. Virtual Memory(1)
    • 11. Virtual Memory(2)
    • 12. File System
    • 13. Mass Storage Management
    • 14. I/O Systems
  • ๐Ÿ”ฃ Programming Language Theory

    • 13. FPL(1)

7. Deadlocks

The Deadlock Problem

  • ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด์œ ํ•œ ์ƒํƒœ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์ง„ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ์ด ์žˆ์„ ๋•Œ, ์ด๋“ค ์‚ฌ์ด์—์„œ ๊ต์ฐฉ ์ƒํƒœ(deadlock)๊ฐ€ ๋ฐœ์ƒํ•จ
  • ์˜ˆ์‹œ:
    • ์‹œ์Šคํ…œ์— ํ…Œ์ดํ”„ ๋“œ๋ผ์ด๋ธŒ๊ฐ€ 2๊ฐœ ์žˆ์Œ
    • P1P_1P1โ€‹, P2P_2P2โ€‹๋Š” ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์ ์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ƒ๋Œ€๋ฐฉ์˜ ๋“œ๋ผ์ด๋ธŒ๋„ ํ•„์š”๋กœ ํ•จ
  • ์„ธ๋งˆํฌ์–ด ์˜ˆ์‹œ:
    • ์„ธ๋งˆํฌ์–ด A์™€ B๋Š” 1๋กœ ์ดˆ๊ธฐํ™”๋จ
P_0:
  P(A);
  P(B);

P_1:
  P(B);
  P(A);

Deadlock Characterization

Deadlock์€ ๋‹ค์Œ์˜ ๋„ค ๊ฐ€์ง€ ์กฐ๊ฑด์ด ๋™์‹œ์— ๋งŒ์กฑ๋  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ (ํ•„์ˆ˜ ์กฐ๊ฑด):

  • Mutual exclusion: ํ•˜๋‚˜์˜ ๋ฆฌ์†Œ์Šค๋Š” ์˜ค์ง ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • No preemption: ๋ฆฌ์†Œ์Šค๋Š” ๊ทธ๊ฒƒ์„ ๋ณด์œ ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ์ž๋ฐœ์ ์œผ๋กœ ํ•ด์ œํ•  ๋•Œ๋งŒ ํšŒ์ˆ˜๋  ์ˆ˜ ์žˆ์Œ
  • Hold and wait: ์ตœ์†Œ ํ•˜๋‚˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด์œ ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€, ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
  • Circular wait: ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ {P0,P1,โ€ฆ,Pn}\{P_0, P_1, \dots, P_n\}{P0โ€‹,P1โ€‹,โ€ฆ,Pnโ€‹}์ด ์กด์žฌํ•˜๋ฉฐ,
    • P0P_0P0โ€‹๋Š” P1P_1P1โ€‹์ด ๋ณด์œ ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ ,
    • P1P_1P1โ€‹์€ P2P_2P2โ€‹๊ฐ€ ๋ณด์œ ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ,
    • ...
    • PnP_nPnโ€‹์€ P0P_0P0โ€‹์ด ๋ณด์œ ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ˆœํ™˜ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ์กด์žฌํ•จ

Traffic Deadlock

์ฐจ๋Ÿ‰์ด ์‚ฌ๋ฐฉ์—์„œ ์ง„์ž…ํ•˜๋ฉด์„œ ์„œ๋กœ๋ฅผ ๋ง‰๊ณ  ์žˆ์–ด ํ•œ ๋Œ€๋„ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ
์ด๋Š” deadlock์˜ ์‹ค์งˆ์ ์ธ ์˜ˆ์‹œ์ด๋ฉฐ, circular wait๊ณผ ์œ ์‚ฌํ•œ ํ˜•ํƒœ์ž„

(ํ•ด๋‹น ์Šฌ๋ผ์ด๋“œ์—๋Š” ์‚ฌ๊ฑฐ๋ฆฌ ๊ต์ฐจ๋กœ์—์„œ ๋ฐœ์ƒํ•œ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ผ๋Ÿฌ์ŠคํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Œ)

Real World Traffic Deadlock

์‹ค์ œ ๋„๋กœ์—์„œ ๋ฐœ์ƒํ•œ ๊ตํ†ต ๊ต์ฐฉ ์ƒํƒœ์˜ ์‚ฌ์ง„
์ฐจ๋Ÿ‰์ด ์„œ๋กœ ๊ต์ฐจ์ง€์ ์—์„œ ๋ฉˆ์ถฐ ๋‹ค๋ฅธ ์ฐจ๋Ÿ‰์˜ ์ด๋™์„ ๋ง‰๊ณ  ์žˆ์Œ

Resource-Allocation Graph

  • ์ •์  VVV์™€ ๊ฐ„์„  EEE๋กœ ๊ตฌ์„ฑ๋œ ๊ทธ๋ž˜ํ”„
  • VVV๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์œผ๋กœ ๋‚˜๋‰จ:
    • P={P1,P2,โ€ฆ,Pn}P = \{P_1, P_2, \dots, P_n\}P={P1โ€‹,P2โ€‹,โ€ฆ,Pnโ€‹}: ์‹œ์Šคํ…œ ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ
    • R={R1,R2,โ€ฆ,Rm}R = \{R_1, R_2, \dots, R_m\}R={R1โ€‹,R2โ€‹,โ€ฆ,Rmโ€‹}: ์‹œ์Šคํ…œ ๋‚ด์˜ ๋ฆฌ์†Œ์Šค ์œ ํ˜• ์ง‘ํ•ฉ
  • ๊ฐ„์„ ์˜ ์œ ํ˜•:
    • ์š”์ฒญ ๊ฐ„์„  (request edge): Piโ†’RjP_i \rightarrow R_jPiโ€‹โ†’Rjโ€‹
    • ํ• ๋‹น ๊ฐ„์„  (assignment edge): Rjโ†’PiR_j \rightarrow P_iRjโ€‹โ†’Piโ€‹
  • ํ”„๋กœ์„ธ์Šค: ์›ํ˜•์œผ๋กœ ํ‘œํ˜„๋จ
  • ๋ฆฌ์†Œ์Šค ์œ ํ˜• (4๊ฐœ์˜ ์ธ์Šคํ„ด์Šค): ์‚ฌ๊ฐํ˜• ๋‚ด๋ถ€์— ์ ์œผ๋กœ ํ‘œํ˜„๋จ
  • PiP_iPiโ€‹๊ฐ€ RjR_jRjโ€‹์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์š”์ฒญ:
    Piโ†’RjP_i \rightarrow R_jPiโ€‹โ†’Rjโ€‹
  • PiP_iPiโ€‹๊ฐ€ RjR_jRjโ€‹์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณด์œ :
    Rjโ†’PiR_j \rightarrow P_iRjโ€‹โ†’Piโ€‹

Example of a Resource Allocation Graph

๊ทธ๋ž˜ํ”„ ์˜ˆ์‹œ:

  • P1P_1P1โ€‹, P2P_2P2โ€‹, P3P_3P3โ€‹๋Š” ๊ฐ๊ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญ ๋˜๋Š” ๋ณด์œ ํ•˜๊ณ  ์žˆ์Œ
  • R1R_1R1โ€‹๋ถ€ํ„ฐ R4R_4R4โ€‹๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์Œ
  • ๊ฐ ๋ฆฌ์†Œ์Šค ์œ ํ˜•์€ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ (dot)์œผ๋กœ ํ‘œํ˜„๋จ

Basic Facts

  • ๊ทธ๋ž˜ํ”„์— cycle(์‚ฌ์ดํด)์ด ์—†์œผ๋ฉด โ†’ deadlock ๋ฐœ์ƒ ๋ถˆ๊ฐ€
  • ๊ทธ๋ž˜ํ”„์— cycle์ด ์žˆ์œผ๋ฉด โ†’ ๋‹ค์Œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฆ„:
    • ๋ฆฌ์†Œ์Šค ์œ ํ˜•๋‹น ์ธ์Šคํ„ด์Šค๊ฐ€ 1๊ฐœ๋ฟ์ด๋ฉด, ๋ฐ˜๋“œ์‹œ deadlock
    • ๋ฆฌ์†Œ์Šค ์œ ํ˜•๋‹น ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฉด, deadlock ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ

Resource Allocation Graph with a Deadlock

deadlock์ด ๋ฐœ์ƒํ•œ ์ƒํƒœ์˜ ๊ทธ๋ž˜ํ”„ ์˜ˆ์‹œ

  • P1P_1P1โ€‹, P2P_2P2โ€‹, P3P_3P3โ€‹๋Š” ๊ฐ๊ธฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญ ์ค‘์ด๋‚˜ ์„œ๋กœ์˜ ์ ์œ  ์ƒํƒœ๊ฐ€ ๋ง‰๊ณ  ์žˆ์Œ
  • cycle์ด ํ˜•์„ฑ๋˜์–ด ์žˆ์Œ
  • ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๊ฐ€ 1๊ฐœ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง

Resource Allocation Graph with a Cycle But No Deadlock

cycle์€ ์กด์žฌํ•˜์ง€๋งŒ deadlock์ด ์•„๋‹Œ ๊ฒฝ์šฐ์˜ ์˜ˆ์‹œ

  • P1โ†’R1โ†’P2P_1 \rightarrow R_1 \rightarrow P_2P1โ€‹โ†’R1โ€‹โ†’P2โ€‹
  • P2โ†’R2โ†’P4P_2 \rightarrow R_2 \rightarrow P_4P2โ€‹โ†’R2โ€‹โ†’P4โ€‹
  • P3P_3P3โ€‹๋Š” R1R_1R1โ€‹ ์š”์ฒญ ์ค‘

R1R_1R1โ€‹, R2R_2R2โ€‹ ๋ชจ๋‘ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ
์‹ค์ œ๋กœ deadlock์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ

Methods for Handling Deadlocks

  • ์‹œ์Šคํ…œ์ด ์ ˆ๋Œ€ deadlock ์ƒํƒœ์— ์ง„์ž…ํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅ (์˜ˆ๋ฐฉ ๋˜๋Š” ํšŒํ”ผ)
  • ์‹œ์Šคํ…œ์ด deadlock ์ƒํƒœ์— ์ง„์ž…ํ•˜๊ฒŒ ํ•œ ๋’ค,
    ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋ณต๊ตฌ (์‚ฌํ›„ ๋Œ€์‘)
  • ๋ฌธ์ œ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  deadlock์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ
    โ†’ ๋Œ€๋ถ€๋ถ„์˜ ์šด์˜์ฒด์ œ(์˜ˆ: UNIX)๋Š” ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ

Deadlock Prevention

  • ์š”์ฒญ ๋ฐฉ์‹์— ์ œ์•ฝ์„ ๋‘์–ด ํ•„์ˆ˜ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋„๋ก ๋งŒ๋“ฆ
  • Mutual Exclusion
    • ๊ณต์œ  ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๋Š” ํ•„์š” ์—†์Œ
    • ๊ณต์œ  ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๋Š” ๋ฐ˜๋“œ์‹œ mutual exclusion์„ ๊ฐ•์ œํ•ด์•ผ ํ•จ
      (๋‚ด์žฌ์ ์œผ๋กœ ๊ณต์œ  ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” ๋ถˆ๊ฐ€๋Šฅ)
  • Hold and Wait
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ, ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ์œ ํ•˜๊ณ  ์žˆ์ง€ ์•Š์•„์•ผ ํ•จ
    • ์‹คํ–‰ ์ „์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์š”์ฒญํ•˜๊ณ  ํ• ๋‹น๋ฐ›๋„๋ก ์š”๊ตฌํ•˜๊ฑฐ๋‚˜,
      ์•„๋ฌด ๋ฆฌ์†Œ์Šค๋„ ๋ณด์œ ํ•˜์ง€ ์•Š์„ ๋•Œ๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
    • ๋ฆฌ์†Œ์Šค ํ™œ์šฉ๋ฅ ์ด ๋‚ฎ์•„์ง€๊ณ  starvation ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ
  • No Preemption
    • ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ์œ ํ•œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ–ˆ๋Š”๋ฐ
      ์ฆ‰์‹œ ํ• ๋‹น๋  ์ˆ˜ ์—†๋‹ค๋ฉด, ๊ธฐ์กด ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋‘ ๋ฐ˜๋‚ฉํ•ด์•ผ ํ•จ
    • ๋ฐ˜๋‚ฉ๋œ ๋ฆฌ์†Œ์Šค๋Š” ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€๊ธฐ ์ค‘์ธ ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก์— ์ถ”๊ฐ€๋จ
    • ํ”„๋กœ์„ธ์Šค๋Š” ๊ธฐ์กด ๋ฆฌ์†Œ์Šค์™€ ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋‘ ํš๋“ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ์žฌ์‹œ์ž‘๋จ
  • Circular Wait
    • ๋ชจ๋“  ๋ฆฌ์†Œ์Šค ์œ ํ˜•์— ๋Œ€ํ•ด ์ด์ฒด์  ์ˆœ์„œ๋ฅผ ๋ถ€์—ฌํ•˜๊ณ ,
      ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ˆœ์„œ๋กœ๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋„๋ก ์ œํ•œํ•จ

๋‹จ์ : ๋‚ฎ์€ ๋ฆฌ์†Œ์Šค ํ™œ์šฉ๋ฅ , ์‹œ์Šคํ…œ ์ฒ˜๋ฆฌ๋Ÿ‰ ๊ฐ์†Œ

Deadlock Avoidance

  • ์‹œ์Šคํ…œ์ด ์‚ฌ์ „์— ์ถ”๊ฐ€์ ์ธ ์ •๋ณด(a priori information)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•จ
  • ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ์‹ค์šฉ์ ์ธ ๋ชจ๋ธ:
    ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ ๋ฆฌ์†Œ์Šค ์œ ํ˜•๋งˆ๋‹ค ์ตœ๋Œ€ ์š”๊ตฌ๋Ÿ‰์„ ๋ช…์‹œ
  • deadlock-avoidance ์•Œ๊ณ ๋ฆฌ์ฆ˜์€
    ์ž์›์˜ ํ• ๋‹น ์ƒํƒœ๋ฅผ ๋™์ ์œผ๋กœ ๊ฒ€์‚ฌํ•˜์—ฌ
    circular wait ์กฐ๊ฑด์ด ์ ˆ๋Œ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅ
  • ์ž์› ํ• ๋‹น ์ƒํƒœ(resource-allocation state)๋Š”
    ์‚ฌ์šฉ ๊ฐ€๋Šฅ/ํ• ๋‹น๋œ ์ž์› ์ˆ˜์™€ ํ”„๋กœ์„ธ์Šค์˜ ์ตœ๋Œ€ ์š”๊ตฌ๋Ÿ‰์— ์˜ํ•ด ์ •์˜๋จ

Safe State

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋ฉด, ์‹œ์Šคํ…œ์€ ์ฆ‰์‹œ ํ• ๋‹น ์‹œ safe ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•จ
  • ์‹œํ€€์Šค โŸจP1,P2,โ€ฆ,PnโŸฉ\langle P_1, P_2, \dots, P_n \rangleโŸจP1โ€‹,P2โ€‹,โ€ฆ,Pnโ€‹โŸฉ์ด ์กด์žฌํ•˜๊ณ 
    ๊ฐ PiP_iPiโ€‹์— ๋Œ€ํ•ด ๋‹ค์Œ์ด ์„ฑ๋ฆฝํ•˜๋ฉด safe ์ƒํƒœ์ž„:
    • PiP_iPiโ€‹์˜ ๋ฆฌ์†Œ์Šค ์š”์ฒญ๋Ÿ‰ โ‰ค ํ˜„์žฌ ๊ฐ€์šฉ ์ž์› + {Pjโˆฃj<i}\{P_j \mid j < i\}{Pjโ€‹โˆฃj<i}๊ฐ€ ๋ณด์œ  ์ค‘์ธ ๋ฆฌ์†Œ์Šค
    • ๋งŒ์•ฝ ์ž์›์ด ์ฆ‰์‹œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•ด๋„, PiP_iPiโ€‹๋Š” ์„ ํ–‰ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ์Œ
    • PiP_iPiโ€‹๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด, ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”์ฒญ ๊ฐ€๋Šฅ
  • ์‹œ์Šคํ…œ์ด safe ์ƒํƒœ์ด๋ฉด, ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ ๊ฐ€๋Šฅํ•œ ์‹œํ€€์Šค๊ฐ€ ์กด์žฌํ•จ

Basic Facts

  • ์‹œ์Šคํ…œ์ด safe ์ƒํƒœ โ†’ deadlock ์—†์Œ
  • ์‹œ์Šคํ…œ์ด unsafe ์ƒํƒœ โ†’ deadlock ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ
    • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ตœ๋Œ€๋Ÿ‰์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • Avoidance ๊ธฐ๋ฒ•์€ ์‹œ์Šคํ…œ์ด unsafe ์ƒํƒœ์— ์ง„์ž…ํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•จ

"์š”์ฒญ์ด safe ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์Šน์ธํ•˜๋ผ,
๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฑฐ๋ถ€ํ•˜๋ผ"

Safe, Unsafe, Deadlock State Spaces

์ƒํƒœ ๊ณต๊ฐ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ๋ถ„๋จ:

  • Safe: deadlock ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์—†์Œ
  • Unsafe: deadlock ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ
  • Deadlock: ์‹ค์ œ deadlock ๋ฐœ์ƒ

(๋„ํ‘œ๋กœ safe โŠ‚ unsafe โŠ‚ ์ „์ฒด ๊ณต๊ฐ„์„ ๋‚˜ํƒ€๋ƒ„)

Avoidance Algorithms

  • ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์กด์žฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์œ ํ˜•:
    • resource-allocation graph ์‚ฌ์šฉ
  • ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์œ ํ˜•:
    • Banker's Algorithm ์‚ฌ์šฉ

Case A: One instance per resource type : Resource Allocation Graph Algorithm

  • Claim edge
    • Piโ†’RjP_i \rightarrow R_jPiโ€‹โ†’Rjโ€‹๋Š” PiP_iPiโ€‹๊ฐ€ RjR_jRjโ€‹๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ„ (์ ์„ )
  • Request edge
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹ค์ œ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋ฉด, claim edge โ†’ request edge๋กœ ๋ณ€ํ™˜๋จ
  • Assignment edge
    • ๋ฆฌ์†Œ์Šค๊ฐ€ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋˜๋ฉด, request edge โ†’ assignment edge๋กœ ๋ณ€ํ™˜๋จ
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด, assignment edge โ†’ claim edge๋กœ ๋˜๋Œ์•„๊ฐ
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋Š” ์‚ฌ์ „์— claim ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ):
    • PiP_iPiโ€‹๊ฐ€ RjR_jRjโ€‹๋ฅผ ์š”์ฒญํ•  ๋•Œ,
    • ํ•ด๋‹น request edge๋ฅผ assignment edge๋กœ ๋ฐ”๊พธ๋”๋ผ๋„ ๊ทธ๋ž˜ํ”„์— cycle์ด ์ƒ๊ธฐ์ง€ ์•Š์•„์•ผ ์š”์ฒญ์„ ์ˆ˜๋ฝ

Resource-Allocation Graph for Deadlock Avoidance

์˜ˆ์‹œ ์ƒํ™ฉ:

  • P1P_1P1โ€‹์€ R1R_1R1โ€‹ ๋ณด์œ 
  • P2P_2P2โ€‹๋Š” R2R_2R2โ€‹๋ฅผ ์š”์ฒญ
  • R2R_2R2โ€‹๋ฅผ ํ• ๋‹นํ•˜๋ฉด, ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋˜์–ด unsafe ์ƒํƒœ๊ฐ€ ๋จ
P2 requests R2
If we grant it,
A cycle is formed
โ†’ unsafe

Unsafe State in a Resource-Allocation Graph

  • ์‚ฌ์ดํด์ด ์—†๋Š” ๊ฒฝ์šฐ: safe, ์š”์ฒญ์„ grant
  • ์‚ฌ์ดํด์ด ์ƒ๊ธฐ๋Š” ๊ฒฝ์šฐ: unsafe, ์š”์ฒญ์„ deny

Case B: Multiple Instances per Resource Types : Banker's Algorithm

  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ตœ๋Œ€ ์š”๊ตฌ๋Ÿ‰์„ ์‚ฌ์ „์— ๋ช…์‹œ
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋ฉด, ๋Œ€๊ธฐํ•  ์ˆ˜๋„ ์žˆ์Œ
  • ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹น๋ฐ›์€ ํ”„๋กœ์„ธ์Šค๋Š” ์ผ์ • ์‹œ๊ฐ„ ๋‚ด์— ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ

Data Structures for the Banker's Algorithm

  • nnn: ํ”„๋กœ์„ธ์Šค ์ˆ˜
  • mmm: ๋ฆฌ์†Œ์Šค ์œ ํ˜• ์ˆ˜
  • vector: Available
    • Available[j] = k: ๋ฆฌ์†Œ์Šค RjR_jRjโ€‹์˜ ์ธ์Šคํ„ด์Šค kkk๊ฐœ๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • nร—mn \times mnร—m matrix
    • Max[i][j] = k: ํ”„๋กœ์„ธ์Šค PiP_iPiโ€‹๊ฐ€ ๋ฆฌ์†Œ์Šค RjR_jRjโ€‹๋ฅผ ์ตœ๋Œ€ kkk๊ฐœ๊นŒ์ง€ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Œ
    • Allocation[i][j] = k: PiP_iPiโ€‹๊ฐ€ ๋ฆฌ์†Œ์Šค RjR_jRjโ€‹๋ฅผ ํ˜„์žฌ kkk๊ฐœ ๋ณด์œ  ์ค‘
    • Need[i][j] = Max[i][j] - Allocation[i][j]:
      PiP_iPiโ€‹๋Š” ๋ฆฌ์†Œ์Šค RjR_jRjโ€‹๋ฅผ ์ตœ๋Œ€ kkk๊ฐœ ๋” ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Œ

Safety Algorithm

  1. ๊ธธ์ด mmm, nnn์ธ ๋ฒกํ„ฐ Work, Finish๋ฅผ ์ดˆ๊ธฐํ™”:
    • Work = Available
    • Finish[i] = \text{false} for i=1,2,...,ni = 1, 2, ..., ni=1,2,...,n
  2. ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ธ๋ฑ์Šค iii๋ฅผ ์ฐพ์Œ:
    • Finish[i] == false
    • Need_i \leq Work ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด step 4๋กœ ์ด๋™
    • Work = Work + Allocation_i
    • Finish[i] = true
    • step 2๋กœ ๋Œ์•„๊ฐ
    • ๋ชจ๋“  iii์— ๋Œ€ํ•ด Finish[i] == true์ด๋ฉด, ์‹œ์Šคํ…œ์€ safe ์ƒํƒœ

Resource-Request Algorithm for Process PiP_iPiโ€‹

  • Request_i๋Š” PiP_iPiโ€‹์˜ ์š”์ฒญ ๋ฒกํ„ฐ๋กœ, ๊ฐ ๋ฆฌ์†Œ์Šค ์œ ํ˜• RjR_jRjโ€‹์— ๋Œ€ํ•ด ์š”์ฒญ๋Ÿ‰์„ ๋‚˜ํƒ€๋ƒ„
  • ์š”์ฒญ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„:
    1. Request_i \leq Need_i
      • ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ (์ตœ๋Œ€ ์š”๊ตฌ๋Ÿ‰ ์ดˆ๊ณผ)
    2. Request_i \leq Available
      • ์•„๋‹ˆ๋ฉด PiP_iPiโ€‹๋Š” ๋Œ€๊ธฐ
    3. ์š”์ฒญ์„ ์ผ์‹œ์ ์œผ๋กœ ํ• ๋‹นํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ :
      Available = Available - Request
      Allocation_i = Allocation_i + Request
      Need_i = Need_i - Request
      
      • safe ์ƒํƒœ์ด๋ฉด ์š”์ฒญ์„ ์‹ค์ œ๋กœ ํ• ๋‹น
      • unsafe ์ƒํƒœ์ด๋ฉด ํ• ๋‹น์„ ์ทจ์†Œํ•˜๊ณ  ์ด์ „ ์ƒํƒœ๋กœ ๋ณต์›

Example of Bankerโ€™s Algorithm

  • 5๊ฐœ ํ”„๋กœ์„ธ์Šค: P0P_0P0โ€‹ ~ P4P_4P4โ€‹
  • 3๊ฐœ ๋ฆฌ์†Œ์Šค ์œ ํ˜•: A(10), B(5), C(7)

์‹œ์  T0T_0T0โ€‹์˜ ์ƒํƒœ:

ProcessAllocationMaxAvailableNeed
P0P_0P0โ€‹0 1 07 5 33 3 27 4 3
P1P_1P1โ€‹2 0 03 2 21 2 2
P2P_2P2โ€‹3 0 29 0 26 0 0
P3P_3P3โ€‹2 1 12 2 20 1 1
P4P_4P4โ€‹0 0 24 3 34 3 1
  • ์‹œ์Šคํ…œ์€ safe ์ƒํƒœ:
    ์‹œํ€€์Šค โŸจP1,P3,P4,P0,P2โŸฉ\langle P_1, P_3, P_4, P_0, P_2 \rangleโŸจP1โ€‹,P3โ€‹,P4โ€‹,P0โ€‹,P2โ€‹โŸฉ๊ฐ€ safety ๊ธฐ์ค€ ๋งŒ์กฑ

Example (Cont.): P1P_1P1โ€‹ request (1, 0, 2)

  • Requestโ‰คAvailableโ‡’(1,0,2)โ‰ค(3,3,2)Request \leq Available \Rightarrow (1, 0, 2) \leq (3, 3, 2)Requestโ‰คAvailableโ‡’(1,0,2)โ‰ค(3,3,2) โ†’ True

์—…๋ฐ์ดํŠธ๋œ ์ƒํƒœ:

ProcessNeedAvailable
P0P_0P0โ€‹7 4 32 3 0
P1P_1P1โ€‹0 2 0
P2P_2P2โ€‹6 0 0
P3P_3P3โ€‹0 1 1
P4P_4P4โ€‹4 3 1
  • ์‹œํ€€์Šค โŸจP1,P3,P4,P0,P2โŸฉ\langle P_1, P_3, P_4, P_0, P_2 \rangleโŸจP1โ€‹,P3โ€‹,P4โ€‹,P0โ€‹,P2โ€‹โŸฉ๋Š” safety ์กฐ๊ฑด ๋งŒ์กฑ

์ถ”๊ฐ€ ์งˆ๋ฌธ:

  • P0P_0P0โ€‹์ด (3, 3, 0)์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  • P0P_0P0โ€‹์ด (0, 2, 0)์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

Deadlock Detection

  • ์‹œ์Šคํ…œ์ด deadlock ์ƒํƒœ์— ์ง„์ž…ํ•˜๋„๋ก ํ—ˆ์šฉ
  • ๊ฐ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋ณต๊ตฌ ์ ˆ์ฐจ ํ•„์š”
  • 2๊ฐ€์ง€ case:
    • A: ๋ฆฌ์†Œ์Šค ์œ ํ˜•๋‹น ์ธ์Šคํ„ด์Šค 1๊ฐœ โ†’ cycle โ‡’ deadlock
    • B: ๋ฆฌ์†Œ์Šค ์œ ํ˜•๋‹น ์ธ์Šคํ„ด์Šค ๋‹ค์ˆ˜ โ†’ ?

Single Instance of Each Resource Type

  • wait-for graph ์œ ์ง€
    • ๋…ธ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค
    • Piโ†’PjP_i \rightarrow P_jPiโ€‹โ†’Pjโ€‹: PiP_iPiโ€‹๊ฐ€ PjP_jPjโ€‹๊ฐ€ ๋ณด์œ ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘
  • cycle ํƒ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰
    • ๊ทธ๋ž˜ํ”„์—์„œ cycle ํƒ์ง€๋Š” O(n2)O(n^2)O(n2) ์‹œ๊ฐ„๋ณต์žก๋„
      (nnn์€ ๊ทธ๋ž˜ํ”„ ์ •์  ์ˆ˜)

Resource-Allocation Graph and Wait-for Graph

  • ์ขŒ์ธก: Resource-Allocation Graph
  • ์šฐ์ธก: ํ•ด๋‹น ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณ€ํ™˜ํ•œ Wait-for Graph

Wait-for Graph๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋Œ€๊ธฐ ๊ด€๊ณ„๋งŒ ํ‘œ์‹œ
(๋ฆฌ์†Œ์Šค ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ฐ„์„ ์œผ๋กœ ๋Œ€๊ธฐ ๊ด€๊ณ„๋งŒ ์œ ์ง€)

Several Instances of a Resource Type

  • Deadlock Detection Algorithm ์‚ฌ์šฉ
  • ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ:
    • Available: ๊ฐ ๋ฆฌ์†Œ์Šค ์œ ํ˜•๋ณ„ ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฒกํ„ฐ
    • Allocation: nร—mn \times mnร—m ํ–‰๋ ฌ, ๊ฐ ํ”„๋กœ์„ธ์Šค์— ํ˜„์žฌ ํ• ๋‹น๋œ ๋ฆฌ์†Œ์Šค ์ˆ˜
    • Request: nร—mn \times mnร—m ํ–‰๋ ฌ, ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ˜„์žฌ ์š”์ฒญ ์ค‘์ธ ๋ฆฌ์†Œ์Šค ์ˆ˜
      • Request[i][k] = x: PiP_iPiโ€‹๋Š” ๋ฆฌ์†Œ์Šค RkR_kRkโ€‹๋ฅผ xxx๊ฐœ ์š”์ฒญ ์ค‘

Detection Algorithm

  1. ๋ฒกํ„ฐ Work, Finish ์ดˆ๊ธฐํ™”:
    • Work = Available
    • i=1,...,ni = 1, ..., ni=1,...,n์— ๋Œ€ํ•ด
      • Finish[i] = false (๋งŒ์•ฝ Allocation[i] \ne 0)
      • Finish[i] = true (๋งŒ์•ฝ Allocation[i] = 0)
  2. ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ธ๋ฑ์Šค iii๋ฅผ ์ฐพ์Œ:
    • Finish[i] == false
    • Request[i] \leq Work ์—†์œผ๋ฉด step 4๋กœ ์ด๋™
    • Work = Work + Allocation[i]
    • Finish[i] = true
    • step 2๋กœ ์ด๋™
    • ์–ด๋–ค iii์— ๋Œ€ํ•ด Finish[i] == false์ด๋ฉด ์‹œ์Šคํ…œ์€ deadlock ์ƒํƒœ
    • ํŠนํžˆ, Finish[i] == false์ธ ํ”„๋กœ์„ธ์Šค PiP_iPiโ€‹๋Š” deadlock ์ƒํƒœ์— ์žˆ์Œ

Example of Detection Algorithm

  • ํ”„๋กœ์„ธ์Šค P0P_0P0โ€‹ ~ P4P_4P4โ€‹, ๋ฆฌ์†Œ์Šค A(7), B(2), C(6)

์‹œ๊ฐ„ T0T_0T0โ€‹์˜ ์ƒํƒœ:

ProcessAllocationRequestAvailable
P0P_0P0โ€‹2 1 00 0 00 0 0
P1P_1P1โ€‹2 0 02 0 2
P2P_2P2โ€‹3 0 30 0 0
P3P_3P3โ€‹2 1 11 0 0
P4P_4P4โ€‹0 0 20 0 2
  • ์‹œํ€€์Šค โŸจP0,P2,P3,P1,P4โŸฉ\langle P_0, P_2, P_3, P_1, P_4 \rangleโŸจP0โ€‹,P2โ€‹,P3โ€‹,P1โ€‹,P4โ€‹โŸฉ โ†’ ๋ชจ๋“  Finish[i] = true

Detection Algorithm (Cont.)

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜ํ–‰ ๋น„์šฉ:
    • O(mร—n2)O(m \times n^2)O(mร—n2)
    • mmm: ๋ฆฌ์†Œ์Šค ์œ ํ˜• ์ˆ˜
    • nnn: ํ”„๋กœ์„ธ์Šค ์ˆ˜

๋ฌธ์ œ: ์–ผ๋งˆ๋‚˜ ์ž์ฃผ deadlock ํƒ์ง€๋ฅผ ์‹คํ–‰ํ•  ๊ฒƒ์ธ๊ฐ€?

  • ๋ชจ๋“  ์š”์ฒญ๋งˆ๋‹ค? (์˜ค๋ฒ„ํ—ค๋“œ ํผ)
  • ์ž์›์ด ํ• ๋‹น๋˜์ง€ ์•Š์„ ๋•Œ๋งˆ๋‹ค?
  • ์ฃผ๊ธฐ์ ์œผ๋กœ? (deadlock ํ™•๋ฅ ์ด ๋‚ฎ์„ ๊ฒฝ์šฐ ์ ์ ˆ)

Recovery from Deadlock: Process Termination

  • ๋ชจ๋“  deadlock๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜,
  • ํ•˜๋‚˜์”ฉ ์ข…๋ฃŒํ•˜์—ฌ deadlock ์‚ฌ์ดํด ์ œ๊ฑฐ

์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ• ์ง€ ๊ฒฐ์ • ๊ธฐ์ค€:

  • ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„
  • ์ด๋ฏธ ์†Œ์š”๋œ ์‹คํ–‰ ์‹œ๊ฐ„ ๋ฐ ๋‚จ์€ ์‹œ๊ฐ„
  • ์‚ฌ์šฉํ•œ ๋ฆฌ์†Œ์Šค ์ˆ˜
  • ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์ˆ˜
  • ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•  ํ”„๋กœ์„ธ์Šค ์ˆ˜
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€ํ™”ํ˜•(interactive)์ธ์ง€ ๋ฐฐ์น˜ํ˜•(batch)์ธ์ง€

Recovery from Deadlock: Resource Preemption

  • ํฌ์ƒ์ž ์„ ํƒ (victim selection):
    • ๋น„์šฉ(cost)์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ ํƒ
  • Rollback
    • ์•ˆ์ „ํ•œ ์ƒํƒœ(safe state)๋กœ ๋˜๋Œ์•„๊ฐ
    • ํ•ด๋‹น ์ƒํƒœ์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•จ
  • Starvation
    • ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ํฌ์ƒ์ž๋กœ ์„ ํƒ๋  ์ˆ˜ ์žˆ์Œ
    • ๋กค๋ฐฑ ํšŸ์ˆ˜๋ฅผ ๋น„์šฉ ์š”์†Œ๋กœ ํฌํ•จ์‹œ์ผœ ๊ณ ๋ คํ•ด์•ผ ํ•จ

Avoidance vs. Detection

๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ฐจ์ด์ 

  • Avoidance:
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ตœ์•…์˜ ํ–‰๋™(worst case)์„ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •
      • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ตœ๋Œ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋™์‹œ์— ์š”์ฒญํ•œ๋‹ค๊ณ  ๊ฐ€์ •
      • ์ด ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋„ safe sequence๊ฐ€ ๋ณด์žฅ๋  ๊ฒฝ์šฐ์—๋งŒ ๋ฆฌ์†Œ์Šค ํ• ๋‹น
      • ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
  • Detection:
    • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€๊ธฐ ์ƒํƒœ(dormant)๋ผ๊ณ  ๊ฐ€์ •
      • ์ฆ‰, ๋” ์ด์ƒ ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ • (์ตœ์„ ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค)
      • ํ˜„์žฌ ์ƒํƒœ์— ๊ธฐ๋ฐ˜ํ•ด deadlock ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•จ
์ตœ๊ทผ ์ˆ˜์ •:: 25. 7. 29. ์˜คํ›„ 4:38
Contributors: kmbzn
Next
8. Memory Management(1)

BUILT WITH

CloudflareNode.jsGitHubGitVue.jsJavaScriptVSCodenpm

All trademarks and logos are property of their respective owners.
ยฉ 2025 kmbzn ยท MIT License