Process Synchronization

Critical Section & Critical Section Problem

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

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

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

  • Process๋“ค์ด critical section์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” protocol์„ ์„ค๊ณ„ ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค

  • Requirements (ํ•ด๊ฒฐ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์กฐ๊ฑด)

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

      • Process p1์ด critical section์—์„œ ์‹คํ–‰์ค‘์ด๋ผ๋ฉด, ๋‹ค๋ฅธ process๋“ค์€ p1์ด ๊ฐ€์ง„ critical section์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์—†๋‹ค

    • Progress (์ง„ํ–‰)

      • Critical section์—์„œ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๊ณ , ๋ณ„๋„์˜ ๋™์ž‘์ด ์—†๋Š” ํ”„๋กœ์„ธ์Šค๋“ค๋งŒ critical section ์ง„์ž… ํ›„๋ณด๋กœ์„œ ์ฐธ์—ฌ๋  ์ˆ˜ ์žˆ๋‹ค

    • Bounded waiting (ํ•œ์ •๋œ ๋Œ€๊ธฐ)

      • p1์ด critical section์— ์ง„์ž… ์‹ ์ฒญ ํ›„ ๋ฐ›์•„๋“ค์—ฌ์งˆ ๋•Œ๊ฐ€์ง€, ๋‹ค๋ฅธ process๋“ค์ด critical section์— ์ง„์ž…ํ•˜๋Š” ํšŸ์ˆ˜๋Š” ์ œํ•œ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค

Solution

Mutex Lock

  • ๋™์‹œ์— ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด Critical Section์— ์ง„์ž…ํ•˜๋Š” process๋Š” lock์„ ํš๋“ํ•˜๊ณ , critical section์„ ๋น ์ ธ ๋‚˜์˜ฌ ๋•Œ, Lock์„ ๋ฐฉ์ถœํ•จ์œผ๋กœ์จ ๋™์‹œ์— ์ ‘๊ทผ์ด ๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค

  • ํ•œ๊ณ„

    • ๋‹ค์ค‘ ์ฒ˜๋ฆฌ๊ธฐ ํ™˜๊ฒฝ์—์„œ๋Š” ์‹œ๊ฐ„์ ์ธ ํšจ์œจ์„ฑ ์ธก๋ฉด์—์„œ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค

Semaphores

์†Œํ”„ํŠธ์›จ์–ด์ƒ์—์„œ ์ž„๊ณ„ ์˜์—ญ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋™๊ธฐํ™” ๋„๊ตฌ

  • ์„ค๋ช…

    • ๋ฉ€ํ‹ฐํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์—์„œ ๋‹ค์ˆ˜์˜ process ๋‚˜ thread ๊ฐ€ n ๊ฐœ์˜ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋™๊ธฐํ™” ๊ธฐ๋ฒ•

  • ์ข…๋ฅ˜

    • Counting Semaphore (์นด์šดํŒ… ์„ธ๋งˆํฌ)

      • ๊ฐ€์šฉํ•œ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ€์ง„ ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ œ์–ด์šฉ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์„ธ๋งˆํฌ๋Š” ๊ทธ ๊ฐ€์šฉํ•œ ์ž์›์˜ ๊ฐœ์ˆ˜๋กœ ์ดˆ๊ธฐํ™” ๋œ๋‹ค

      • ์ž์›์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ธ๋งˆํฌ๊ฐ€ ๊ฐ์†Œ, ๋ฐฉ์ถœํ•˜๋ฉด ์„ธ๋งˆํฌ๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค

    • Binary Semaphore (์ด์ง„ ์„ธ๋งˆํฌ)

      • MUTEX ๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋ฉฐ, ์ƒํ˜ธ๋ฐฐ์ œ ( Mutal Exclusion)์˜ ๋จธ๋ฆฟ๊ธ€์ž๋ฅผ ๋”ฐ์„œ ๋งŒ๋“ค์—ˆ๋‹ค

      • ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ 0๊ณผ 1 ์‚ฌ์ด์˜ ๊ฐ’๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋‹ค์ค‘ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์˜ Critical Section ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค

  • ๋‹จ์ 

    • Busy waiting (๋ฐ”์œ ๋Œ€๊ธฐ)

      • Spin lock ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” Semaphore ์ดˆ๊ธฐ ๋ฒ„์ „์—์„œ Critical Section์— ์ง„์ž…ํ•ด์•ผํ•˜๋Š” process ๋Š” ์ง„์ž… ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณต ์‹คํ–‰ํ•ด์•ผํ•˜๋ฉฐ, CPU ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ–ˆ์—ˆ๋‹ค

        • ์ด๋ฅผ Busy Waiting์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ํŠน์ˆ˜ํ•œ ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ฉด ๋น„ํšจ์œจ์ ์ด๋‹ค.

      • ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” Semaphore์—์„œ Critical Section์— ์ง„์ž…์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์‹คํŒจํ•œ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด Block์‹œํ‚จ ๋’ค, Critical Section์— ์ž๋ฆฌ๊ฐ€ ๋‚  ๋•Œ ๋‹ค์‹œ ๊นจ์šฐ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

        • ์ด ๊ฒฝ์šฐ Busy waiting์œผ๋กœ ์ธํ•œ ์‹œ๊ฐ„๋‚ญ๋น„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค.

    • Deadlock (๊ต์ฐฉ ์ƒํƒœ)

      • Semaphore๊ฐ€ Ready Queue๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ ,

      • ๋‘˜ ์ด์ƒ์˜ process๊ฐ€ critical section ์ง„์ž…์„ ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๊ณ ,

      • critical section์—์„œ ์‹คํ–‰๋˜๋Š” process๋Š” ์ง„์ž… ๋Œ€๊ธฐ ์ค‘์ธ process๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ๋งŒ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์„ ์ง€์นญ

๋ชจ๋‹ˆํ„ฐ

  • ๊ณ ๊ธ‰ ์–ธ์–ด์˜ ์„ค๊ณ„ ๊ตฌ์กฐ๋ฌผ๋กœ์„œ, ๊ฐœ๋ฐœ์ž์˜ ์ฝ”๋“œ๋ฅผ ์ƒํ˜ธ๋ฐฐ์ œ ํ•˜๊ฒŒ๋” ๋งŒ๋“  ์ถ”์ƒํ™”๋œ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ

  • ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค ํš๋“๊ณผ, ์ž์› ์‚ฌ์šฉํ›„ ํ•ด์ œ๋ฅผ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•œ๋‹ค

    • Semaphore๋Š” ์ง์ ‘ ํ‚ค ํ•ด์ œ์™€ ๊ณต์œ ์ž์› ์ ‘๊ทผ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค!

Last updated