[CS] ์„ธ๋งˆํฌ์–ด(Semaphore) & ๋ฎคํ…์Šค(Mutex)

๐Ÿ”‘ ๊ณต์œ ์ž์›์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ์œ„ํ•œ ๋ฐฉ๋ฒ•์ธ ์ƒํ˜ธ๋ฐฐ์ œ(Mutual Exclusion)
- ์ƒํ˜ธ๋ฐฐ์ œ๋ž€ ?
: ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์„ ์ˆ˜ํ–‰ ์ค‘์ด๋ฉด ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค์€ ๊ทธ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ ๋ง‰์Œ
  → ์„ธ๋งˆํฌ์–ด์™€ ๋ฎคํ…์Šค๋Š” ์ด๋ฅผ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ๊ธฐ๋ฒ•

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

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์„ธ๋งˆํฌ์–ด(Semaphore)

  • ์„ธ๋งˆํฌ์–ด๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์— ์˜ํ•ด ๊ณต์œ ๋˜๋Š” ๋ณ€์ˆ˜๋กœ ์ •์˜
    → ์ด ๋ณ€์ˆ˜๋Š” ์˜ค์ง wait๊ณผ signal์ด๋ผ๋Š” ์—ฐ์‚ฐ์— ์˜ํ•ด์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ
    • wait : ์„ธ๋งˆํฌ์–ด์˜ ์ˆ˜๋ฅผ 1์ค„์ž„. 0์ด๋˜๋ฉด lock.
    • signal : ์„ธ๋งˆํฌ์–ด์˜ ์ˆ˜๋ฅผ 1 ๋Š˜๋ฆผ
  • ์„ธ๋งˆํฌ์–ด(๋ณ€์ˆ˜)์˜ ๊ฐฏ์ˆ˜์— ๋”ฐ๋ผ Counting Semaphore์™€ Binary Semaphore๋กœ ๋‚˜๋‰จ
    • Counting Semaphore : ์„ธ๋งˆํฌ์–ด๊ฐ€ ์–‘์˜ ์ •์ˆ˜๊ฐ’์„ ๊ฐ€์ง. ์„ค์ •ํ•œ ๊ฐ’ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์›์— ์ ‘๊ทผํ•˜๋ฉด lock์ด ์‹คํ–‰๋จ
    • Binary Semaphore : ์„ธ๋งˆํฌ์–ด๊ฐ€ 1์ž„. ๋ฎคํ…์Šค์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋จ


โ–ถ๏ธ ์„ธ๋งˆํฌ์–ด ๋ฐฉ์‹

  • Busy-Wait ๋ฐฉ์‹
    • ์ž์›์ด ๋ชจ๋‘ ์‚ฌ์šฉ์ค‘์ด๋ผ๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ waitํ•˜๋Š” ๋ฐฉ์‹.
    • ์ž์›์— ์—ฌ์œ ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ž์›์„ ํš๋“, ์ž์›์„ ๋ชจ๋‘ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ์ž์›์„ ๋ฐ˜๋‚ฉํ•จ.
    • ์ž์›์„ ๋‹ค ์‚ฌ์šฉํ•˜๊ณ  ์ž„๊ณ„ ์˜์—ญ์—์„œ ๋‚˜์˜จ ํ”„๋กœ์„ธ์Šค๋Š” signal ์—ฐ์‚ฐ์„ ํ•˜๊ธฐ ์ „๊นŒ์ง€ Busy Waiting์„ ํ•จ
      • Busy Waiting : ์ž„๊ณ„ ์˜์—ญ์— ์ง„์ž… ์‹œ๋„๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ
  • Block-Wakeup ๋ฐฉ์‹
    • ์ž์›์˜ ๊ฐ’์„ ๊ฐ์†Œ์‹œํ‚ด. ์ž์›์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค๋ฅผ wait ํ์— ์ถ”๊ฐ€์‹œํ‚จ ํ›„, block().
    • ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ•˜์—ฌ ์ž์›์„ ๋ฐ˜๋‚ฉํ–ˆ์„ ๋•Œ, ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž์›์˜ ์ˆ˜๊ฐ€ ์—†๋‹ค๋ฉด ํ˜„์žฌ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๋œป์ž„. ๋”ฐ๋ผ์„œ wait ํ์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊บผ๋‚ด์™€ wakeup์‹œํ‚ด

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ๋ฎคํ…์Šค(Mutex)

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์†Œ์œ ํ•  ์ˆ˜ ์žˆ๋Š” key๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ์ด key๋ฅผ ์†Œ์œ ํ•œ ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค๋งŒ์ด ๊ณต์œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž„๊ณ„ ์˜์—ญ์— ์ง„์ž…ํ•  ๋•Œ, lock์„ ๊ฑธ์–ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ํ˜น์€ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•จ
    • ์ž„๊ณ„์˜์—ญ์„ ๋‚˜์˜ค๋ฉด unlock์„ ๊ฒ€