๐Ÿ“Œ Process Synchronization 3

๋ชจ๊น…ยท2023๋…„ 5์›” 12์ผ
0

๐Ÿ“– 01. Classical Problems of Synchronization

๐Ÿ“– 02. Bounded-Buffer Problem

  • Buffer : ์ž„์‹œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„

  • Bounded-Buffer : ๋ฒ„ํผ์˜ ํฌ๊ธฐ๊ฐ€ ์œ ํ•œํ•˜๋‹ค
    -> sircular ํ˜•ํƒœ (์ƒ์‚ฐ์ž ์†Œ๋น„์ž ๋ฌธ์ œ)

  • Producer : ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ง‘์–ด๋„ฃ๋Š” ์—ญํ• 

  • ์ƒ์‚ฐ์ž 2๊ฐœ๊ฐ€ ๋น„์–ด์žˆ๋Š” ๋ฒ„ํผ์— ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ๋•Œ synchronization๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • ์†Œ๋น„์ž๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ™์ด ๊บผ๋‚ด๊ฐ€๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.
    -> ๋ฒ„ํผ์— ๋ฝ์„ ๊ฑธ์–ด์„œ ๊บผ๋‚ด๊ฐ€๊ณ  ๋ฝ์„ ํ‘ธ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

  • Bounded-Buffer์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์ :
    -> ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฝ‰ ์ฐฌ ์ƒํƒœ์—์„œ ์ƒ์‚ฐ์ž๊ฐ€ ๋„์ฐฉํ•˜๋Š” ๊ฒฝ์šฐ
    -> ์ƒ์‚ฐ์ž๋Š” ๋น„์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฉฐ 0๊ฐœ์ผ ๊ฒฝ์šฐ ๋Œ€๊ธฐํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ๋œ๋‹ค.
    -> ์†Œ๋น„์ž๊ฐ€ ๋นผ๊ฐ€์•ผ๋งŒ ํ•œ๋‹ค.

  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์–ด์žˆ๋Š” ์ƒํƒœ์—์„œ ์†Œ๋น„์ž๊ฐ€ ๋„์ฐฉํ•˜๋Š”๊ฒฝ์šฐ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•œ๋‹ค.
    -> ์†Œ๋น„์ž ์ž…์žฅ์—์„œ๋Š” ์ž์›์ด ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ์ด๋‹ค.
    -> ์ƒ์‚ฐ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ์ค„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.

  • semaphores ๋ณ€์ˆ˜๊ฐ€ 2๊ฐœ ํ•„์š”ํ•˜๋‹ค.

  1. lock์„ ์œ„ํ•œ ๋ณ€์ˆ˜
  2. ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜
  • shared data์— ์ ‘๊ทผํ•˜๋ ค๋ฉด lock์„ ๊ฑธ๊ณ  ํ‘ธ๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.
    -> semaphores๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด lock์„ ๊ฑธ๊ณ  ํ’€ ์ˆ˜ ์žˆ๋‹ค.

  • ์ž์›์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŒ…ํ•˜๋Š” ๋ณ€์ˆ˜๋กœ semaphores๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  • <Semaphore ๋ณ€์ˆ˜์˜ ์ด์šฉ์„ ์ˆ˜๋„์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋ƒ„>

  • lock์„ ๊ฑธ๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ : mutex = 1

  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ธฐ์œ„ํ•œ ๋ณ€์ˆ˜ : full

  • ๋น„์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„ธ๊ธฐ์œ„ํ•œ ๋ณ€์ˆ˜ : empty

  • ์ƒ์‚ฐ์ž ์ˆœ์„œ

  1. ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ ๋‹ค
  2. ๋นˆ ๊ณต๊ฐ„์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
    -> ๋นˆ buffer์„ ํš๋“ํ•˜๋Š” ๊ณผ์ •
  3. P์—ฐ์‚ฐ์„ ํ†ตํ•ด lock์„ ๊ฑด๋‹ค.
  4. ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š”๋‹ค.
  5. V์—ฐ์‚ฐ์„ ํ†ตํ•ด lock์„ ํ‘ผ๋‹ค.
  6. V(full) : ๋‹ด๊ฒจ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ
  • ์†Œ๋น„์ž๋Š” ์ƒ์‚ฐ์ž์˜ ๋ฐ˜๋Œ€์ด๋‹ค.
  1. ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ๋Š” buffer๋ฅผ ํ•˜๋‚˜ ํš๋“ํ•œ๋‹ค.
  2. buffer ์ „์ฒด์— lock์„ ๊ฑด๋‹ค.
  3. ๊ณต์œ  buffer์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜ ๊บผ๋‚ด๊ฐ„๋‹ค.
  4. ๋ฒ„ํผ์กฐ์ž‘์ด ๋๋‚˜๋ฉด lock์„ ํ‘ผ๋‹ค.
  5. ๋น„์–ด์žˆ๋Š” ๋ฒ„ํผ์˜ ๊ฐœ์ˆ˜๋ฅผ ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  6. V(empty) : Producer์—์„œ P(empty)๋กœ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  buffer์„ ํš๋“ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์ž.
  • ์ƒ์‚ฐ์ž ์†Œ๋น„์ž ๋ฌธ์ œ๋ฅผ semaphores๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๐Ÿ“– 03. Readers-Writers Problem

  • 2๊ฐ€์ง€์˜ process๊ฐ€ ์กด์žฌํ•œ๋‹ค. 1๊ฐœ์”ฉ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ๊ฐœ์˜ reader์™€ Writer๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • ๊ณต์œ  ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ DB๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

  • ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ?
    -> ๊ณต์œ ๋ฐ์ดํ„ฐ์ธ DB๋ฅผ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
    -> lock์„ ๊ฑธ์–ด์„œ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค.
    -> ์“ฐ๋Š” ์ž‘์—…์€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ์ง€๋งŒ ์ฝ๋Š” ๊ฒƒ์€ synchoronization๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • Readers-Writers Problem์—์„œ ํ’€์–ด์•ผ ํ•  ๋ฌธ์ œ
    -> ์“ธ ๋•Œ๋Š” lock์„ ๊ฑธ์–ด์•ผ ํ•˜์ง€๋งŒ ์ฝ์„ ๋•Œ๋Š” lock์„ ํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค.
    -> ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ฝ๊ณ  ์žˆ์„ ๋•Œ Reader๊ฐ€ ๋„์ฐฉํ•˜๋ฉด '๋„ˆ๋„ ์ฝ์–ด๋ผ' ํ—ˆ์šฉํ•ด์ฃผ์–ด์•ผ ํ•˜๊ณ  ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ฝ๊ณ  ์žˆ๋Š”๋ฐ Writer๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ๋Œ€๊ธฐ ํ•ด์•ผํ•œ๋‹ค.
    -> Writer๋Š” ์•„๋ฌด๋„ ์—†์„ ๋•Œ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

