Skip to content

Latest commit

ย 

History

History
142 lines (82 loc) ยท 5.66 KB

Process_Synchronization.md

File metadata and controls

142 lines (82 loc) ยท 5.66 KB

Process_Synchronization

๊ณต์œ  ๋ฐ์ดํ„ฐ(Shared data)์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ฉด data inconsistency๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€: ํ˜‘๋ ฅ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ์‹คํ–‰(orderly execution)ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”



Race Condition

์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋Š” ์ƒํ™ฉ. ๋ฐ์ดํ„ฐ์˜ ์ตœ์ข… ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋Š” ๋งˆ์ง€๋ง‰์— ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ ํ”„๋กœ์„ธ์Šค์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.


Race Condition์ด ๋ฐœ์ƒํ•  ๋•Œ

  • kernel ์ˆ˜ํ–‰ ์ค‘ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ
  • Process๊ฐ€ system call์„ ํ•˜์—ฌ kernel mode๋กœ ์ˆ˜ํ–‰ ์ค‘์ธ๋ฐ context switch๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ
  • Multiprocessor์—์„œ shared memory ๋‚ด์˜ kernal data



Critical Region(Critical Section; CS)

ํ”„๋กœ์„ธ์Šค(์“ฐ๋ ˆ๋“œ)๊ฐ€ ๊ณต์œ  ์ž์›์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ ๋ถ€๋ถ„

Critical region ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์„ธ ๊ฐ€์ง€ ์กฐ๊ฑด

  1. Mutual Exclusion(์ƒํ˜ธ๋ฐฐ์ œ): ํ”„๋กœ์„ธ์Šค๊ฐ€ CS ๋ถ€๋ถ„์„ ์ˆ˜ํ–‰ ์ค‘์ด๋ฉด ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค์€ ๊ทธ๋“ค์˜ CS์— ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค.

  2. Progress(์ง„ํ–‰): ์•„๋ฌด๋„ CS์— ์žˆ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ CS์— ๋“ค์–ด๊ฐ€๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์œผ๋ฉด CS์— ๋“ค์–ด๊ฐ€๊ฒŒ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

  3. Bounded Waiting(ํ•œ์ • ๋Œ€๊ธฐ): ํ”„๋กœ์„ธ์Šค๊ฐ€ CS ์ง„์ž…์„ ์š”์ฒญํ•œ ํ›„์— ์š”์ฒญ์ด ํ—ˆ์šฉ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ CS ์ง„์ž…์ด ํ—ˆ์šฉ๋˜๋Š” ํšŸ์ˆ˜์— ์ œํ•œ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. -> ๊ทธ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ CS ์ง„์ž…์„ ์˜์›ํžˆ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.


ํ•ด๊ฒฐ์ฑ…

Higher-level software tools: Mutex Locks, Semaphores, Monitors ๋“ฑ


Mutex(Mutual Exclusion) Locks

CS์— ๋“ค์–ด๊ฐ€๊ธฐ์ „์— lock์„ ํš๋“ํ•˜๊ณ , ๋‚˜์˜ฌ๋•Œ๋Š” lock์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ํŠน์ง•

    m6


    • Locking ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์˜ค์ง ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ๋งŒ์ด ๋™์ผํ•œ ์‹œ์ ์— mutex๋ฅผ ์–ป์–ด CS์— ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ๋งŒ์ด CS๋ฅผ ๋ฒ—์–ด๋‚  ๋•Œ mutex๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

    • acquire()๊ณผ release()๋Š” atomic ํ•ด์•ผํ•œ๋‹ค.

    • Busy Waiting: CS์— ๋“ค์–ด๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ๊ณ„์†ํ•ด์„œ acquire()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค. -> lock์ด ๊ฐ€์šฉํ•ด์ง€๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์† ๋ฐ˜๋ณต ํšŒ์ „ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— spinlock์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

    • but ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ์‹œ์Šคํ…œ์—์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์† ์ผ์„ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Context Switching์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์žฅ์ ์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค. -> ํ”„๋กœ์„ธ์Šค๋“ค์ด ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ Lock์„ ์†Œ์œ ํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด mutex๊ฐ€ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.


    • Busy Waiting์ด ์—†๋Š” Mutex Lock: Test and Set์„ ์‚ฌ์šฉ
      • Test and Set: ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ atomicํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
      • lock์„ ํš๋“ํ•˜์ง€ ๋ชปํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๋Š” lock์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€๊ธฐ์ƒํƒœ๋กœ ์ „ํ™˜ํ•˜๊ณ  CPU๋ฅผ ๋‚ด์–ด ๋†“์Œ

