[์šด์˜์ฒด์ œ] ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”

๐Ÿงช Computer Science/Operating System

์ž„๊ณ„์˜์—ญ(Critical Section)

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์˜ ๋ฌธ์ œ์ ์—์„œ ๋‚˜์˜ค๋“ฏ, ๋™์ผํ•œ ์ž์›์„ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋Š” ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ ์˜์—ญ์„ ์ž„๊ณ„์˜์—ญ(Critical Section)์ด๋ผ ํ•œ๋‹ค.


์ž„๊ณ„์˜์—ญ ๋ฌธ์ œ(Critical Section Problem)

ํ”„๋กœ์„ธ์Šค๋“ค์ด Critical Section์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ์„ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์กฐ๊ฑด(Requirements)
    • ์ƒํ˜ธ ๋ฐฐ์ œ(Mutual Exclusion)
      • ํ”„๋กœ์„ธ์Šค A๊ฐ€ Critical Section์—์„œ ์‹คํ–‰ ์ค‘์ด๋ผ๋ฉด, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์€ ๊ทธ๋“ค์ด ๊ฐ€์ง„ Critical Section์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์—†๋‹ค.
    • ์ง„ํ–‰(Progress)
      • Critical Section์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๊ณ , ๋ณ„๋„์˜ ๋™์ž‘์ด ์—†๋Š” ํ”„๋กœ์„ธ์Šค๋“ค๋งŒ Critical Section ์ง„์ž… ํ›„๋ณด๋กœ์„œ ์ฐธ์—ฌ๋  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•œ์ •๋œ ๋Œ€๊ธฐ(Bounded Wating)
      • ํ”„๋กœ์„ธ์Šค A๊ฐ€ Critical Section์— ์ง„์ž… ์‹ ์ฒญ ํ›„๋ถ€ํ„ฐ ๋ฐ›์•„๋“ค์—ฌ์งˆ ๋–„๊นŒ์ง€, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์ด Critical Section์— ์ง„์ž…ํ•˜๋Š” ํšŸ์ˆ˜๋Š” ์ œํ•œ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

ํ•ด๊ฒฐ์ฑ…

  • Lock
    • ํ•˜๋“œ์›จ์–ด ๊ธฐ๋ฐ˜ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ์จ, ๋™์‹œ์— ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด Critical Section์— ์ง„์ž…ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” Lock์„ ํš๋“ํ•˜๊ณ  Critical Section์„ ๋น ์ ธ๋‚˜์˜ฌ ๋•Œ, Lock์„ ๋ฐฉ์ถœํ•จ์œผ๋กœ์จ ๋™์‹œ์— ์ ‘๊ทผ์ด ๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
    • ํ•œ๊ณ„
      • ๋‹ค์ค‘์ฒ˜๋ฆฌ๊ธฐ ํ™˜๊ฒฝ์—์„œ๋Š” ์‹œ๊ฐ„์ ์ธ ํšจ์œจ์„ฑ ์ธก๋ฉด์—์„œ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ์„ธ๋งˆํฌ์–ด(Semaphores)
    • ์†Œํ”„ํŠธ์›จ์–ด ์ƒ์—์„œ Critical Section ๋ฌด๋„บ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋™๊ธฐํ™” ๋„๊ตฌ
    • ์ข…๋ฅ˜
      • ์นด์šดํŒ… ์„ธ๋งˆํฌ์–ด(Counting Semaphores): ๊ฐ€์šฉํ•œ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ€์ง„ ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ œ์–ด์šฉ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์„ธ๋งˆํฌ์–ด๋Š” ๊ทธ ๊ฐ€์šฉํ•œ ์ž์›์˜ ๊ฐœ์ˆ˜๋กœ ์ดˆ๊ธฐํ™” ๋œ๋‹ค. ์ž์›์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ธ๋งˆํฌ์–ด๊ฐ€ ๊ฐ์†Œ, ๋ฐฉ์ถœํ•˜๋ฉด ์ฆ๊ฐ€ํ•œ๋‹ค.
      • ์ด์ง„ ์„ธ๋งˆํฌ์–ด(Binary Semaphores): Mutex๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. 0๊ณผ 1 ์‚ฌ์ด์˜ ๊ฐ’๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์˜ Critical Section ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
    • ๋‹จ์ 
      • Busy Wating: spin lock์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์„ธ๋งˆํฌ์–ด ์ดˆ๊ธฐ ๋ฒ„์ „์—์„œ Critical Section์— ์ง„์ž…ํ•ด์•ผ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์ง„์ž… ์ฝ”๋“œ๋ฅผ ๊ณ„์† ๋ฐ˜๋ณต ์‹คํ–‰ํ•ด์•ผ ํ•˜๋ฉฐ, CPU ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ, ์„ธ๋งˆํฌ์–ด์—์„œ ์ž„๊ณ„ ์˜์—ญ์— ์ง„์ž…์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์‹คํŒจํ•œ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด Block์‹œํ‚จ ๋’ค, ์ž„๊ณ„์˜์—ญ์— ์ž๋ฆฌ๊ฐ€ ๋‚  ๋•Œ ๋‹ค์‹œ ๊บ ์šฐ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ busy waiting์˜ ์‹œ๊ฐ„๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ๋“œ๋ฝ(Deadlock)

์„ธ๋งˆํฌ์–ด๊ฐ€ Ready Queue๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„์˜์—ญ์— ์ง„์ž…์„ ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๊ณ , ์ž„๊ณ„์˜์—ญ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์ง„์ž… ๋Œ€๊ธฐ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ๋งŒ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์„ ๋งํ•œ๋‹ค.