< Writer >

  • semaphores P(db)์—ฐ์‚ฐ์„ ํ†ตํ•ด lock์„ ๊ฑธ์–ด์•ผ ํ•œ๋‹ค.
    -> ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ์ผ ๊ฒƒ์ด๋‹ค.

  • Reader๋„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด Writer์˜ ์ฝ”๋“œ์™€ ๋˜‘๊ฐ™์ด ์งœ๋ฉด๋œ๋‹ค.
    -> ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋น„ํšจ์œจ์ ์ด๋‹ค. (์ฝ๋Š” ์ž‘์—…์€ ๋™์‹œ์— ํ•ด๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)
    -> ์ฝ์„ ๋•Œ๋„ lock์„ ๊ฑธ๊ธด ํ•ด์•ผํ•œ๋‹ค. (Writer๊ฐ€ ๋„์ฐฉํ–ˆ์„ ๋•Œ ๋“ค์–ด์˜ฌ ์ˆ˜ ์—†๊ฒŒ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)
    -> ์ฝ๋Š” ์ž‘์—…์€ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.

< Reader >

  • readcount : ๊ณต์œ ๋ฐ์ดํ„ฐ (Reader๊ฐ€ ์ง€๊ธˆ ๋ช‡๋ช…์ด ์ฝ๊ณ  ์žˆ๋Š”์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜)
    -> ๋ชจ๋“  reader๋“ค์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜

  • if(readcount == 1) : ๋‚ด๊ฐ€ ์ฒ˜์Œ ๋“ค์–ด์™”๋‹ค๋ฉด db์—๋‹ค๊ฐ€ lock์„ ๊ฑด๋‹ค
    -> reader๊ฐ€ ๋” ๋“ค์–ด์™”๋‹ค๋ฉด readcount๊ฐ€ 1๋ณด๋‹ค ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์— lock์„ ๊ฑธ ํ•„์š”๊ฐ€ ์—†๋‹ค.

  • readcount๋ฅผ ๋ง‰ ์ฆ๊ฐ€์‹œํ‚ค๋‹ค๋ณด๋ฉด ๋‘๊ฐœ ์ฆ๊ฐ€์‹œ์ผฐ๋Š”๋ฐ๋„ ํ•˜๋‚˜๋งŒ ์ฆ๊ฐ€๋  ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ๊ฒƒ์ด๋‹ค.
    -> ์ด ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋„ lock์„ ๊ฑธ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
    -> ์ด ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ lock์‹œํ‚ค๋Š” ๋ณ€์ˆ˜๊ฐ€ mutex semaphores ๋ณ€์ˆ˜์ด๋‹ค.

  • readcount--;, if (readcount == 0) : readcount๋ฅผ ๊ฐ์†Œ์‹œ์ผฐ๋Š”๋ฐ ๋งŒ์•ฝ ๋‚ด๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด๋ผ๋ฉด db์˜ lock์„ ํ’€์–ด์ค˜์•ผ ํ•œ๋‹ค.
    -> ์—ฌ๊ธฐ์„œ๋„ readcount๋ผ๋Š” ๊ณต์œ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— lock์„ ๊ฑธ๊ณ  ํ‘ธ๋Š” ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  • Reader์˜ ๋งˆ์ง€๋ง‰์ด ๋น ์ ธ๋‚˜๊ฐ€์•ผ๋งŒ Writer๋Š” ์ž‘์—…์„ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    -> ๊ทธ๋Ÿฌ๋‚˜ Reader๊ฐ€ ๊ณ„์† ๋„์ฐฉํ•˜๊ฒŒ ๋˜๋ฉด Writer๋Š” ์ผ์„ ํ•˜์ง€ ๋ชปํ•˜๊ณ  starvation์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Writer๋‚˜ Reader๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด Writer๋’ค์— ์˜ค๋Š” Reader๋“ค์€ ๊ฐ™์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธด๋‹ค.
    -> Queue ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‘๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ“– 04. Dining-Philosophers Problem

  • ์ƒ๊ฐํ•˜๊ฑฐ๋‚˜ ๋ฐฅ๋จน๊ฑฐ๋‚˜ ๋‘๊ฐ€์ง€์˜ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    -> ๋ฐฐ๊ณ ํŒŒ์ง€๋งŒ ์ž์‹ ์˜ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์ “๊ฐ€๋ฝ์ด๋ฅด ์ง‘์–ด์„œ ๋ฐฅ์„ ๋จน๋Š”๋‹ค.
    -> ๋ฐฐ๊ฐ€ ๋ถ€๋ฅด๋ฉด ์ “๊ฐ€๋ฝ์„ ๋†“๊ณ  ๋ฐฅ์„ ๋จน๋Š”๋‹ค.
    -> ์ด๋Ÿฐ์ผ์„ ๋ฌดํ•œ ๋ฐ˜๋ณตํ•œ๋‹ค.

  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ solution์€ Deadlock ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    -> ๋”์ด์ƒ ์•„๋ฌด๊ฒƒ๋„ ๋ชปํ•˜๊ณ  ๋ง‰ํ˜€์žˆ๋Š” ์ƒํ™ฉ

  • ์ “๊ฐ€๋ฝ์„ ๋‘ ๊ฐœ ๋ชจ๋‘ ์ง‘์„ ์ˆ˜ ์žˆ์„ ๋•Œ์—๋งŒ ์ “๊ฐ€๋ฝ์„ ์ง‘์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค๋Š” ์ฝ”๋“œ