Semaphore(์„ธ๋งˆํฌ์–ด)

  • semaphore S: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŠน์ • ์ž์›์˜ ๊ฐœ์ˆ˜

  • Semaphore ์—ฐ์‚ฐ

    • P operation(wait(S), acquire(S))
    • V operation(signal(S), release(S))

    s5

  • Signaling ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ lock์„ ๊ฑธ์ง€ ์•Š์€ ์Šค๋ ˆ๋“œ๋„ Signal์„ ๋ณด๋‚ด lock์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์šฉ๋„

    • ์ƒํ˜ธ ๋ฐฐ์ œ(mutual exclusion) -> binary semaphore
    • ์œ ํ•œ ๊ฐœ์ˆ˜์˜ ์ž์› ์ ‘๊ทผ, ํ•œ์ •๋œ concurrency -> counting semaphore

Binary semaphore(mutex lock๊ณผ ์œ ์‚ฌ)

  • semaphore ๊ฐ’: 0 ๋˜๋Š” 1(1๋กœ ์ดˆ๊ธฐํ™”); S=1: unlock, S=0: lock

  • ์ž„๊ณ„๊ตฌ์—ญ ์ ‘๊ทผ ์ œ์–ด์— ์‚ฌ์šฉ

s6

Counting Semaphore(ํ•œ์ •๋œ concurrency, ์œ ํ•œ ๊ฐœ์ˆ˜ ์ž์› ์ ‘๊ทผ)

  • semaphore ๊ฐ’: ๊ฐ€์šฉ ์ž์› ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธ(์ตœ๋Œ€ ๊ฐ€์šฉ ์ž์› ๊ฐœ์ˆ˜๋กœ ์ดˆ๊ธฐํ™”)
  • ์œ ํ•œ ๊ฐœ์ˆ˜์˜ ์ž์›์˜ ์ ‘๊ทผ ์ œ์–ด์— ์‚ฌ์šฉ
  • Busy Waiting์ด ์žˆ๋‹ค.(spin lock)

s7



  • semaphore๋ฅผ ์ด์šฉํ•œ ๋™๊ธฐํ™”

s8


Semaphore ๊ตฌํ˜„

  • Busy Waiting์ด ์žˆ๋Š” Semaphore

  • Busy Waiting์ด ์—†๋Š” Semaphore

s9

  • Block & Wakeup ๋ฐฉ์‹(sleep lock)
  • semaphore ๊ฐ’์„ ๋จผ์ € ๊ฐ์†Œ -> ์Œ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์Œ์ˆ˜์˜ ํฌ๊ธฐ๋Š” semaphore๋ฅผ ๋Œ€๊ธฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์˜ ๊ฐœ์ˆ˜์ด๋‹ค.
  • ๋‘ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ™์€ semaphore์— ๋Œ€ํ•ด P ๋˜๋Š” V ์—ฐ์‚ฐ์ด ์ค‘์ฒฉ๋˜์–ด ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ํ•ด์•ผํ•œ๋‹ค.(atomic ์‹คํ–‰)



Monitor

์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ณ ์ˆ˜์ค€์˜ ๋™๊ธฐํ™” ์ถ”์ƒํ™” ๋ฐ์ดํ„ฐํ˜•(ADT)


mo1

mo2


  • semaphore์˜ ๋‹จ์ ์„ ๊ทน๋ณต. ex) wait()์™€ signal() ์—ฐ์‚ฐ์˜ ์ˆœ์„œ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
  • monitor ์•ˆ์—๋Š” shared data์™€ ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” procedure๋ฅผ ์ •์˜ํ•ด๋‘๊ณ  ํ•ด๋‹น shared data๋Š” procedure๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • monitor๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด๋ถ€์˜ procedure๋“ค์€ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋„๋ก ํ•œ๋‹ค.
  • monitor ๋‚ด์—์„œ๋Š” ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ํ™œ๋™ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ lock์„ ๊ฑธ ํ•„์š”๊ฐ€ ์—†๋‹ค. vs semaphore
  • condition variable(ํ”„๋กœ์„ธ์Šค๊ฐ€ monitor ์•ˆ์—์„œ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.)์ด ์‚ฌ์šฉ๋œ๋‹ค. -> wait()์™€ signal() ์—ฐ์‚ฐ์— ์˜ํ•ด์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • wait() ๋ฅผ ํ˜ธ์ถœํ•œ ์—ฐ์‚ฐ์€ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ signal() ์„ ํ˜ธ์ถœํ•  ๋•Œ๊นŒ์ง€ ์ผ์‹œ ์ค‘์ง€(suspend) ๋œ๋‹ค.
    • signal() ์—ฐ์‚ฐ์€ ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์žฌ๊ฐœ์‹œํ‚จ๋‹ค. ์ผ์‹œ ์ค‘์ง€๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์œผ๋ฉด ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์ด ์—†๋‹ค.