Skip to content

Latest commit

ย 

History

History
118 lines (72 loc) ยท 9.19 KB

File metadata and controls

118 lines (72 loc) ยท 9.19 KB

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

Deadlock์ด๋ผ๊ณ  ์“ฐ๋ฉฐ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ํŠน์ • ์ž์›(ํ…Œ์ด๋ธ” ๋˜๋Š” ํ–‰)์˜ ์ž ๊ธˆ(Lock)์„ ํš๋“ํ•œ์ฑ„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž ๊ธˆ์„ ์š”๊ตฌํ•˜๋ฉด์„œ ์•„๋ฌด๋ฆฌ ๊ธฐ๋‹ค๋ ค๋„ ์ƒํ™ฉ์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ์ƒํƒœ

๊ฒฐ๊ณผ์ ์œผ๋กœ ์•„๋ฌด๊ฒƒ๋„ ์™„๋ฃŒ๋˜์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

ํ”ํžˆ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ์•„์ง ์—†๋Š” ์ƒํƒœ๋‹ค.

  • ์ž ๊ธˆ์ด๋ž€? ์ž ๊ธˆ(Lock)๊ณผ ํŠธ๋žœ์žญ์…˜์€ ์„œ๋กœ ๋น„์Šทํ•œ ๊ฐœ๋… ๊ฐ™์ง€๋งŒ ์‚ฌ์‹ค ์ž ๊ธˆ์€ ๋™์‹œ์„ฑ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด๊ณ  ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด๋‹ค. ์ž ๊ธˆ์€ ์—ฌ๋Ÿฌ ์ปค๋„ฅ์…˜์—์„œ ๋™์‹œ์— ๋™์ผํ•œ ์ž์›์„ ์š”์ฒญํ•  ๊ฒฝ์šฐ ์ˆœ์„œ๋Œ€๋กœ ํ•œ ์‹œ์ ์—๋Š” ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜๋งŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ž์›์€ ๋ ˆ์ฝ”๋“œ๋‚˜ ํ…Œ์ด๋ธ”์„ ๋งํ•œ๋‹ค. ์ด์™€๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ํŠธ๋žœ์žญ์…˜์€ ๊ผญ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ€๊ฒฝ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์กฐํ•ฉ๋˜์—ˆ์„ ๋•Œ๋งŒ ์˜๋ฏธ์žˆ๋Š” ๊ฐœ๋…์€ ์•„๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ์…‹ ์ค‘ ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋“  ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋“  ๊ด€๊ณ„์—†์ด ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ์…‹ ์ž์ฒด๊ฐ€ 100% ์ ์šฉ๋˜๊ฑฐ๋‚˜ ์•„๋ฌด๊ฒƒ๋„ ์ ์šฉ๋˜์ง€ ์•Š์•„์•ผ ํ•จ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด HW ์—๋Ÿฌ ๋˜๋Š” SW ์—๋Ÿฌ์™€ ๊ฐ™์€ ๋ฌธ์ œ๋กœ ์ธํ•ด ์ž‘์—…์— ์‹คํŒจ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, ํŠน๋ณ„ํ•œ ๋Œ€์ฑ…์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ต์ฐฉ์ƒํƒœ์˜ 4๊ฐ€์ง€ ์กฐ๊ฑด

  • E.G ์ฝ”ํ”„๋งŒ ๊ต์ˆ˜๊ฐ€ ๋งํ•˜๋Š” ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ์ผ์–ด๋‚˜๊ธฐ์œ„ํ•œ 4๊ฐ€์ง€ ํ•„์š” ์กฐ๊ฑด
  1. ์ƒํ˜ธ๋ฐฐ์ œ(Mutual Exclusion) : ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ•„์š”๋กœ ํ•˜๋Š” ์ž์›์— ๋Œ€ํ•ด ๋ฐฐํƒ€์ ์ธ ํ†ต์ œ๊ถŒ์„ ์š”๊ตฌํ•œ๋‹ค.
  2. ์ ์œ ๋Œ€๊ธฐ(Hold and Wait) : ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋œ ์ž์›์„ ๊ฐ€์ง„ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  3. ๋น„์„ ์ (Non-preemption) : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์ž์›์˜ ์‚ฌ์šฉ์„ ๋๋‚ผ ๋•Œ ๊นŒ์ง€ ๊ทธ ์ž์›์„ ๋บ์„ ์ˆ˜ ์—†๋‹ค.
  4. ์ˆœํ™˜๋Œ€๊ธฐ(Circular Wait) : ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ˆœํ™˜์ ์œผ๋กœ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ž์›์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์—ฌ๊ธฐ์„œ 4. ์ˆœํ™˜๋Œ€๊ธฐ ์กฐ๊ฑด์€ 2. ์ ์œ ๋Œ€๊ธฐ ์กฐ๊ฑด๊ณผ 3. ๋น„์„ ์  ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ์„ฑ๋ฆฝํ•˜๋ฏ€๋กœ ์œ„ 4๊ฐ€์ง€ ์กฐ๊ฑด๋“ค์€ ์„œ๋กœ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ธ ํ˜•ํƒœ๋Š” ์•„๋‹ˆ๋‹ค.