-> ์ด ์ฝ”๋“œ๊ฐ€ semaphores์— ์ž˜ ๋งž์ถฐ์ง„ ์ฝ”๋“œ๋Š” ์•„๋‹ˆ๋‹ค.
-> ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€๋งŒ ํŒŒ์•…ํ•˜์ž.

  • ๋จน๊ฑฐ๋‚˜ ์ƒ๊ฐํ•˜๊ฑฐ๋‚˜ ๋‘ ๊ฐ€์ง€ ์ผ์„ ํ•œ๋‹ค.

  • ์ “๊ฐ€๋ฝ์„ ๋“ค๊ฑฐ๋‚˜ ๋‚ด๋ ค๋†“๋Š” ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • semaphore self[5] = 0 : ์ “๊ฐ€๋ฝ์„ ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ
    -> ex) semaphore self[1] = 0 : 1๋ฒˆ ์ฒ ํ•™์ž๋Š” ์ “๊ฐ€๋ฝ์„ ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์—†๋‹ค.
    -> semaphore self[3] = 1 : 3๋ฒˆ ์ฒ ํ•™์ž๋Š” ์ “๊ฐ€๋ฝ ๋‘๊ฐœ๋ฅผ ๋ชจ๋‘ ์ง‘์„ ๊ถŒํ•œ์ด ์žˆ๋‹ค.

  • enum{thinking, hungry, eating} state[5] : ์ฒ ํ•™์ž์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ณต์œ  ๋ณ€์ˆ˜

