ํฌ์ŠคํŠธ

๐ŸŒ‘ Race Condition


@0418

  • ๋ณ‘ํ–‰์ฒ˜๋ฆฌ Concurrent Processing์™€ ๊ฒฝ์Ÿ์ƒํ™ฉRace Condition
    • ๋ณ‘ํ–‰์ฒ˜๋ฆฌ
      • ํ•˜๋‚˜์˜ CPU๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์กฐ๊ธˆ์”ฉ ๋ฒˆ๊ฐˆ์•„ ์ฒ˜๋ฆฌ
      • ๊ฑฐ์‹œ์  ๊ด€์ ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ํšจ๊ณผ
      • ์–ด๋Š ์ˆœ๊ฐ„์— ๋ณด๋ฉด ์˜ค์ง ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ์ฒ˜๋ฆฌ๋˜์ง€๋งŒ, ๊ณต์œ  ๋ณ€์ˆ˜๋ฅผ ์ ‘๊ทผํ•œ๋‹ค๋ฉด ๊ฒฝ์Ÿ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ โ€˜์žˆ์Œโ€™ = ๋ฌด์กฐ๊ฑด ๋ฐœ์ƒ์ด ์•„๋‹˜ (๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋ณด๋‹ค๋Š” ๋นˆ๋„๊ฐ€ ๋‚ฎ์Œ, ์„ž์ผ ์ˆ˜๋„ ์žˆ์Œ)
  • ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ Parallel Processing์™€ ๊ฒฝ์Ÿ์ƒํ™ฉ
    • ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ
      • ๋‹ค์ˆ˜์˜ CPU๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌ
      • ์–ด๋Š ์ˆœ๊ฐ„์— ๋ณด๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ฒ˜๋ฆฌ
      • ๊ณต์œ ๋ณ€์ˆ˜๋ฅผ ์ ‘๊ทผํ•œ๋‹ค๋ฉด ๊ฒฝ์Ÿ์ƒํ™ฉ์ด ๋”์šฑ ์‹ฌํ•˜๊ฒŒ ๋ฐœ์ƒํ•  ์ˆ˜ โ€˜์žˆ์Œโ€™ = ๋ฌด์กฐ๊ฑด ๋ฐœ์ƒ์ด ์•„๋‹˜ (๊ทผ๋ฐ ๋ณ‘ํ–‰์ฒ˜๋ฆฌ๋ณด๋‹ค๋Š” ๋นˆ๋„๊ฐ€ ๋†’์Œ, ์„ž์ผ ์ˆ˜๋„ ์žˆ์Œ)
  • ์ž„๊ณ„์˜์—ญ Critical Section
    • ๊ฒฝ์Ÿ์ƒํ™ฉ์ด ๋ฐœ์ƒ๋˜์–ด ์ฒ˜๋ฆฌ์˜ ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„
  • ์ƒํ˜ธ๋ฐฐ์ œ
    • ์ž„๊ณ„ ์˜์—ญ์—์„œ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ์ง„์ž…ํ•  ์ˆ˜ ์ดใ…†๋„๋กํ•จ
    • ์ƒํ˜ธ๋ฐฐ์ œ๋Š” ์ž ๊ธˆ Looking ์žฅ์น˜์™€ ์ฑ„์ œ UnLock ์žฅ์น˜๋กœ ์‹คํ˜•
  • ํ”„๋กœ๊ทธ๋žจ ๋™๊ธฐํ™” Process Synchronization
    • ์ž„๊ณ„ ์˜์—ญ์„ ์„ค์ •ํ•˜๊ณ  ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์–ด ๊ตฌ๋ถ„์—๋‹ค๊ฐ€ ์ƒํ˜ธ๋ฐฐ์ œ ์ž˜์น˜๋ฅผ ์ž˜ ์„ค์น˜
  • ์ƒํ˜ธ๋ฐฐ์ œ ์ ˆ์ฐจ (์ž ๊ธˆ๊ณผ ํ•ด์ œ ์žฅ์น˜)์˜ ์กฐ๊ฑด
    • ๊ณ„์† ์ง„ํ–‰
      • ์ž„๊ณ„ ์˜์—ญ์— ์ง„์ž…ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์„ ๋•Œ๋Š” ์›ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณง๋ฐ”๋กœ ์ง„์ž…ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•จ
    • ํ•ญํ˜ธ ๋ฐฐ์ œ
      • ์ž„๊ณ„ ์˜์—ญ์— ์ง„์ž…ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ์ง„์ž…์„ ๋ถˆํ—ˆ๋˜์–ด์•ผ ํ•จ
    • ๋Œ€๊ธฐ ํ•œ์ •
      • ์ž„๊ณ„ ์˜์—ญ ์ง„์ž…์„ ์›ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋žœ๋คํ•˜๊ณ  ๊ณตํ‰ํ•˜๊ฒŒ ์ง„์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์ฃผ์–ด์ ธ์•ผ ํ•จ
  • ์ƒํ˜ธ๋ฐฐ์ œ์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•
    • ์ˆœ์ „ํžˆ SW๋กœ๋งŒ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•
    • HW์˜ ์ง€์›์„ ๋ฐ›์•„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