๊ต์ฐฉ์ƒํƒœ์˜ ํ•ด๊ฒฐ๋ฐฉ์•ˆ

๊ต์ฐฉ์ƒํƒœ๋Š” ์ผ์–ด๋‚˜๊ธฐ์œ„ํ•œ 4๊ฐ€์ง€ ํ•„์š”์กฐ๊ฑด์„ ๋ชจ๋‘ ์ถฉ์กฑํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์˜ 4๊ฐ€์ง€ ์กฐ๊ฑด์ค‘ ํ•˜๋‚˜๋ฅผ ๋ง‰์Œ์œผ๋กœ์จ ๊ต์ฐฉ์ƒํƒœ์— ๋Œ€์‘ํ•˜๊ฒŒ ๋œ๋‹ค.

  1. ์˜ˆ๋ฐฉ

    1. ์ƒํ˜ธ๋ฐฐ์ œ ์กฐ๊ฑด ๋ถ€์ •(์ œ๊ฑฐ) : ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    2. ์ ์œ ๋Œ€๊ธฐ ์กฐ๊ฑด ๋ถ€์ • : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „ ํ•„์š”ํ•œ ๋ชจ๋“  ์ž์›์„ ํ• ๋‹นํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ๋Œ€๊ธฐ๋ฅผ ์—†์• ๊ฑฐ๋‚˜ ์ž์›์ด ์ ์œ ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ๋งŒ ์ž์›์„ ์š”๊ตฌํ•˜๋„๋ก ํ•œ๋‹ค.
    3. ๋น„์„ ์  ์กฐ๊ฑด ๋ถ€์ • : ์ž์›์„ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ์ž์›์„ ์š”๊ตฌํ•  ๋•Œ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๊ณ  ์š”๊ตฌํ•œ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•œ๋‹ค.
    4. ์ˆœํ™˜๋Œ€๊ธฐ ์กฐ๊ฑด ๋ถ€์ • : ์ž์›์„ ์„ ํ˜• ์ˆœ์„œ๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ๊ณ ์œ ๋ฒˆํ˜ธ๋ฅผ ํ• ๋‹นํ•˜๊ณ , ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ํ˜„์žฌ ์ ์œ ํ•œ ์ž์›์˜ ๊ณ ์œ ๋ฒˆํ˜ธ๋ณด๋‹ค ์•ž์ด๋‚˜ ๋’ค ์–ด๋А ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ž์›์„ ์š”๊ตฌํ•˜๋„๋ก ํ•œ๋‹ค.
  2. ํšŒํ”ผ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ์˜ˆ์ƒํ•˜์—ฌ ์•ˆ์ „์ƒํƒœ์—์„œ๋งŒ ์ž์› ์š”์ฒญ์„ ํ—ˆ์šฉํ•จ

    Safe state(์•ˆ์ „์ƒํƒœ) : Safe sequence๊ฐ€ ์กด์žฌํ•˜์—ฌ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ

    Safe sequence(์•ˆ์ „์ˆœ์„œ) : ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ์ž์›์„ ํ• ๋‹นํ•˜๋Š” ์ˆœ์„œ

    1. ์ž์›ํ• ๋‹น ๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ์ž์› ์œ ํ˜•๋งˆ๋‹ค ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

      ๋ฐฉ๋ฒ•

      • ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„์— ์˜ˆ์•ฝ ๊ฐ„์„ ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
        • ์˜ˆ์•ฝ ๊ฐ„์„ (claim edge) : ํ–ฅํ›„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ ์„ ์œผ๋กœ ํ‘œ์‹œ๋œ ๊ฐ„์„ 
      • ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘ ์ „์— ๋ชจ๋“  ์˜ˆ์•ฝ ๊ฐ„์„ ๋“ค์„ ์ž์›ํ• ๋‹น ๊ทธ๋ž˜ํ”„์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
      • ํ”„๋กœ์„ธ์Šค๋Š” ์˜ˆ์•ฝ ๊ฐ„์„ ์œผ๋กœ ์„ค์ •ํ•œ ์ž์›์— ๋Œ€ํ•ด์„œ๋งŒ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๊ณ  ์ฃผ๊ธฐ๊ฐ€ ํ˜•์„ฑ๋˜์ง€ ์•Š์„ ๋•Œ์—๋งŒ ์ž์›์„ ํ• ๋‹น ๋ฐ›์Šต๋‹ˆ๋‹ค.

      ์˜ˆ)

      ๋‹ค์Œ ๊ทธ๋ž˜ํ”„์—์„œ ํ”„๋กœ์„ธ์Šค P2๊ฐ€ ์ž์› R2๋ฅผ ์š”์ฒญํ•˜์—ฌ ์ž์›์„ ํ• ๋‹น๋ฐ›๋Š”๋‹ค๋ฉด

      Process1

      ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฃผ๊ธฐ(cycle)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ž์›์„ ์š”์ฒญ์„ ์Šน์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

      Process2

      ๋ฐ˜๋Œ€๋กœ ํ”„๋กœ์„ธ์Šค P1์ด ์ž์› R2๋ฅผ ์š”์ฒญํ•˜์—ฌ ์ž์›์„ ํ• ๋‹น๋ฐ›๋Š”๋‹ค๋ฉด ์ฃผ๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ์ž์›์„ ์š”์ฒญํ•˜์—ฌ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      • ์š”์ฒญ์„ ย : ํ”„๋กœ์„ธ์Šค์—์„œ ์ž์›์œผ๋กœ ์—ฐ๊ฒฐ ๋œ ์„ฌ (๋‚˜ ์ € ์ž์› ์“ฐ๊ณ  ์‹ถ๋‹ค~๋ผ๊ณ  ์š”์ฒญํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋จ)
      • ํ• ๋‹น์„ ย : ์ž์›์—์„œ ํ”„๋กœ์„ธ์Šค๋กœ ์—ฐ๊ฒฐ ๋œ ์„ฌ (์ด ์ž์›์€ ์ด ํ”„๋กœ์„ธ์„œ๊ฐ€ ์“ฐ๊ณ  ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ„)

      ์ฐธ๊ณ ์ž๋ฃŒ : https://wannabe-gosu.tistory.com/26

    2. ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๊ฐ ์ž์› ์œ ํ˜•๋งˆ๋‹ค ๋‹ค์ˆ˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ–๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

      ๋ฐฉ๋ฒ•

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

      ์ฐธ๊ณ ์ž๋ฃŒ : https://chanhuiseok.github.io/posts/cs-2/

    • ์‚ฌ์‹ค ์ด ๊ฐ™์€ ๋ฐฉ๋ฒ•์€ ์ตœ๋Œ€ ์ž์› ์š”๊ตฌ๋Ÿ‰๋„ ์•Œ์•„์•ผํ•˜๊ณ  ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์ˆ˜๊ฐ€ ์ผ์ •ํ•˜๋Š” ๋“ฑ ์ œ์•ฝ์กฐ๊ฑด์ด ๋งŽ๊ณ  ์ž์›์ด์šฉ๋„ ํ•˜๋ฝ๊ฐ™์€ ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค.
  3. ๋ฐœ๊ฒฌ (๋ฐ ํšŒ๋ณต)

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

    • ํƒ์ง€๊ธฐ๋ฒ•(๋ฐœ๊ฒฌ) : Allocation, Request, Available ๋“ฑ์œผ๋กœ ์‹œ์Šคํ…œ์— ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํƒ์ง€ํ•ฉ๋‹ˆ๋‹ค. (์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ํ•จ)
    • ํšŒ๋ณต๊ธฐ๋ฒ•
      • ๊ต์ฐฉ์ƒํƒœ์— ๋น ์ง„ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จ์‹œํ‚ค๊ธฐ : ๋ถ€๋ถ„ ๊ฒฐ๊ณผ๊ฐ€ ํ๊ธฐ๋ ์ˆ˜์žˆ๋Š” ๋ถ€์ž‘์šฉ ์กด์žฌ
      • ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ์ค‘๋‹จ์‹œํ‚ฌ ๋•Œ ๋งˆ๋‹ค ํƒ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ต์ฐฉ์ƒํƒœ๋ฅผ ํƒ์ง€ํ•˜๋ฉด์„œ ํšŒ๋ณต์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ• : ๋งค๋ฒˆ ํƒ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ˜ธ์ถœ ๋ฐ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ถ€๋‹ด์ด๋˜๋Š” ์ž‘์—…์ผ ์ˆ˜ ์žˆ์Œ
  4. ๋ฌด์‹œ

    ์˜ˆ๋ฐฉ์ด๋‚˜ ํšŒํ”ผ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ต์ฐฉ์ƒํƒœ ๋ฐœ์ƒ ํ™•๋ฅ ์ด ๋น„๊ต์  ๋‚ฎ์€ ๊ฒฝ์šฐ ๋ณ„๋‹ค๋ฅธ ์กฐ์น˜๋ฅผ ์ทจํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ต์ฐฉ์ƒํƒœ์˜ ์˜ˆ(MySQL)