< pickup(int i) >

  • state ๊ณต์œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— P(mutex)๋กœ lock์„ ๊ฑด๋‹ค.
    -> state[i] = hungry : ๋ณธ์ธ์˜ ์ƒํƒœ๋ฅผ hungry๋กœ ๋ฐ”๊พธ์–ด ๋†“๊ณ 
    -> test[i] : ์ฒ ํ•™์ži๊ฐ€ ์ “๊ฐ€๋ฝ์„ ๋ชจ๋‘ ๋“ค์„ ์ˆ˜์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

< test (int i) >

  • ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์ฒ ํ•™์ž๊ฐ€ ๋ฐฅ์„ ๋จน๊ณ  ์žˆ์ง€ ์•Š๊ณ  ๊ทธ๋ฆฌ๊ณ  ๋ณธ์ธ์ด ๋ฐฐ๊ณ ํ”„๋ฉด i์ฒ ํ•™์ž์˜ ์ƒํƒœ๋ฅผ eating์„ ๋งŒ๋“ค๊ณ 
    -> V(self[i]) : ์ “๊ฐ€๋ฝ์„ ์žก์„ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์ค€๋‹ค.

  • ์›๋ž˜ semaphore๋ณ€์ˆ˜๋Š” ์ž์›์˜ ๊ฐœ์ˆ˜๋ฅผ ์ดˆ๊นƒ๊ฐ’์œผ๋กœ ํ•˜๊ณ  ์ž์›์˜ ๊ฐœ์ˆ˜๊ฐ€ 1์ด๊ฑฐ๋‚˜ 1์ด์ƒ์ธ๊ฐ’์„ ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
    -> ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ฝ”๋“œ์—์„œ ์ด์ƒํ•œ ์ ์€ semaphore ๋ณ€์ˆ˜ self[]๋Š” 0์„ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ํ•˜๊ณ  testํ•˜๋Š” ๊ณผ์ •์—์„œ ์ฃผ๋ณ€ ์ฒ ํ•™์ž๋“ค์ด ๋ฐฅ์„ ๋จน์ง€ ์•Š๊ณ  ๋‚ด๊ฐ€ ๋ฐฐ๊ณ ํ”„๋ฉด ์ “๊ฐ€๋ฝ์„ ์ง‘์„ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์ค€๋‹ค.
    -> V์—ฐ์‚ฐ์€ semaphore๋ณ€์ˆ˜๋ฅผ 1๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

