๐Ÿ“Œ Process Synchronization 2

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

๐Ÿ“– 01. Semaphores

  • ์ถ”์ƒ์ž๋ฃŒํ˜• = operation + object

  • Semaphores๋„ ์ผ์ข…์˜ ์ถ”์ƒ์ž๋ฃŒํ˜•์ด๋‹ค.

  • Semaphores ๋ณ€์ˆ˜ S๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์ด ๋ณ€์ˆ˜ S๋Š” ์ •์ˆ˜๊ฐ’์„ ๊ฐ–์„ ์ˆ˜ ์žˆ๊ณ  ์—ฐ์‚ฐ์€ 2๊ฐ€์ง€๊ฐ€ ์ •์˜๋˜๊ณ  ์žˆ๋‹ค.
    -> P์—ฐ์‚ฐ, V์—ฐ์‚ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • lock์„ ํ’€๊ณ  ๊ฑฐ๋Š”๊ฒƒ์„ Semaphores๊ฐ€ ์ œ๊ณตํ•œ๋‹ค.

  • ๊ณต์œ  ์ž์›์„ ํš๋“ํ•˜๊ณ  ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ฒƒ์„ semaphores๊ฐ€ ์ œ๊ณตํ•œ๋‹ค.

  • P์—ฐ์‚ฐ : ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ํš๋“ํ•˜๋Š” ๊ณผ์ •

  • V์—ฐ์‚ฐ : ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ณผ์ •

  • ์ •์ˆ˜์ธ ๋ณ€์ˆ˜๊ฐ’์„ ๊ณต์œ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
    -> s = 5๋ผ๋ฉด P์—ฐ์‚ฐ์„ ํ–ˆ์„ ๋•Œ ์ž์›์„ ํ•˜๋‚˜ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋˜๊ณ  S = 4๊ฐ€ ๋œ๋‹ค.

  • lock์„ ๊ฑธ๊ณ  ํ‘ธ๋Š” ๊ฒƒ์€ semaphores๊ฐ’์ด 1์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
    -> P์—ฐ์‚ฐ์„ ํ•˜๋ฉด lock์„ ๊ฑฐ๋Š” ๊ณผ์ •์ด๊ณ  V์—ฐ์‚ฐ์„ ํ•˜๋ฉด lock์„ ํ‘ธ๋Š” ๊ณผ์ •์ด๋‹ค.

  • ์—ฐ์‚ฐ์ด atomicํ•˜๊ฒŒ ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
    -> semaphores๋Š” ์ถ”์ƒํ™”์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๊ณผ์ •์€ ์ƒ๋žตํ•˜์ž.

๐Ÿ“– 02. Critical Section of n Processes

  • ๋‹ค์Œ์€ Critical Section์— Semaphores๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์ด๋‹ค.

  • Semaphores๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” p,v์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋ฉด๋˜๋Š” ๊ฒƒ์ด๊ณ  ํ•ด๋‹นํ•˜๋Š” ๋‚ด์šฉ์€ ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

  • ํ˜„์žฌ p์—ฐ์‚ฐ์€ busy-wait์ƒํƒœ์ด๋ฉฐ ํšจ์œจ์ ์ด์ง€ ๋ชปํ•˜๋‹ค.(CPU๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)
    -> ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜๋Š”๋ฐ! Block & Wakeup ๋ฐฉ์‹์ด๋‹ค.
    -> CPU๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  waitting ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

๐Ÿ“– 03. Block / Wakeup Implementation

  • ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ Process๊ฐ€ ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋†“๊ธฐ ์ „๊นŒ์ง€ ๋‚ด ์ฐจ๋ก€๊ฐ€ ์˜ค์ง€ ์•Š๋Š”๋‹ค.
    -> CPU๋ฅผ ๋ฐ˜๋‚ฉํ•˜๊ณ  Blocked์ƒํƒœ๋กœ ๋งŒ๋“ค์ž.(busy watting x)
    -> ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋˜ process๊ฐ€ ๋ฐ˜๋‚ฉํ•˜๋ฉด blocked ์ƒํƒœ์— ์žˆ๋˜ process๊ฐ€ ๊นจ์–ด๋‚˜๊ณ  Ready Queue์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

  • ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ semaphores๋ฅผ ์“ฐ๊ณ  ๋‚˜์„œ ๋ฐ˜๋‚ฉ์„ ํ•˜๊ฒŒ๋˜๋ฉด block๋œ process์ค‘ ํ•˜๋‚˜๋ฅผ ๊นจ์›Œ์„œ wakeup(P)์„ ์‹œํ‚ค๊ฒŒ ๋œ๋‹ค.

  • semaphores๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ๋ˆ„๊ตฐ๊ฐ€๋Š” ์ด ๋ณ€์ˆ˜๋ฅผ ํš๋“ํ–ˆ์„ ๊ฒƒ์ด๋‹ค.
    -> semahpores๋ณ€์ˆ˜๋ฅผ ํš๋“ํ•˜์ง€ ๋ชปํ•œ process๋“ค์€ PCB๋ฅผ semaphores๋ณ€์ˆ˜ Queue์—๋‹ค๊ฐ€ ๋งค๋‹ฌ์•„ ๋†“๋Š”๋‹ค.