@0420

  • ๋ฏธ์™„์„ฑ SW ์ƒํ˜ธ๋ฐฐ์ œ ์‹œ๋„๋“ค

  • ๊ณตํ†ต ๊นƒ๋ฐœ ์ฒดํฌ ๋ฐฉ๋ฒ•
    • whilie(flag == 1); flag = 1;
    • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์ผ๋•Œ ๊ฑฐ์˜ ๋™์‹œ์— ์ง„์ž…ํ•˜๋ฉด ๊ฒฝ์Ÿ์ƒํ™ฉ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
    • ๋ณ‘ํ–‰ ์ฒ˜๋ฆฌ์ผ๋•Œ ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€๊ธฐ ์ดํ›„ flag = 1; ์ฒ˜๋ฆฌ ์ง์ „, ์ฃผ๋„๊ถŒ์ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋„˜์–ด๊ฐ€๊ณ , ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์—์„œ๋„ flag = 0; ์ฒ˜๋ฆฌ ์ง์ „, ์ฃผ๋„๊ถŒ์ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ๋„˜์–ด๊ฐ€๋ฉด ๊ฒฝ์Ÿ์ƒํ™ฉ ๋ฐœ์ƒ ๊ฐ€๋Šฅ (๊ณต์œ  ๋ณ€์ˆ˜๊ฐ€ ๋ฎ์–ด์”Œ์›Œ์ง€๋Š”)
  • ์ž๊ธฐ ๊นƒ๋ฐœ ํ‘œ์‹œ ๋ฐฉ๋ฒ•
    • while(flag[1] == 1); flag[0] = 1;
    • ๊ณตํ†ต ๊นƒ๋ฐœ ์ฒดํฌ ๋ฐฉ๋ฒ•๊ณผ ์œ ์‚ฌ
    • flag[0] = 1; while(flag[1] == 1);
  • ์ฐจ๋ก€์ง€ํ‚ค๊ธฐ ๋ฐฉ๋ฒ•
    • ๋™์‹œ์—๋Š” ๋ชป๋“ค์–ด๊ฐ
    • ๊ทผ๋ฐ ์ž๊ธฐ ์ฐจ๋ก€๊ฐ€ ์•„๋‹ˆ๋ฉด ๊ณตํšŒ์ „ ํ•˜๋Š” ๊ฒฝ์šฐ +> ๊ณ„์† ์ง„ํ–‰ X

