[CS] ๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition)

๐Ÿ“Œ ๊ณต์œ  ์ž์›์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผ์„ ์‹œ๋„ํ•  ๋•Œ, ํƒ€์ด๋ฐ์ด๋‚˜ ์ˆœ์„œ ๋“ฑ์ด ๊ฒฐ๊ณผ๊ฐ’์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ
    → ๊ณต์œ  ์ž์›์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•  ๋•Œ ์ž๋ฃŒ์˜ ์ผ๊ด€์„ฑ์„ ํ•ด์น˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Œ

โ–ถ๏ธ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ

  1. ์ปค๋„ ์ฝ”๋“œ ์‹คํ–‰ ์ค‘์— ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ
    • ๋ฌธ์ œ์  : ์ปค๋„๋ชจ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•ด ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ
    • ํ•ด๊ฒฐ : ์ปค๋„๋ชจ๋“œ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ disable์‹œ์ผœ CPU์ œ์–ด๊ถŒ์„ ๊ฐ€์ ธ๊ฐ€์ง€ ๋ชปํ•˜๋„๋ก ํ•จ
  2. ํ”„๋กœ์„ธ์Šค๊ฐ€ ‘system call’์„ ํ•˜์—ฌ ์ปค๋„๋ชจ๋“œ๋กœ ์ง„์ž…ํ•˜๊ณ  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„์ค‘ ๋ฌธ๋งฅ ๊ตํ™˜์ด ๋ฐœ์ƒํ•  ๋•Œ
    • ๋ฌธ์ œ์  : ํ”„๋กœ์„ธ์Šค 1์ด ์ปค๋„๋ชจ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋˜ ๋„์ค‘ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์–ด CPU์ œ์–ด๊ถŒ์ด ํ”„๋กœ์„ธ์Šค 2๋กœ ๋„˜์–ด๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ
    • ํ•ด๊ฒฐ : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ปค๋„ ๋ชจ๋“œ์—์„œ ์ž‘์—…์„ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜๋”๋ผ๋„ CPU์ œ์–ด๊ถŒ์ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก ํ•จ
  3. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ์—์„œ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์˜ ์ปค๋„ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ
    • ๋ฌธ์ œ์  : ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์—์„œ 2๊ฐœ์˜ CPU๊ฐ€ ๋™์‹œ์— ์ปค๋„ ๋‚ด๋ถ€์˜ ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜์—ฌ ์กฐ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
  4. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณตํ†ต์˜ ์ „์—ญ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ๊ฒฝ์Ÿ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ โ‰๏ธ ํ•ด๊ฒฐ : ์ปค๋„ ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ณต์œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด lock/unlock ํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ
  5. ๐Ÿ‘‰๐Ÿป 3, 4๋ฒˆ์˜ ๊ฒฝ์šฐ Race Condition ๊ด€๊ณ„๋Š” 3๊ฐ€์ง€ ๋ฌธ์ œ์— ์ง๋ฉด

โ–ถ๏ธ ์ž„๊ณ„ ์˜์—ญ(Critical Section)

๐Ÿ“Œ ๊ณต์œ  ์ž์›์— ๋Œ€ํ•˜์—ฌ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ์ด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ†ต์ œํ•ด์•ผํ•˜๋Š”๋ฐ, ๊ทธ๋Ÿฌํ•œ ํ†ต์ œ๊ฐ€ ํ•„์š”ํ•œ ์˜์—ญ์„ ์ž„๊ณ„ ์˜์—ญ์ด๋ผ๊ณ  ๋ถ€๋ฆ„
  • ์ž„๊ณ„ ์˜์—ญ์€ ์ž…์žฅ ์˜์—ญ(Entry section)๊ณผ ํ‡ด์žฅ ์˜์—ญ(Exit section)์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„
    → ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ž…์žฅ ์˜์—ญ์—์„œ ๊ถŒํ•œ์„ ํš๋“ํ•˜๊ณ , ํ‡ด์žฅ ์˜์—ญ์—์„œ ๊ถŒํ•œ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‹์œผ๋กœ ํ†ต์ œ๊ฐ€ ์ด๋ค„์ง

โ˜‘๏ธ ์ž„๊ณ„ ์˜์—ญ ํ•ด๊ฒฐ ์กฐ๊ฑด

  • ์ƒํ˜ธ ๋ฐฐ์ œ(Mutual Exclusion) : ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์„ ์ˆ˜ํ–‰์ค‘์ด๋ฉด ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค์€ ๊ทธ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ ๋ง‰์Œ
  • ์ง„ํ–‰(Progress) : ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ€๋ ค๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ๋“ค์–ด๊ฐ€๊ฒŒ ํ•ด์คŒ. ์ž„๊ณ„ ์˜์—ญ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์™ธ์—๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์— ์ง„์ž…ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•  ์ˆ˜ ์—†์Œ
  • ์œ ํ•œ ๋Œ€๊ธฐ(Bounded Waiting) : ๊ธฐ์•„ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ€๋ ค๊ณ  ์š”์ฒญํ•œ ํ›„๋ถ€ํ„ฐ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ€๋Š” ํšŸ์ˆ˜์— ํ•œ๊ณ„๊ฐ€ ์žˆ์–ด์•ผ ํ•จ

โ˜‘๏ธ ์ž„๊ณ„ ์˜์—ญ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ์œ ์ € ๋ชจ๋“œ ๋™๊ธฐํ™” : ์ปค๋„ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋™๊ธฐํ™” ๊ธฐ๋ฒ•. ํ”ผํ„ฐ์Šจ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Pterson’s Algorithm)์ด ์žˆ์Œ
  • ์ปค๋„ ๋ชจ๋“œ ๋™๊ธฐํ™” : ์ปค๋„์—์„œ ์ œ๊ณตํ•˜๋Š” ๋™๊ธฐํ™” ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•. ๊ฐ ํ”„๋กœ์„ธ์Šค๋“ค ์•ˆ์˜ ์Šค๋ ˆ๋“ค๋ผ๋ฆฌ์˜ ๋™๊ธฐํ™”๋„ ๊ฐ€๋Šฅ
    • ์„ธ๋งˆํฌ์–ด, ๋ฎคํ…์Šค, ๋ชจ๋‹ˆํ„ฐ ๋“ฑ์˜ ๋ฐฉ๋ฒ•