๐Ÿ“– 04. Implementation

  • block & wakeup ๋ฐฉ์‹์—์„œ semaphores์— ๋™์ž‘ ๋ฐฉ์‹์„ ๋ณด์ž.

  • P์—ฐ์‚ฐ์€ ์ž์›์„ ํš๋“ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.
    -> ์ž์›์˜ ์—ฌ๋ถ„์ด ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ํš๋“ํ•  ๊ฒƒ์ด๊ณ  ์ž์›์˜ ์—ฌ๋ถ„์ด ์—†๋‹ค๋ฉด ์ž ๋“ค๊ฒƒ์ด๋‹ค.(blocked ์ƒํƒœ)

  • V์—ฐ์‚ฐ์€ ์ž์›์„ ๋‹ค ์“ฐ๊ณ ๋‚˜์„œ ๋ฐ˜๋‚ฉ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    -> ๋ฐ˜๋‚ฉํ•˜๊ณ  ๋๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ด ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” process๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ๊นจ์›Œ์ฃผ๋Š” ์—ญํ• ๊นŒ์ง€ V์—ฐ์‚ฐ์— ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค.

  • add this process to S.L : S์— ์žˆ๋Š” ๊ตฌ์กฐ์ฒด L์— Process๋ฅผ ์—ฐ๊ฒฐ์‹œํ‚ค์ž.

  • V์—ฐ์‚ฐ์—์„œ if(S.value <= 0) : ๊ณต์œ ๋ฐ์ดํ„ฐ(S)๋ฅผ ๋”ํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์Œ์ˆ˜๋ผ๋Š” ๊ฒƒ์€ ํ•ด๋‹น ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” process๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.
    -> ๊ธฐ๋‹ค๋ฆฌ๋Š” process๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๊นจ์›Œ์ฃผ์ž!

๐Ÿ“– 05. Which is better?

  • Busy-wait ๋ณด๋‹ค Block/wakeup ๋ฐฉ์‹์ด CUP๋ฅผ ์ข€ ๋” ์˜๋ฏธ์žˆ๋Š” ๊ฒƒ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    -> ๊ทธ๋Ÿฌ๋‚˜ Block/wakeup ๋ฐฉ์‹ ๋˜ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ process์˜ ์ƒํƒœ๋ฅผ ready์ƒํƒœ์—์„œ waitting ์ƒํƒœ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. + ๊ณต์œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ๊ธฐ๋ฉด waitting ์ƒํƒœ๋ฅผ ๋‹ค์‹œ ready์ƒํƒœ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

  • Block/wakeup๋„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— critical section์ด ๋„ˆ๋ฌด ์งง์„ ๊ฒฝ์šฐ์—๋Š” busy-wait ๋ฐฉ์‹๋„ ๊ดœ์ฐฎ๋‹ค.

๐Ÿ“– 06. Two Types of semaphores

  • semaphores์„ 2๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
    -> ์ž์›์˜ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ์ธ ๊ฒฝ์šฐ : lock
    -> ์ž์›์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ : Counting semaphore์ด๋ผ๊ณ  ํ•œ๋‹ค.

๐Ÿ“– 07. Deadlock and Starvation

  • semaphores์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์ด ์กด์žฌํ•œ๋‹ค.
    -> ์˜ˆ) semaphores S, Q๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ ๋‘˜ ๋‹ค ํš๋“ํ•ด์•ผ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด๋‹ค.
    -> P0๊ฐ€ S๋ฅผ ํš๋“ํ•˜๊ณ  CPU๋ฅผ ์žƒ์–ด๋ฒ„๋ฆฐ ํ›„ P1์ด Q๋ฅผ ์–ป์—ˆ๋‹ค๋ฉด P1์€ S๋ฅผ ํš๋“ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด ๋˜๋ฒ„๋ฆฐ๋‹ค.(์˜์›ํžˆ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ)
    -> ์ด๋Ÿฐ ์ƒํƒœ๋ฅผ Deadlock์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
    -> ์ž์›์„ ํš๋“ํ•˜๋Š” ์ˆœ์„œ๋ฅผ ๋˜‘๊ฐ™์ด ๋งž์ถฐ์ฃผ๋ฉด Deadlock์ƒํƒœ๋ฅผ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • starvation(์ž์›์„ ์–ป์ง€ ๋ชปํ•˜๊ณ  ๊ณ„์† ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ)๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค.



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

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

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