@0504

  • Spin Lock ์Šคํ•€ ๋ก (if then else white, TAS SAWP, ๋น™๊ธ€๋น™๊ธ€ ๋ˆ๋‹ค - CPU๋ฅผ ์“ด๋‹ค)
    • ์•ž์—์„œ ์ œ์‹œ๋œ SW ๋ฐ HW ์ƒํ˜ธ๋ฐฐ์ œ ๊ธฐ๋ฒ•๋“ค์€ ๋ชจ๋‘ ๋ฐ”์œ ๋Œ€๊ธฐ ๊ธฐ๋ฐ˜์˜ ์ž ๊ธˆ์žฅ์น˜๋“ค์ž„ โ† ์Šคํ•€๋ก
    • ์ด๋Ÿฐ ๋ฐฉ๋ฒ•๋“ค์€ ๋•Œ์— ๋”ฐ๋ผ CPU ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•˜๊ณ  ์ž„๊ณ„ ์˜์—ญ์— ์ง„์ž…ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ํ™œ๋™ํ•˜๋ฉด ํŒŒ๊ธ‰ํšจ๊ณผ๊ฐ€ ํผ
    • ๋”ฐ๋ผ์„œ ๋ณด๋‹ค ํŽธ๋ฆฌํ•˜๊ณ  ๋ณดํŽธ์ ์ธ ๊ฐœ๋…์˜ ์ž ๊ธˆ์žฅ์น˜๊ฐ€ ํ•„์š” โ† ์„ธ๋งˆํฌ
  • ์„ธ๋งˆํฌ (๋น™๊ธ€๋น™๊ธ€ ๋Œ์ง€ ์•Š๊ณ  ๋Œ€๊ธฐ)
    • S ์—ด์‡ 
    • P(S) ์—ด์‡ ๋ฅผ ๊ฐ€์ ธ๊ฐ€๋Š” ์—ฐ์‚ฐ (์—ด์‡  -= 1)
    • P(S) ์—ฐ์‚ฐ ์‹œ ์—ด์‡ ๊ฐ€ ์—†์œผ๋ฉด (์—ด์‡  == 0) ๋Œ€๊ธฐ โ†’ OS๊ฐ€ ์ฒ˜๋ฆฌ
    • V(S) ์—ด์‡ ๋ฅผ ๋Œ๋ ค๋†“๋Š” ์—ฐ์‚ฐ (์—ด์‡  += 1)
  • ์ด์ง„ ์„ธ๋งˆํฌ์™€ ์นด์šดํŒ… ์„ธ๋งˆํฌ
    • ์ด์ง„ ์„ธ๋งˆํฌ : ์ฃผ๋กœ ์ƒํ˜ธ๋ฐฐ์žฌ ์šฉ์œผ๋กœ, ๋ฐ•์ž ๋งž์ถ”๊ธฐ
      • ์„ธ๋งˆํฌ ๋ณ€์ˆ˜ S๋ฅผ 0 or 1๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  0 or 1 ์ด์™ธ์˜ ๊ฐ’์„ ์‚ฌ์šฉ์น˜ ์•Š๋Š” ๊ฒฝ์šฐ
      • 1๋กœ ์ดˆ๊ธฐํ™” ์‹œ ์ƒํ˜ธ ๋ฐฐ์žฌ, 0์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œ ๋ณด์กฐ๋™๊ธฐํ™”์šฉ์œผ๋กœ ์‚ฌ์šฉ๋จ
        • While(1) P(S) โ€ฆ (V), V(S) P(S), V(S) ์ดํ›„ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ P(S) ํ•˜๋Š”
    • ์นด์šดํŒ… ์„ธ๋งˆํฌ : ๋ฐ•์ž ๋งž์ถ”๊ธฐ, ๋ฆฌ์†Œ์Šค ์นด์šดํŒ…
      • ๊ธฐ๋Šฅ์€ ๋˜‘๊ฐ™์€ ๋ฐ 1 ์ด์ƒ์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š”
      • S๋ฅผ Buffer ๊ฐœ์ˆ˜๋กœ ์ƒ๊ฐ, ๊ฐ€์ ธ๊ฐˆ ๋•Œ P(S)
      • ์™œ S -= 1 ์ผ๋ฐ˜ ์—ฐ์‚ฐ ์•ˆ์”€ ? โ†’ ์ด๊ฑฐ ์ž์ฒด๊ฐ€ ์ž„๊ณ„ ์˜์—ญ
  • ์ƒ์‚ฐ์ž-์†Œ๋น„์ž ๋ฌธ์ œ Producer-Consumer Problem
    • ๊ฐœ๋…
      • ํ•œ ์ชฝ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์‚ฐํ•˜์—ฌ ์ „๋‹ฌํ•˜๊ณ , ๋‹ค๋ฅธ ํ•œ ์ชฝ ํ”„๋กœ์„ธ์Šค๋Š” ์ „๋‹ฌ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์†Œ๋ชจํ•จ
      • E Empty, F Full, M Mutual Exclusion (์ƒํ˜ธ๋ฐฐ์žฌ์šฉ = ์—ด์‡ ?)
      • I.E. Circular Queue ์— ํ•œ ์ชฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ , ํ•œ ์ชฝ์„ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋ƒ„
      • ์†Œ๋น„์ž (P(F), P(M), F ํ•˜๋‚˜ ์ฑ„์›€, 0์ด๋ฉด ๋Œ€๊ธฐ, V(M), V(F))
      • ์ƒ์‚ฐ์ž (P(E), P(M), E ํ•˜๋‚˜ ์ฑ„์›€, 0์ด๋ฉด ๋Œ€๊ธฐ, V(M), V(E))
      • I.E. ๋ฐ•์ž ๋งž์ถ”๊ธฐ
      • ์†Œ๋น„์ž While P(S) Process(Data)
      • ์ƒ์‚ฐ์ž While GetData() V(S)
  • Dining Philosophers Problem ์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž๋“ค ๋ฌธ์ œ
    • ๊ฐœ๋…
      • ์ž ๊ธˆ (์„ธ๋งˆํฌ)์ด ํ•ด์žฌ๋””๊ธฐ๋ฅผ ์˜์›ํžˆ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ, ์ฆ‰, ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ์‚ดํ‘œ๋ณด๋Š” ์ƒ์ง•์  ๋ฌธ์ œ
  • ๋ชจ๋‹ˆํ„ฐ์˜ ๊ฐœ๋…
    • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ˆ˜์ค€์—์„œ ์ œ๊ณต๋˜๋Š” ๊ณ ์ˆ˜์ค€ ์ƒํ˜ธ๋ฐฐ์žฌ ์žฅ์น˜
      • ํ•จ์ˆ˜(์„œ๋ธŒ๋ฃจํ‹ด, ๋ฉ”์†Œ๋“œ) ํ˜•ํƒœ๋กœ ๊ตฌ๋ถ„๋œ ์ž„๊ณ„ ์˜์—ญ๋“ค์˜ ๋ชจ์ž„
      • ๋ชจ๋‹ˆํ„ฐ ๋‚ด์—์„œ๋Š” ์˜ค๋กœ์ง€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ์ง„์ž… ๊ฐ€๋Šฅ
      • ๋ชจ๋‹ˆํ„ฐ๋Š” ๊ณ ์œ ์˜ ์‹๋ณ„ ์ด๋ฆ„์„ ๊ฐ€์ง
      • ์„ธ๋งˆํฌ์˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ์— ๋”ฐ๋ฅธ ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฐœ์„ 
      • @ ์•Œ์ž˜๋”ฑ์œผ๋กœ ํ•œ ๋†ˆ๋งŒ ๋“ค์–ด๊ฐ€๋„๋ก ๊ฐ์‹œ
  • ๋ชจ๋‹ˆํ„ฐ์˜ ๋‚ด๋ถ€(์กฐ๊ฑด) ํ
    • ๋ชจ๋‹ˆํ…… ์ง„์ž…ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ๊ฐ„์ด๋‚˜ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•ด ์ž ์‹œ ์‹คํ–‰์„ ์œ ๋ณดํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ
    • ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋Š” ๋ชจ๋‹ˆํ„ฐ ์ž ๊ธˆ ์žฅ์น˜๋ฅผ ํ•ด์ œํ•˜๊ณ  ์ž์‹ ์€ ๋‚ด๋ถ€ ํ์—์„œ ๋Œ€๊ธฐ
    • ๋‹ค๋ฅธ ใ„นํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋‹ˆํ„ฐ์— ์ง„์ž…ํ•˜์—ฌ ์ฒ˜๋ฆฌ๋ฅด ๋งˆ์น˜๊ณ  ๋‚˜๊ฐ€๋ฉด์„œ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‚ด๋ถ€ ํ์— ๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ž ๊ธˆ์„ ์ธ๊ณ„ โ† ๋Œ€๊ธฐ ์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋‹ˆํ„ฐ ๋‚ด์—์„œ ์‹คํ–‰์„ ์ œ๊ฐœ
  • ์ž๋ฐ” ๋ชจ๋‹ˆํ„ฐ
    • ์ž๋ฐ”๋Š” ๊ฐ์ฒด ๋‹จ์œ„๋กœ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ํ˜•์„ฑ
    • ํ•ด๋‹น ๋ชจ๋‹ˆํ„ฐ์—๋Š” synchronized ๋ฉ”์†Œ๋“œ๋“ค๋งŒ ํฌํ•จํ•จ