< pickup(int i) >

  • V(mutex) ์—ฐ์‚ฐ์„ ํ†ตํ•ด lock์„ ํ’€๊ณ 
    -> P(self[i])์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋ณ€์ˆ˜๋ฅผ 0์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

  • ๋งŒ์•ฝ test์—ฐ์‚ฐ์—์„œ ์ขŒ,์šฐ์—์„œ ๋จน๊ณ ์žˆ๋‹ค๋ฉด if๋ฌธ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•œ๋‹ค.
    -> ์ “๊ฐ€๋ฝ์„ ์ง‘์„ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์—†๋Š”์ฑ„๋กœ(self ๊ฐ’์ด ์Œ์ˆ˜๊ฐ€ ๋˜๊ณ  blocked์ƒํƒœ๊ฐ€ ๋œ๋‹ค.) pickup์€ ๋๋‚˜๊ฒŒ ๋œ๋‹ค.
    -> ์ธ์ ‘ํ•œ ์ฒ ํ•™์ž๊ฐ€ ์‹์‚ฌ๊ฐ€ ๋๋‚˜๋ฉด ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ฒ ํ•™์ž์˜ ๋ณ€์ˆ˜๊ฐ’์„ ๋ณ€ํ™”์‹œ์ผœ ์ “๊ฐ€๋ฝ์„ ์žก์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค.

< putdown(int i) >

  • state[i] = thinking : ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๊ณ 

  • test : ์ขŒ์šฐ์˜ ์žˆ๋Š” ์ฒ ํ•™์ž๊ฐ€ ์ “๊ฐ€๋ฝ์„ ์ง‘์„ ์ˆ˜ ์žˆ๋„๋ก testํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

  • ์ดํ›„์— Monitor๋ผ๋Š” ๊ฒƒ์„ ๋ฐฐ์šฐ๋Š”๋ฐ ์ด ์—ญ์‹œ ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ž…์žฅ์—์„œ synchoronization๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

  • semaphores๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‹ค์ˆ˜ํ•˜๊ฒŒ ๋˜๋ฉด ํฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.
    -> Monitor๋ผ๋Š” ๊ฒƒ์„ ์ œ๊ณตํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ํŽธํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

