week10_incheol_2 - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

111

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

๊ต์ฐฉ์ƒํƒœ(Dead Lock)์€ ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ž์›์„ ์ ์œ ํ•œ ์ƒํƒœ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์›์„ ์š”๊ตฌํ•˜๋ฉฐ ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ˜„์ƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ต์ฐฉ์ƒํƒœ ๋ฐœ์ƒ ์กฐ๊ฑด

์ฃผ๋กœ ๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์—์„œ ํ•œ์ •๋œ ์ž์›์„ ์–ป๊ธฐ ์œ„ํ•ด ์„œ๋กœ ๊ฒฝ์Ÿํ•˜๋Š” ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.

๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์˜ ๋„ค๊ฐ€์ง€ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋„ค๊ฐ€์ง€ ์กฐ๊ฑด์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ถฉ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

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

์ž์›์€ ํ•œ ๋ฒˆ์— ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ƒํ˜ธ ๋ฐฐ์ œ ๊ธฐ๋ฒ•์—๋Š” ๋ฎคํ…์Šค, ์„ธ๋งˆํฌ์–ด ๋“ฑ์ด ์žˆ๋‹ค.

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

์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์ž์›์„ ์ ์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉด์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋˜์–ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ž์›์„ ์ถ”๊ฐ€๋กœ ์ ์œ ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๋น„์„ ์ (Non-preemption)

๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž์›์€ ์‚ฌ์šฉ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ฐ•์ œ๋กœ ๋นผ์•—์„ ์ˆ˜ ์—†์–ด์•ผ ํ•œ๋‹ค.

ํ™˜๊ฒฝ ๋Œ€๊ธฐ(Circular Wait)

์„œ๋กœ ๋‹ค๋ฅธ ๊ณต์œ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์ด ์›ํ˜•์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด ์ž์‹ ์—๊ฒŒ ํ• ๋‹น๋œ ์ž์›์„ ์ ์œ ํ•˜๋ฉด์„œ ์•ž์ด๋‚˜ ๋’ค์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ์š”๊ตฌํ•œ๋‹ค.

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

์˜ˆ๋ฐฉ(Prevention)

๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์‚ฌ์ „์— ์‹œ์Šคํ…œ์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ต์ฐฉ์ƒํƒœ ๋ฐœ์ƒ์˜ ๋„ค๊ฐ€์ง€ ์กฐ๊ฑด ์ค‘์—์„œ ์–ด๋Š ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. ๋‹จ, ์ž์› ๋‚ญ๋น„๊ฐ€ ๊ฐ€์žฅ ์‹ฌํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋‹ค.

  • ์ƒํ˜ธ ๋ฐฐ์ œ(Mutual Exclusion)๋ถ€์ • : ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  • ์ ์œ  ๋ฐ ๋Œ€๊ธฐ(Hold and Wait) ๋ถ€์ • : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „ ํ•„์š”ํ•œ ๋ชจ๋“  ์ž์›์„ ํ• ๋‹นํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ๋Œ€๊ธฐ๋ฅผ ์—†์• ๊ฑฐ๋‚˜ ์ž์›์ด ์ ์œ ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ๋งŒ ์ž์›์„ ์š”๊ตฌํ•œ๋‹ค.
  • ๋น„์„ ์ (Non-preemption)๋ถ€์ • : ์ž์›์„ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ์ž์›์„ ์š”๊ตฌํ•  ๋•Œ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๊ณ , ์š”๊ตฌํ•œ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  • ํ™˜ํ˜• ๋Œ€๊ธฐ(Circular Wait)๋ถ€์ • : ์ž์›์„ ์„ ํ˜• ์ˆœ์„œ๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ฅผ ํ• ๋‹นํ•˜๊ณ , ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ํ˜„์žฌ ์ ์œ ํ•œ ์ž์›์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ณด๋‹ค ์•ž์ด๋‚˜ ๋’ค ์–ด๋Š ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ž์›์„ ์š”๊ตฌํ•˜๋„๋ก ํ•œ๋‹ค.

ํšŒํ”ผ(Avoidance)

๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋ฐฐ์ œํ•˜์ง€ ์•Š๊ณ  ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ ์ ˆํžˆ ํ”ผํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ์ฃผ๋กœ ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜(Banker's Algorithm)์ด ์‚ฌ์šฉ๋œ๋‹ค.

์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜

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

ํƒ์ง€(Detection)

์‹œ์Šคํ…œ์— ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ ๊ฒ€ํ•˜์—ฌ ๊ต์ฐฉ์ƒํƒœ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์™€ ์ž์›์„ ๋ฐœ๊ฒฌํ•œ๋‹ค.

  • ๊ต์ฐฉ์ƒํƒœ ๋ฐœ๊ฒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„ ๋“ฑ์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ณต๊ตฌ(Recovery)

๊ต์ฐฉ์ƒํƒœ๋ฅผ ์ผ์œผํ‚จ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ๊ต์ฐฉ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž์›์„ ์„ ์ ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋‚˜ ์ž์›์„ ํšŒ๋ณตํ•œ๋‹ค.

ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ

  • ๊ต์ฐฉ์ƒํƒœ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒ
  • ๊ต์ฐฉ์ƒํƒœ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์„ ํ•˜๋‚˜์”ฉ ์ข…๋ฃŒ

์ž์›์„ ์ 

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

๋ฎคํ…์Šค(mutex)

๋ฎคํ…์Šค๋Š” Key ์— ํ•ด๋‹นํ•˜๋Š” ์–ด๋–ค ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์†Œ์œ ํ•œ (์“ฐ๋ ˆ๋“œ,ํ”„๋กœ์„ธ์Šค) ๋งŒ์ด ๊ณต์œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

222

๊ณผ์ •

  • 1๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด Key๋ฅผ ์ ์œ ํ•œ๋‹ค.
  • 1๋ฒˆ ํ”„๋กœ์„ธ์Šค๋Š” ํ‚ค๋ฅผ ์ ์œ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • 2๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค.
  • 2๋ฒˆ ํ”„๋กœ์„ธ์Šค๋Š” ํ‚ค๋ฅผ ์ ์œ ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•œ๋‹ค.
  • 3๋ฒˆ ํ”„๋กœ์„ธ์Šค ๋˜ํ•œ ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด 2๋ฒˆ ํ”„๋กœ์„ธ์Šค ๋‹ค์Œ ์ˆœ๋ฒˆ์œผ๋กœ ๋Œ€๊ธฐํ•œ๋‹ค.
  • 1๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์„ ๋‹ค ์‚ฌ์šฉํ•˜๊ณ  Key๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • 2๋ฒˆ ํ”„๋กœ์„ธ์Šค๋Š” ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ๋ฐ˜ํ™˜๋œ Key๋ฅผ ์ ์œ ํ•˜๊ณ  ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•œ๋‹ค.

์„ธ๋งˆํฌ์–ด(Semaphore)

๊ณต์œ  ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํ—ˆ์šฉ์น˜ ๋งŒํผ ๋™์‹œ ์‚ฌ์šฉ์ž(์“ฐ๋ ˆ๋“œ, ํ”„๋กœ์„ธ์Šค) ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๊ฒŒ ํ•œ๋‹ค.

333

๊ณผ์ •

  • ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์ตœ๋Œ€ ํ—ˆ์šฉ์น˜๋ฅผ ์ •์˜ํ•œ๋‹ค. ์šฐ์„ , 3์œผ๋กœ ํ•ด๋ณด๊ฒ ๋‹ค.
  • 1๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•œ๋‹ค. ํ—ˆ์šฉ์น˜๋Š” 2๋กœ ๊ฐ์†Œํ•˜์˜€๋‹ค.
  • 2๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•œ๋‹ค. ํ—ˆ์šฉ์น˜๋Š” 1๋กœ ๊ฐ์†Œํ•˜์˜€๋‹ค.
  • 3๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•œ๋‹ค. ํ—ˆ์šฉ์น˜๋Š” 0๋กœ ๊ฐ์†Œํ•˜์˜€๋‹ค.
  • 4๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•œ๋‹ค. ํ—ˆ์šฉ์น˜๊ฐ€ 0์ด๋ฏ€๋กœ ๋Œ€๊ธฐํ•œ๋‹ค.
  • 2๋ฒˆ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์„ ๋‹ค ์‚ฌ์šฉํ•˜์˜€๋‹ค. ํ—ˆ์šฉ์น˜๋Š” 1๋กœ ์ฆ๊ฐ€ํ•˜์˜€๋‹ค.
  • 4๋ฒˆ ํ”„๋กœ์„ธ์Šค๋Š” ๋Œ€๊ธฐ ํ•˜๋‹ค ํ—ˆ์šฉ์น˜๊ฐ€ 1๋กœ ์ฆ๊ฐ€๋˜์–ด ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•œ๋‹ค. ํ—ˆ์šฉ์น˜๋Š” ๋‹ค์‹œ 0์œผ๋กœ ๊ฐ์†Œํ•˜์˜€๋‹ค.

๋ฎคํ…์Šค์™€ ์„ธ๋งˆํฌ์–ด์˜ ์ฐจ์ด

  • ์„ธ๋งˆํฌ์–ด๋Š” ๋ฎคํ…์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฎคํ…์Šค๋Š” ์„ธ๋งˆํฌ์–ด๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.
  • ์„ธ๋งˆํฌ์–ด๋Š” ์†Œ์œ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ฎคํ…์Šค๋Š” ์†Œ์œ ํ•  ์ˆ˜ ์žˆ๊ณ  ์†Œ์œ ์ฃผ๊ฐ€ ๊ทธ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ๊ฐ€์ง„๋‹ค.
  • ์„ธ๋งˆํฌ์–ด๋Š” ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ์—ฌ๋Ÿฌ๊ฐœ ์ผ ๋•Œ ์‚ฌ์šฉํ•˜๊ณ , ๋ฎคํ…์Šค๋Š” ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ์˜ค๋กœ์ง€ ํ•˜๋‚˜ ์ผ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

์ฐธ๊ณ