@0509

  • ๊ต์ฐฉ ์ƒํƒœ Deadlocks
    • ๊ณ ์žฅ๋‚œ ์ขŒ๋ฌผ์‡  โ†’ ๋‚˜๊ฐ€์ง€๋„ ๋ชปํ•˜๊ณ  ๋‚˜์˜ค์ง€๋„ ๋ชปํ•จ
    • ์ง„ํ‡ด์–‘๋‚œ โ†’ ์˜์›ํžˆ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ
    • ์ฃผ์š” ์›์ธ : ๊ณ ์žฅ์ด๋‚˜ ๊ธฐํƒ€ ์ด์œ ๋กœ ์ธํ•œ ์ž์›์˜ ๋ถ€์กฑ
  • ์ปดํ“จํ„ฐ ์ž์›์˜ ์œ ํ˜•
    • HW ์ž์›๊ณผ SW ์ž์›
    • ์„ ์  ๊ฐ€๋Šฅํ•œ ์ž์›๊ณผ ์„ ์  ๋ถˆ๊ฐ€๋Šฅ ์ž์›
    • ๊ณต์œ  ๊ฐ€๋Šฅ ์ž์›๊ณผ ๋ฐฐํƒ€์  ์‚ฌ์šฉ ์ž์›
  • ์ปดํ“จํ„ฐ์˜ ์ž์› ๊ด€๋ฆฌ ๋ชจ๋ธ
    • ์š”์ฒญ โ†’ ์‚ฌ์šฉ โ†’ ๋ฐ˜๋‚ฉ (๋ฌต์‹œ์ , ๋ช…์‹œ์ )
      • ํ”„๋กœ์„ธ์Šค๋“ค์€ OS์—๊ฒŒ ํ•„์š”ํ•œ ์ž์›์„ ์š”์ฒญ
      • ์ง€์› ์š”์ฒญ์€ ์‹œ์Šคํ…œ ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฃจ์–ด์ง
      • ์œ ๋‹‰์Šค/๋ฆฌ๋ˆ…์Šค์˜ ๋Œ€ํ‘œ์ ์ธ ์ž์› ์š”์ฒญ ์‹œ์Šคํ…œ ์ฝœ์€ open(), ์ž์› ๋ฐ˜๋‚ฉ ์‹œ์Šคํ…œ ์ฝœ์€ close()
  • ๊ต์ฐฉ ์ƒํƒœ์˜ ํ•„์š”์กฐ๊ฑด
    • ์ž์›์˜ ๋ฐฐํƒ€์  ์‚ฌ์šฉ Mutual Exclusion
    • ์ž์›์˜ ์ ์œ  ๋Œ€๊ธฐ Hole & Wait
      • ์ž์›์˜ ๋ถ€๋ถ„ ํ• ๋‹น Partial Allocation
    • ์ž์› ๋น„์„ ์  No Preemption
    • ์ž์›์— ๋Œ€ํ•œ ํ™˜ํ˜• ๋Œ€๊ธฐ Circular Wait
      • ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„ RAH Resource Allocation Graph๋กœ ํŒ๋ณ„ ๊ฐ€๋Šฅ
  • ๊ต์ฐฉ ์ƒํƒœ ๋Œ€์‘ ๋ฐฉ์•ˆ
    • ๊ต์ฐฉ ์ƒํƒœ ์˜ˆ๋ฐฉ Prevention
      • ๊ต์ฐฉ ์ƒํƒœ์˜ ํ•„์š”์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๊ฐ€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š” ํ• ๋‹น์ •์ฑ… ๋„์ž…
    • ๊ต์ฐฉ ์ƒํƒœ ํšŒํ”ผ Avoidance
      • ์ž์›์„ ํ• ๋‹นํ•˜๋ฉด์„œ ๊ต์ฐฉ ์ƒํƒœ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฉด ์ถ”๊ฐ€ ํ• ๋‹น ๋ณด๋ฅ˜
    • ๊ต์ฐฉ ์ƒํƒœ ํƒ์ง€ ๋ฐ ๋ณต๊ตฌ Detection & Recovery
    • ๊ต์ฐฉ ์ƒํƒœ ๋ฐฉ์น˜ Donโ€™t Care