๐Ÿ“– 05. Monitor

  • semaphore๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธํ•œํ…Œ P,V์—ฐ์‚ฐ์„ ํ†ตํ•ด์„œ ๋น„๊ต์  ์‰ฝ๊ฒŒ ์ฝ”๋”ฉ์„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ๋ฒ„๊ทธ๋ฅผ ์žก๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค.
    -> ex) critical section์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— P์—ฐ์‚ฐ์„ ํ•˜๊ณ  ๋น ์ ธ๋‚˜์˜ฌ ๋•Œ V์—ฐ์‚ฐ์„ ํ•ด์•ผํ•˜๋Š”๋ฐ ์‹ค์ˆ˜๋กœ ๋ฐ˜๋Œ€๋กœ ํ•œ๋‹ค๋ฉด critical section์— ๋™์‹œ์— ๋“ค์–ด๊ฐ€๋Š” Mutual exclusion์ด ๊นจ์ง€๊ฒŒ ๋œ๋‹ค.
    -> ex) P์—ฐ์‚ฐ์„ ๋‘๋ฒˆํ•˜๋ฉด ์–ด๋Š ๋ˆ„๊ตฌ๋„ ๋”์ด์ƒ critical section์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋‹ค.(Deadlock)

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž˜๋ชป ์งœ๊ฒŒ๋˜๋ฉด ์–ด๋””์„œ ํ‹€๋ ธ๋Š”์ง€ ์ž…์ฆ์ด ์–ด๋ ต๋‹ค.
    -> ๊ทธ๋ž˜์„œ synchoronization์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ๊ฒƒ์ด Monitor!

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ฐจ์›์—์„œ synchonization๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” high-level synchronization construct๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ณด๋ฉด ๊ฐ์ฒด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์˜คํผ๋ ˆ์ด์…˜๋“ค์ด ์ •์˜๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • Monitor๋Š” ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด monitor๋ผ๊ณ  ์ •์˜๋œ ๋‚ด๋ถ€์˜ ํ”„๋กœ์‹œ์ €๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ณต์œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐ–์—์„œ ์•„๋ฌด๋‚˜ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ monitor์•ˆ์—์„œ ๊ณต์œ ๋ฐ์ดํ„ฐ์™€ ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ํ”„๋กœ์‹œ์ €๋ฅผ ์ •์˜ํ•ด๋†“๊ณ  ๋งŒ์•ฝ์— ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๊ฒ ๋‹ค ํ•˜๋ฉด ํ”„๋กœ์‹œ์ €๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

  • ์›์ฒœ์ ์œผ๋กœ monitor๋‚ด๋ถ€์— ์žˆ๋Š” ํ”„๋กœ์‹œ์ €๋Š” ๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์‹คํ–‰์ด ์•ˆ๋˜๋„๋ก ํ†ต์ œ๋ฅผ ํ•˜๋Š” ๊ถŒํ•œ์„ ์ค€๋‹ค.
    -> lock์„ ๊ฑธ ํ•„์š”์—†์ด ๊ทธ๋ƒฅ ์ ‘๊ทผํ•˜๋ฉด ๋œ๋‹ค.
    -> ๋‚˜๋จธ์ง€ process๋Š” ์ค„์„ ์„ ๋‹ค.

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ž…์žฅ์—์„  ๋ญ๊ฐ€ ํŽธํ•˜๋ƒ?
    -> lock์„ ๊ฑธ ํ•„์š”๊ฐ€ ์—†๋‹ค.
    -> semaphore๋Š” ์—ฐ์‚ฐ(P,V)์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ ์–ด์ค˜์•ผ ํ•œ๋‹ค. (lock์„ ๊ฑธ์–ด์ฃผ๊ณ  ํ’€์–ด์ฃผ๊ณ )

  • Monitor๋Š” ๋‚ด๋ถ€์— ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์–ธํ•ด๋†“๊ณ  ์ด ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์‹œ์ €๋“ค์€ Monitor ๋‚ด๋ถ€ ํ•จ์ˆ˜๋กœ ์ •์˜ํ•ด๋†“๋Š”๋‹ค.

  • semaphore์—์„œ ์ž์›์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๊ฒƒ์ด ํ•„์š”ํ–ˆ๋‹ค.
    -> Monitor์—์„œ lock์„ ๊ฑธ ํ•„์š”๋Š” ์—†์ง€๋งŒ ์ž์›์ด ์žˆ์œผ๋ฉด ์ ‘๊ทผ ํ•˜๊ณ  ์—†์œผ๋ฉด ์ ‘๊ทผ ํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ํ•„์š”ํ•˜๋‹ค.

  • semaphore์™€ ๋น„์Šทํ•˜๊ฒŒ ์ž์›์˜ ๊ฐœ์ˆ˜๋ฅผ ์œ ์ง€ํ•ด์ฃผ๋Š” ๋ณ€์ˆ˜๊ฐ€ Monitor ์กด์žฌํ•œ๋‹ค.
    -> 'condition' ์ด๋ผ๋Š” ๋ณ€์ˆ˜!

  • condition์˜ ์—ฌ๋ถ„์ด ์—†์–ด์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค„์—์„œ ๊ธฐ๋‹ค๋ฆฌ๋„๋ก ํ•˜์ž. (wait())

  • ๋น ์ ธ๋‚˜๊ฐˆ ๋•Œ๋Š” signal์„ ํ†ตํ•ด ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” process๊ฐ€ ์žˆ์œผ๋ฉด ๋น ์ ธ ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

  • ์ƒ์‚ฐ์ž ์†Œ๋น„์ž ๋ฌธ์ œ (Monitor.ver)

  • ๊ณต์œ  buffer๊ฐ€ ๋‚ด๋ถ€์— ์ •์˜๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์‚ฐํ•˜๊ฑฐ๋‚˜ ์†Œ๋น„ํ•˜๋Š” ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„  Monitor๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๊ณ  ์ƒ์‚ฐ์ž๋“  ์†Œ๋น„์ž๋“  ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ๋ชจ๋‹ˆํ„ฐ์•ˆ์—์„œ๋งŒ ํ™œ์„ฑํ™” ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ๋ฝ์„ ํ•˜์ง€ ์•Š์•„๋„ ์ƒ์‚ฐ์ž๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๋™์•ˆ์— ๋˜๋‹ค๋ฅธ ์ƒ์‚ฐ์ž๊ฐ€ ์ ‘๊ทผํ•˜์—ฌ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” ๊ณ ๋ คํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

  • ์ƒ์‚ฐ์ž ์ž…์žฅ์—์„œ๋Š” ๋น„์–ด์žˆ๋Š” buffer๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋งŒ์•ฝ์— ๋น„์–ด์žˆ๋Š” ๋ฒ„ํผ๊ฐ€์—†๋‹ค๋ฉด ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค„์— ์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•˜๊ณ  ๋น„์–ด์žˆ๋Š” ๋ฒ„ํผ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ์ž. ๋์ด๋‚˜๋ฉด ํ˜น์‹œ ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ๋Š” ๋ฒ„ํผ๊ฐ€ ์—†์–ด์„œ ์ž ๋“ค์–ด ์žˆ๋Š” ์†Œ๋น„์ž ํ”„๋กœ์„ธ์Šค๋ฅผ ๊บ ์›Œ์ฃผ๋Š” ์ฝ”๋“œ์ด๋‹ค.

  • ์†Œ๋น„์ž ์ž…์žฅ์—์„œ๋Š” ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ๋Š” ๋ฒ„ํผ๊ฐ€ ์—†๋‹ค๋ฉด ๊ธฐ๋‹ค๋ฆฌ์ž.
    -> ๋ฒ„ํผ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊บผ๋‚ด๊ฐ€์ž
    -> ๋น„์–ด์žˆ๋Š” ๋ฒ„ํผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒ์‚ฐ์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๊นจ์›Œ์ฃผ์ž.

  • Monitor์•ˆ์—์„œ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ํ™œ์„ฑํ™” ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋จธ์ง€ ํ”„๋กœ์„ธ์Šค๋Š” ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค.

  • Monitor ์•ˆ์—์„œ ๊ณต์œ ์ž์›์˜ ๊ฐœ์ˆ˜๊ฐ€ ์—†์–ด์„œ ๊ธฐ๋‹ค๋ ค์•ผ ๋œ๋‹ค๋ฉด x(๋น„์–ด์žˆ๋Š” ๋ฒ„ํผ๊ฐ€ ํ•„์š”),y(๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋ฒ„ํผ ํ•„์š”)์—์„œ ๊ฐ๊ฐ ๊ธฐ๋‹ค๋ฆฌ์ž.
    -> ์ค„์„œ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊บ ์›Œ์ฃผ๋Š” ๊ฒƒ์ด signal์—ฐ์‚ฐ์ด๋‹ค.





[์ถœ์ฒ˜] ๋ฐ˜ํšจ๊ฒฝ ๊ต์ˆ˜๋‹˜ ๊ฐ•์˜

profile
๋ฉˆ์ถ”์ง€ ์•Š๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€