๐Ÿ“Œ Process Synchronization 4

๋ชจ๊น…ยท2023๋…„ 5์›” 14์ผ
0
  • Process Synchronization = Concurrency Control
    -> ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ ์„ ์˜๋ฏธํ•จ.
    -> ๋™์‹œ ์‹คํ–‰๋  ๋•Œ ์ œ์–ดํ•˜์—ฌ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ.

  • synchronization์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์•ˆ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๊ด€์ ์—์„œ ์–ด๋–ป๊ฒŒํ•˜๋ฉด Concurrency Control์„ ์ž˜ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€
    -> ๊ทธ๋Ÿฐ๊ฑธ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ semaphore์„ ๋ฐฐ์› ๋‹ค.

  • Semaphore์€ P์—ฐ์‚ฐ๊ณผ V์—ฐ์‚ฐ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ์ถ”์ƒ์ž๋ฃŒํ˜•์ด๋‹ค.
    -> P์—ฐ์‚ฐ : ์ž๋ฃŒ๋ฅผ ํš๋“ํ•˜๋Š” ์—ฐ์‚ฐ
    -> V์—ฐ์‚ฐ : ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๋Š” ์—ฐ์‚ฐ

  • s = 1์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ ๋งŽ์€ P์—ฐ์‚ฐ์„ ํ•˜๋”๋ผ๋„ ํ•˜๋‚˜๋งŒ critical section์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‚˜๋จธ์ง€๋Š ๋ชจ๋‘ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

  • Process synchronization์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Monitor๋ผ๋Š” ๊ฒƒ์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.
    -> semaphore๊ฐ€ P,V์—ฐ์‚ฐ์„ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”๋ฅผ ์‹œํ–‰ํ•˜์ง€๋งŒ ๋™๊ธฐํ™” ํ•˜๋Š” ๋ฒ•์„ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๊ทธ๊ฒƒ์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•œ๋‹ค.
    -> ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‹ค์ˆ˜๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ๋™๊ธฐํ™”๊ฐ€ ๊นจ์–ด์ ธ์„œ ์น˜๋ช…์ ์ธ ๊ฒฐ๊ณผ๊ฐ€ ์ดˆ๋ž˜๋  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐ˜๋ฉด์— Monitor๋ผ๋Š” ๊ฒƒ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ฐจ์›์—์„œ ๋™์‹œ์ ‘๊ทผ๊ณผ ๊ด€๋ จ๋œ ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ๋ฌธ์ œ๋ฅผ Monitor๊ฐ€ ์ž๋™์ ์œผ๋กœ ํ•ด๊ฒฐํ•ด์คŒ์œผ๋กœ์จ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๋ถ€๋‹ด์„ ์ค„์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

  • ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผ ํ•  ๋•Œ๋Š” ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•  ๊ฒƒ์ด๊ณ  ๊ทธ ์ฝ”๋“œ๋ฅผ Monitor์•ˆ์—๋‹ค๊ฐ€ ๊ณต์œ ๋ฐ์ดํ„ฐ์™€ ์ ‘๊ทผ ์ฝ”๋“œ๋ฅผ ์ •์˜ํ•ด์„œ ๋งŒ์•ฝ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ด Monitor์•ˆ์— ์ •์˜๋œ ๊ทธ๋Ÿฌํ•œ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ๋งŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ๋†“๊ณ  ๊ณต์œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ฝ”๋“œ๋“ค์ด ๋™์‹œ์— ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋ฉด ์ฆ‰, ํ”„๋กœ์„ธ์Šค A๊ฐ€ ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋‹ค๊ฐ€ CPU๋ฅผ ์žƒ๊ณ  ํ”„๋กœ์„ธ์Šค B๊ฐ€ ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ธ๋ฐ Monitor๊ฐ€ ์ด๋ฅผ ์›์ฒœ์ ์œผ๋กœ ๋ง‰๊ณ ์žˆ๋‹ค.

  • Monitor๋ผ๋Š” ๊ฒƒ์€ Activeํ•œ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋งŒ์ด Monitor์•ˆ์— ์žˆ๋Š” ์ฝ”๋“œ๋งŒ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ Monitor์•ˆ์— ๋“ค์–ด์™€์„œ Activeํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜ ๋ฐ–์— ์—†๋„๋ก Monitor์ž์ฒด๊ฐ€ ์ œ์–ด๋ฅผ ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ Aํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋†“๊ณ  B๋ผ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋†“๋”๋ผ๋„ ๊ตณ์ด ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— lock์„ ๊ฑธ๊ณ  ๋น ์ ธ๋‚˜์˜ฌ ๋•Œ lock์„ ํ’€๊ณ  ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
    -> Monitor๊ฐ€ ์•Œ์•„์„œ ์ œ์–ด๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ์„ธ์Šค๊ฐ€ monitor์•ˆ์— ์™€์„œ ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•œ๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด ์ ‘๊ทผํ•˜๋Š” ๋„์ค‘์— CPU๋ฅผ ๋นผ์•—๊ฒจ์„œ ๋˜๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ Monitor๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ์— ๋“ค์–ด์˜ค๋ ค๊ณ  ํ•œ๋‹ค๊ทธ๋Ÿฌ๋ฉด CPU๋ฅผ ๋นผ์•—๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ด monitor ์ ‘๊ทผ ์ฝ”๋“œ, ์ฆ‰ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋„์ค‘์— CPU๋ฅผ ๋นผ์•—๊ฒผ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ๊ทธ ํ”„๋กœ์„ธ์Šค๋Š” Activeํ•œ ์ƒํƒœ๋กœ Monitor์•ˆ์— ๋‚จ์•„์žˆ๋‹ค.
    -> ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ monitor์•ˆ์— ์žˆ๋Š ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ณ  monitor ๋ฐ–์— queue์— ์ค„์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ์ค„์„œ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์–ธ์ œ Monitor๋‚ด๋ถ€์— ๋“ค์–ด์™€์„œ ๊ณต์œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š๋ƒ ํ•˜๋ฉด ์•ˆ์— Activeํ•œ ํ”„๋กœ์„ธ์Šค ์ˆ˜๊ฐ€ 0์ด ๋  ๋•Œ
    -> ์ง€๊ธˆ monitor๋ฅผ ์“ฐ๊ณ  ์žˆ๋˜ ๊ทธ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์–ป์–ด์„œ ๋‹ค ์“ฐ๊ณ  ๋‚˜๊ฐ€๋˜์ง€ ๋˜๋Š” ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ด ๋‚ด๋ถ€์—์„œ ๋ฌด์–ธ๊ฐ€ ์ถฉ์กฑ์ด ๋˜์ง€ ์•Š์•„์„œ ์ž ๋“ค ์ˆ˜ ์žˆ๋‹ค.
    -> ์ฆ‰, ์•ˆ์— ๋“ค์–ด์žˆ๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ Activeํ•˜์ง€ ์•Š์€ ์ƒํƒœ(๋น ์ ธ๋‚˜๊ฐ€๋˜์ง€, ์ž ๋“ค๋˜์ง€)๊ฐ€ ๋˜๋ฉด ๋ฐ–์—์„œ ๊ธฐ๋‹ค๋ฆฌ๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด์™€์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
    -> ์›์น™์ ์œผ๋กœ monitor์—์„  lock์„ ๊ฑธ๊ณ  ํ’€ ํ•„์š”๊ฐ€ ์—†๋‹ค.
    -> ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ž…์žฅ์—์„œ๋Š” ํ›จ์”ฌ ์ˆ˜์›”ํ•  ๊ฒƒ์ด๋‹ค.

  • Monitor์—์„œ๋Š” condition variable์ด๋ผ๋Š” ๊ฒƒ์„ ๋‘˜ ์ˆ˜ ์žˆ๋Š”๋ฐ monitor ์•ˆ์—์„œ ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ์ง€๊ธˆ ๋ฌด์–ธ๊ฐ€ ์ถฉ์กฑ์ด ๋˜์ง€ ์•Š์•„์„œ ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค๋ฉด ๊ทธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž ๋“ค๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.
    -> ์–ด๋–ค ์กฐ๊ฑด์ด ์ถฉ์กฑ์ด ์•ˆ๋˜์„œ ์ž ๋“ค๊ฒŒ ํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ์„œ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์„ ๋ณ€์ˆ˜๋กœ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.
    -> ์ด๊ฒƒ์„ 'condition varialbe'์ด๋ผ๊ณ  ํ•œ๋‹ค.
    -> condition variable์€ semaphore์ฒ˜๋Ÿผ ์–ด๋–ค ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž ๋“ค๊ฒŒ ํ•˜๊ณ  ์ค„์„ธ์šฐ๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜์ด๋‹ค.
    -> ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๊ฑฐ๋‚˜ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค.

  • condition variable์— ๋Œ€ํ•ด์„œ๋Š” ์—ฐ์‚ฐ์ด ๋‘๊ฐ€์ง€ ์ •ํ•ด์ง€๋Š”๋ฐ ํ•˜๋‚˜๋Š” wait(), ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” signal()์ด๋‹ค.
    -> condition variable์€ ์–ด๋–ค ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค์ง€ ์•Š์•„์„œ ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ ค์•ผ ํ•  ๋•Œ ๊ทธ ํ”„๋กœ์„ธ๋ฅผ ์ž ๋“ค๊ฒŒ ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
    -> ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž ๋“ค๊ฒŒ ํ•ด์•ผ๊ฒ ๋‹ค. : x.wait()์„ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.
    -> ์ด ํ”„๋กœ์„ธ์Šค๋Š” x๋ผ๋Š” condition variable์— ๊ฐ€์„œ ์ค„์„ ์Šค๊ฒŒ ๋œ๋‹ค.
    -> x.signal ์—ฐ์‚ฐ : ๋ˆ„๊ตฐ๊ฐ€ x๋ฅผ ๋‹ค์“ฐ๊ณ  ๋น ์ ธ๋‚˜์™€์„œ ํ˜น์‹œ ์ž ๋“ค์–ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ์ค‘์— ํ•˜๋‚˜๋ฅผ ๊นจ์›Œ์ค˜๋ผ!

  • full : ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋ฒ„ํผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค„์„ธ์›Œ ๋†“๋Š” ๋ณ€์ˆ˜

  • empty : ๋นˆ ๋ฒ„ํผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค„์„ธ์›Œ ๋†“๋Š” ๋ณ€์ˆ˜

  • empty.wait()์„ ํ•˜๋ฉด empty ๋ณ€์ˆ˜์— ์ค„์„œ๊ฒŒ ๋˜๋ฉด์„œ Activeํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์–ด์ง€๊ฒŒ ๋˜๊ณ  ๋ฐ–์—์„œ ๊ธฐ๋‹ค๋ฆฌ๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

๐Ÿ“– 01. Dinig Philosophers Example

  • Monitor.ver

  • monitor๋กœ ๊ตฌํ˜„ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ “๊ฐ€๋ฝ์„ ์ง‘๋Š” ๋ช…๋ น์€ monitor๋‚ด๋ถ€์— ์กด์žฌํ•œ๋‹ค.





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

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

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