MySQLย MVCC์— ๋”ฐ๋ฅธ ํŠน์„ฑ ๋•Œ๋ฌธ์— ํŠธ๋žœ์žญ์…˜์—์„œ ๊ฐฑ์‹  ์—ฐ์‚ฐ(Insert, Update, Delete)๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž ๊ธˆ์„ ํš๋“ํ•œ๋‹ค. (๊ธฐ๋ณธ์€ ํ–‰์— ๋Œ€ํ•œ ์ž ๊ธˆ)

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/raw/master/Database/images/deadlock.png

ํŠธ๋žœ์žญ์…˜ 1์ด ํ…Œ์ด๋ธ” B์˜ ์ฒซ๋ฒˆ์งธ ํ–‰์˜ ์ž ๊ธˆ์„ ์–ป๊ณ  ํŠธ๋žœ์žญ์…˜ 2๋„ ํ…Œ์ด๋ธ” A์˜ ์ฒซ๋ฒˆ์งธ ํ–‰์˜ ์ž ๊ธˆ์„ ์–ป์—ˆ๋‹ค๊ณ  ํ•˜์ž.

`Transaction 1> create table B (i1 int not null primary key) engine = innodb; Transaction 2> create table A (i1 int not null primary key) engine = innodb;

Transaction 1> start transaction; insert into B values(1); Transaction 2> start transaction; insert into A values(1);`