@0511

  • ๊ต์ฐฉ ์ƒํƒœ ์˜ˆ๋ฐฉ Prevention
    • ๊ต์ฐฉ ์ƒํƒœ์˜ ํ•„์š”์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๊ฐ€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š” ํ• ๋‹น์ •์ฑ… ๋„์ž…
    • ์ž์›์˜ ๋ฐฐํƒ€์  ์‚ฌ์šฉ ์กฐ๊ฑด ์ œ๊ฑฐ
      • ์ปดํ“จํ„ฐ ์ž์›์˜ ๋Œ€๋ถ€๋ถ„์€ ๋ฐฐํƒ€์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผํ•จ, ๋„์ž… ๋ถˆ๊ฐ€
    • ์ž์›์˜ ์ ์œ  ๋Œ€๊ธฐ ์กฐ๊ฑด ์ œ๊ฑฐ
      • ์‚ฌ์šฉํ•  ์ž์› ์ „์ฒด๋ฅผ ํ•œ๊บผ๋ฒˆ์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ
      • ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ž์›์ด ํ•„์š”ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ๊ธฐ์•„ ์ƒํƒœ ๊ฐ€๋Šฅ์„ฑ
      • ์ž์›์„ ๋ฏธ๋ฆฌ ํ™•๋ณดํ•จ์œผ๋กœ์จ ํ™œ๋‘‰๋„ ์ €ํ•˜, ๋„์ž… ๊ณค๋ž€
    • ์ž์›์˜ ๋น„์„ ์  ์กฐ๊ฑด ์ œ๊ฑฐ
      • ์ž์›์ด ๋ถ€์กฑํ•˜๋ฉด ์ด์ง€ ์ ์œ  ์ค‘์ธ ์ž์›์„ ๊ฐ•์ œ ํšŒ์ˆ˜
      • ๋กค๋ฐฑ Rollback, ๋“ฑ ํฐ ๋น„์šฉ ๋™๋ฐ˜, ๋„์ž… ๊ณค๋ž€
    • ์ž์›์— ๋Œ€ํ•œ ํ™˜ํ˜• ๋Œ€๊ธฐ ์กฐ๊ฑด ์ œ๊ฑฐ
      • ๋ชจ๋“  ์ž์›์— ์ผ๋ จ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ž์›์„ ํ• ๋‹นํ•  ๋•Œ๋Š”์ž์›์˜ ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ๋งŒ ํ• ๋‹น, ํ™˜ํ˜• ๋Œ€๊ธฐ ์กฐ๊ฑด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
  • ๊ต์ฐฉ ์ƒํƒœ ํšŒํ”ผ Avoidance
    • ์ž์›์„ ํ• ๋‹นํ•˜๋ฉด์„œ ๊ต์ฐฉ ์ƒํƒœ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฉด ์ถ”๊ฐ€ ํ• ๋‹น ๋ณด๋ฅ˜
    • Safe ์ƒํƒœ์™€ Unsafe ์ƒํƒœ
      • Safe State
        • ์ž์› ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง€๋”๋ผ๋„ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๊ฒฐ์ฝ” ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ์ƒํƒœ
        • ํ˜„์žฌ ๋‚จ์€ ์ž์›์ด ๋ถ€์กฑํ•˜๋”๋ผ๋„ ์ ์œ  ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋กœ ์ž์›์ด ๋ฐ˜๋‚ฉ๋˜์–ด ๋ชจ๋“ ์ž์› ํ• ๋‹น ์š”๊ตฌ๋ฅผ ๋งŒ์กฑ-ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์กด์žฌํ•˜๋ฉด
      • Unsafe State
        • ์ž์› ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง„ ํ›„, ์ดํ›„์˜ ๋ชจ๋“  ์ž์› ํ• ๋‹น์„ ๋งŒ์กฑ์‹œํ‚ฌ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
    • ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„ ์˜ˆ์•ฝ ๊ฐ„์„ , ์•ˆ์ „ ์ƒํƒœ ํŒ๋ณ„, ๊ต์ฐฉ ์ƒํ…Œ ํšŒํ”ผ
      • ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„์˜ ์˜ˆ์•ฝ ๊ฐ„์„ 
        • ํ˜„์žฌ์š”์ฒญ๋œ ์ž์›์„ ํ• ๋‹น ํ–‡๋‹ค๋Š” ๊ฐ€์ • ํ•˜์˜ ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„
        • ์˜ˆ์•ฝ ๊ฐ„์„ ์ด ํฌํ•จ๋œ ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„๋กœ๋ถ€ํ„ฐ ์•ˆ์ • ์ƒํƒœ ์—ฌ๋ถ€ ํŒ๋ณ„
        • ์•ˆ์ „ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ฉด ์ž์› ์š”์ฒญ ๋ณด๋ฅ˜
    • Dijstra์˜ ์€ํ–‰๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ Bankerโ€™s Algorithm
      • ๊ฐœ๋…
        • ์ž์›์— ๋Œ€ํ•œ ์ž ์žฌ ์ˆ˜์š” ๋ฐ ์žฌ๊ณ  ํ˜„ํ™ฉ์œผ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ ์ƒํƒœ ์‹๋ณ„
  • ๊ต์ฐฉ ์ƒํƒœ ํƒ์ง€ ๋ฐ ๋ณต๊ตฌ Detection & Recovery (์ฃผ๊ธฐ์ ์œผ๋กœ, ๊ฐ€๋”)
    • ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ ์ƒํƒœ ์—ฌ๋ถ€ ํŒ๋ณ„
      • ์ ์œ  ๋Œ€๊ธฐ ํ˜„์ƒ (ํ™˜ํ˜• ๋Œ€๊ธฐ, ์‚ฌ์ดํด, Cycle) ์ด ์กด์žฌํ•˜๋Š”์ง€ ์กฐ์‚ฌ
      • ์‚ฌ์ดํด์ด ์กด์žฌํ•œ๋‹ค๊ณ  ํ•˜์—ฌ ๋ฐ˜๋“œ์‹œ ๊ต์ฐฉ ์ƒํƒœ๋Š” ์•„๋‹˜
    • ์‚ฌ์ดํด ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ๊ต์ฐฉ์ƒํƒœ ๋ณต๊ตฌ
      • ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ๋ณต๊ตฌ (ํ•ด์ œ)ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž์› ๊ฐ•์ œ ํšŒ์ˆ˜๊ฐ€ ๋ถˆ๊ฐ€ํ”ผ
        • ํ”„๋กœ์„ธ์Šค ๋‹จ์œ„์˜ ์ž์› ํšŒ์ˆ˜
          • ํฌ์ƒ Victim ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ์ •ํ•˜๊ณ , ๊ทธ ํ”„๋กœ์„ธ์Šค์˜ ์ ์œ  ์ž์› ์ „์ฒด๋ฅผ ํšŒ์ˆ˜
          • ์ž์›์ด ๋ถ€์กฑํ•˜๋ฉด ๊ณ„์†ํ•ด์„œ ํฌ์ƒ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ์ •ํ•˜์—ฌ ํšŒ์ˆ˜
          • ์ž์›์„ ํšŒ์ˆ˜ ๋‹นํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ•์ œ ์ข…๋ฃŒ (Roolback)
        • ๊ฐœ๋ณ„ ์ž์› ๋‹จ์œ„์˜ ํšŒ์ˆ˜
          • ํฌ์ƒ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์› ์ค‘ ์ผ๋ถ€๋งŒ ํšŒ์ˆ˜
          • ์ž์›์˜ ์ผ๋ถ€๋ฅผ ํšŒ์ˆ˜๋‹นํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ํ›„ํ‡ดํ•˜์—ฌ ์žฌ์‹คํ–‰ Rollback
  • ๊ต์ฐฉ ์ƒํƒœ ๋ฐฉ์น˜ Donโ€™t Care
    • ๊ต์ฐฉ ์ƒํƒœ ์˜ˆ๋นต, ํšŒํ”ผ, ํƒ์ง€ ๋ฐ ๋ณต๊ตฌ๋Š” ์‹ฌ๊ฐํ•œ ๋ถ€๋‹ด (์„ฑ๋Šฅ ์ €ํ•˜)๋ฅผ ๋™๋ฐ˜
      • OS๋Š” ๊ต์ฐฉ ์ƒํƒœ์™€ ๊ด€๋ จํ•˜์—ฌ ์–ด๋– ํ•œ ํ™œ๋™๋„ ํ•˜์ง€ ์•Š์Œ
      • ๊ต์ฐฉ ์ƒํƒœ์— ๊ด€๊ณ„๋˜์–ด ์‹คํ–‰์ด ์ค‘๋‹จ๋œ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์‹ํ•˜๊ณ  ์ฒ˜๋ฆฌ
      • ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ OS์—์„œ ์ฑ„ํƒ
์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.