ํŠธ๋žœ์žญ์…˜์„ commit ํ•˜์ง€ ์•Š์€์ฑ„ ์„œ๋กœ์˜ ์ฒซ๋ฒˆ์งธ ํ–‰์— ๋Œ€ํ•œ ์ž ๊ธˆ์„ ์š”์ฒญํ•˜๋ฉด

Transaction 1> insert into A values(1); Transaction 2> insert into B values(1); ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

Deadlock ์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ผ๋ฐ˜์ ์ธ DBMS๋Š” ๊ต์ฐฉ์ƒํƒœ๋ฅผ ๋…์ž์ ์œผ๋กœ ๊ฒ€์ถœํ•ด ๋ณด๊ณ ํ•œ๋‹ค.

๊ต์ฐฉ ์ƒํƒœ์˜ ๋นˆ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐฉ๋ฒ•

  • ํŠธ๋žœ์žญ์…˜์„ ์ž์ฃผ ์ปค๋ฐ‹ํ•œ๋‹ค.
  • ์ •ํ•ด์ง„ ์ˆœ์„œ๋กœ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•œ๋‹ค. ์œ„์—์„œ ํŠธ๋žœ์žญ์…˜ 1 ์ด ํ…Œ์ด๋ธ” B -> A ์˜ ์ˆœ์œผ๋กœ ์ ‘๊ทผํ–ˆ๊ณ , ํŠธ๋žœ์žญ์…˜ 2 ๋Š” ํ…Œ์ด๋ธ” A -> B์˜ ์ˆœ์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜๋“ค์ด ๋™์ผํ•œ ํ…Œ์ด๋ธ” ์ˆœ์œผ๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ํ•œ๋‹ค.
  • ์ฝ๊ธฐ ์ž ๊ธˆ ํš๋“ (SELECT ~ FOR UPDATE)์˜ ์‚ฌ์šฉ์„ ํ”ผํ•œ๋‹ค.
  • ํ•œ ํ…Œ์ด๋ธ”์˜ ๋ณต์ˆ˜ ํ–‰์„ ๋ณต์ˆ˜์˜ ์—ฐ๊ฒฐ์—์„œ ์ˆœ์„œ ์—†์ด ๊ฐฑ์‹ ํ•˜๋ฉด ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค, ์ด ๊ฒฝ์šฐ์—๋Š” ํ…Œ์ด๋ธ” ๋‹จ์œ„์˜ ์ž ๊ธˆ์„ ํš๋“ํ•ด ๊ฐฑ์‹ ์„ ์ง๋ ฌํ™” ํ•˜๋ฉด ๋™์‹œ์„ฑ์„ ๋–จ์–ด์ง€์ง€๋งŒ ๊ต์ฐฉ์ƒํƒœ๋ฅผ ํšŒํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.