Skip to content

Files

Latest commit

780fc33 ยท Feb 17, 2022

History

History
375 lines (259 loc) ยท 18.5 KB

processSynchronization.md

File metadata and controls

375 lines (259 loc) ยท 18.5 KB

๐Ÿซ Process Synchronization

Intro

๋™๊ธฐํ™”(Synchronization)

Race Conditions

Critical Region

ํ•ด๊ฒฐ์ฑ…

Mutex & Semaphore

Lock

Semaphores

Monitor


๐Ÿซ Intro

Process๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

ํ”„๋กœ์„ธ์Šค๋ž€ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ Processor(CPU)๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์šด์˜์ฒด์ œ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค๋Š” ์ฐฉ๊ฐ์„ ์ผ์œผํ‚จ๋‹ค. ์‚ฌ์‹ค CPU๋Š” process to process๋กœ switch๋ฅผ ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๋Š” address space(core image), process table entry๋ฅผ ๊ฐ€์ง„๋‹ค.

Process์˜ ์„ธ๊ฐ€์ง€ ์ƒํƒœ

  1. Running,์‹คํ–‰
    • ์‹ค์ œ๋กœ CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ
  2. Ready,์ค€๋น„
    • Runnable, ์ผ์‹œ์ ์œผ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ๋ฉˆ์ถฐ์žˆ๋Š” ์ƒํƒœ
    • CPU๋Š” process๊ฐ„์— ๊ณต์œ ๋˜์–ด์•ผ ํ•œ๋‹ค.
  3. Blocked
    • ์ค‘๋‹จ๋œ ์ƒํƒœ, disk๊ฐ€ ์ฝํžˆ๊ฑฐ๋‚˜ ์ž…๋ ฅ์ด ๋“ค์–ด์™€์„œ ์ผ์‹œ์ ์œผ๋กœ runํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ

stateD


๐Ÿซ Synchronization

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

Interprocess Communication, ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ 

  • ์„ธ ๊ฐ€์ง€ ์ด์Šˆ
    • ์–ด๋–ป๊ฒŒ ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ •๋ณด๋ฅผ ๋„˜๊ธธ ๊ฒƒ์ธ๊ฐ€?
    • ๋‘๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ์— ๋™์‹œ์— ์ ‘๊ทผํ•˜์ง€ ์•Š๋„๋ก ํ•  ๊ฒƒ์ธ๊ฐ€?
    • ์˜์กด ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ์ ์ ˆํ•œ ์ˆœ์„œ ๋ถ€์—ฌ๋ฅผ ํ•  ๊ฒƒ์ธ๊ฐ€?
      • ๋งŒ์•ฝ process A๊ฐ€ ๋ฐ์ดํ„ฐ C ์ƒ์‚ฐํ•˜๊ณ , B๊ฐ€ C๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋ฉด, B๋Š” A๊ฐ€ ์ˆ˜ํ–‰๋œ ํ›„ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.

๐Ÿซ Race Conditions

Race condition(๊ฒฝ์Ÿ ์ƒํƒœ)์€ ๋‘ ๊ฐœ ๋˜๋Š” ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ shared data๋ฅผ ๋™์‹œ์— ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ์ƒํ™ฉ์—์„œ ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ๋Š” ์ •ํ™•ํžˆ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ธ์ œ ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ์„œ ๊ฒฐ์ •๋œ๋‹ค.

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

  1. ์ปค๋„ ์ž‘์—…์„ ์ˆ˜ํ–‰ ์ค‘์— ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ
  2. ํ”„๋กœ์„ธ์Šค๊ฐ€ system call์„ ํ•˜์—ฌ ์ปค๋„ ๋ชจ๋“œ๋กœ ์ง„์ž…ํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„์ค‘ context switch๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ
  3. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ์—์„œ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์˜ ์ปค๋„ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ

๐Ÿซ Critical Region(Critical section)

cs

  • Mutual Exclusion(์ƒํ˜ธ๋ฐฐ์ œ)
    • ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ Critical region์— ๋“ค์–ด์˜ค๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” critical region์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋‹ค.
  • Critical Region(์ž„๊ณ„๊ตฌ์—ญ)
    • ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์—์„œ ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ๊ณต์œ  ์ž์›์˜ ์ฝ”๋“œ ์˜์—ญ ์ด๋‹ค.

critical region์€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ข…๋ฃŒ๋˜๋ฉฐ, ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„๊ตฌ์—ญ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ง€์ •๋œ ์‹œ๊ฐ„๋งŒํผ ๋Œ€๊ธฐํ•ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ ์Šค๋ ˆ๋“œ๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐฐํƒ€์ ์ธ ์‚ฌ์šฉ๊ถŒ์„ ๋ณด์žฅ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ ์„ธ๋งˆํฌ์–ด ๊ฐ™์€ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

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

  1. Mutual Exclusion
    • ๋‘๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋™์‹œ์— critical region์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋‹ค.
  2. CPU์˜ ๊ฐฏ์ˆ˜๋‚˜ ์„ฑ๋Šฅ์— ๊ด€ํ•˜์—ฌ ์–ด๋– ํ•œ ๊ฐ€์ •๋„ ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.
  3. Critical region ๋ฐ–์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ process๋ฅผ blockํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.
  4. Bounded Waiting(ํ•œ์ • ๋Œ€๊ธฐ)
    • ๊ทธ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ critical region์— ๋“ค์–ด๊ฐ€๊ธฐ ์œ„ํ•ด ์˜์›ํžˆ ๊ธฐ๋‹ค๋ ค์„œ๋Š” ์•ˆ๋œ๋‹ค.

์ €๋Š” ์œ„ ๋„ค ๊ฐ€์ง€๋กœ ๋ฐฐ์› ์ง€๋งŒ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์„ธ ๊ฐ€์ง€๋กœ ์ •๋ฆฌํ•œ๊ฒŒ ๋งŽ์•„ ์„ธ ๊ฐ€์ง€๋„ ์ ์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

  1. Mutual Exclusion(์ƒํ˜ธ๋ฐฐ์ œ) - ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„๊ตฌ์—ญ์— ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋‹ค.
  2. Progress(์ง„ํ–‰) - ์ž„๊ณ„๊ตฌ์—ญ์— ๋“ค์–ด๊ฐ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋‹ค๋ฉด ์–ด๋А ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด๊ฐˆ ๊ฒƒ์ธ์ง€ ์ ์ ˆํžˆ ์„ ํƒํ•ด์ค˜์•ผ ํ•œ๋‹ค.
  3. Bounded Waiting(ํ•œ์ • ๋Œ€๊ธฐ) - ๊ทธ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ critical region์— ๋“ค์–ด๊ฐ€๊ธฐ ์œ„ํ•ด ์˜์›ํžˆ ๊ธฐ๋‹ค๋ ค์„œ๋Š” ์•ˆ๋œ๋‹ค.



๐Ÿซ ํ•ด๊ฒฐ์ฑ…

์ž„๊ณ„๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹์€ ๋งŽ์ง€๋งŒ ํฌ๊ฒŒ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ฉด

  • Disabling Interrupt
  • Lock
  • Peterson's solution
  • TSL instruction(h/w)
  • Sleep and Wakeup
  • Producer-consumer
  • Semaphore
  • Monitor ๋“ฑ๋“ฑ ๋งŽ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฃผ๋กœ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์€ ์ •ํ•ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ถ๊ธˆํ•˜์‹  ๋ถ„๋“ค์€ ๊ฐœ์ธ์ ์œผ๋กœ ์ฐพ์•„๋ณด์‹œ๋ฉด ๋˜๊ณ  ์ œ ์ƒ๊ฐ์—๋Š” ๋ฉด์ ‘์„ ๋ณด๊ธฐ ์œ„ํ•ด์„œ ๊ผญ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฐœ๋…์€ ์•„๋ž˜ ์„ธ๊ฐ€์ง€ ์ •๋„์ธ ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Mutex Lock(s/w)

์†Œํ”„ํŠธ์›จ์–ด์ ์ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณต์œ ๋ฝ์„ ์ด์šฉํ•œ๋‹ค.

๋™์ž‘ ๋ฐฉ์‹

  1. ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ critical region์— ๋“ค์–ด๊ฐ€๋ ค ํ•  ๋•Œ lock์„ ๊ฒ€์‚ฌํ•œ๋‹ค.
  2. ๋งŒ์•ฝ lock์ด 0์ด๋ผ๋ฉด, ํ”„๋กœ์„ธ์Šค๋Š” lock->1๋กœ ๋ฐ”๊พธ๊ณ  critical region์— ๋“ค์–ด๊ฐ„๋‹ค.
  3. ๋งŒ์•ฝ lock์ด ์ด๋ฏธ 1์ด๋ผ๋ฉด, ํ”„๋กœ์„ธ์Šค๋Š” lock์ด 0์œผ๋กœ ๋ฐ”๋€” ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

*Spooler directory์™€ ๊ฐ™์€ ๊ฒฐ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์€ mutual exclusion์„ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ์ƒํ™ฉ ์˜ˆ์‹œ

1. A๊ฐ€ lock์„ 0์ธ ๊ฒƒ ํ™•์ธ
2. B ์ฐจ๋ก€๊ฐ€ ๋˜์–ด lock์ด 0์ธ ๊ฒƒ์„ ํ™•์ธํ•˜์—ฌ critical region์— ์ง„์ž…ํ•˜๋ฉด์„œ,
 lock -> 1๋กœ ๋ฐ”๊ฟˆ
3. ํ•˜์ง€๋งŒ A๊ฐ€ critical region์— ๋“ค์–ด๊ฐ€๋ ค๊ณ  ํ™•์ธํ•œ ๊ฑฐ์˜€์–ด์„œ critical region
์— ๋“ค์–ด๊ฐ€๊ณ  ๋ณ€์ˆ˜ 1๋กœ ๋ฐ”๊พผ๋‹ค.
=> A, B ๋™์‹œ์— critical region์— ๋“ค์–ด๊ฐ€๊ณ  ์กฐ๊ฑด 1์— ์œ„๋ฐฐ

Semaphore

  • ์„ธ๋งˆํฌ์–ด๋Š” ์ž์›์˜ ๊ฐœ์ˆ˜๋ฅผ ๋œปํ•œ๋‹ค.
  • ๋™์‹œ์— ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ—ˆ์šฉ๊ฐ€๋Šฅํ•œ counter์˜ ๊ฐœ์ˆ˜
  • ์„ธ๋งˆํฌ์–ด๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์— ์˜ํ•ด ๊ณต์œ ๋˜๋Š” ๋ณ€์ˆ˜ ๋กœ ์ •์˜
  • ์ด ๋ณ€์ˆ˜๋Š” ์˜ค์ง P, V๋ผ๋Š” atomicํ•œ ์—ฐ์‚ฐ์— ์˜ํ•ด์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์นด์šดํ„ฐ ๊ฐœ๋…์ด๋‹ค.
  • lock์˜ ๊ฒฝ์šฐ์—๋Š” 0, 1๋กœ๋งŒ ๊ตฌ๋ถ„์„ ํ–ˆ์ง€๋งŒ ์„ธ๋งˆํฌ์–ด๋Š” shared data ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. semaphore๋Š” lock๊ณผ๋Š” ๋‹ฌ๋ฆฌ 1๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์ค‘์ด๋ฉด 0์œผ๋กœ ๋ฐ”๋€๋‹ค.
  • ์„ธ๋งˆํฌ์–ด๋Š” ์†Œ์œ ์˜ ๊ฐœ๋…์ด ์—†๋‹ค.(์นด์šดํ„ฐ๋กœ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ)
    • ์„ธ๋งˆํฌ์–ด๋ฅผ ์†Œ์œ ํ•˜์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„ธ๋งˆํฌ์–ด๋ฅผ ํ•ด์ œํ•  ์ˆ˜๋„ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ => mutual exclusion ์ด ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๊ฒŒ ์•„๋‹Œ๊ฐ€..?
  • Semaphore counter ๊ฐฏ์ˆ˜ 1๊ฐœ - binary semaphore, 2 ์ด์ƒ - counting semaphore

Semaphore ์—ฐ์‚ฐ

  • Down(P) operation
    • ๋งŒ์•ฝ ์„ธ๋งˆํฌ์–ด๊ฐ€ 0๋ณด๋‹ค ํฌ๋‹ค๋ฉด, ๊ฐ’์„ ๊ฐ์†Œ์‹œํ‚จ๋‹ค.
    • ๋งŒ์•ฝ ์„ธ๋งˆํฌ์–ด๊ฐ€ ์ด๋ฏธ 0์ด๋ผ๋ฉด process๋Š” down(P) op๋ฅผ ๋๋‚ด์ง€์•Š๊ณ  sleepํ•œ๋‹ค.
  • critical region
  • up(V) operation
    • ์„ธ๋งˆํฌ์–ด ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ์„ธ๋งˆํฌ์–ด์— ์˜ํ•ด ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž๊ณ  ์žˆ๋‹ค๋ฉด ์ด์ „์˜ ์ž‘์—…์„ ๋๋‚ผ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž๊ณ  ์žˆ๋Š” ๊ฒƒ๋“ค์ค‘์—์„œ ํ•˜๋‚˜๋ฅผ ๊นจ์›Œ ์ž‘์—…์„ ๋๋‚ด๊ณ  down์ƒํƒœ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
// ์„ธ๋งˆํฌ์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ producer consumer ๋ฌธ์ œ ํ•ด๊ฒฐ ์ฝ”๋“œ (์ฐธ๊ณ ๋งŒ ํ•˜์„ธ์š”!)
#define N 100
typedef int semaphore;
semaphore mutex = 1;
semaphore empty = N;
semaphore full = 0;

void producer(){
    int item;

    while(TRUE){
        item = produce_item();
        down(&empty);
        down(&mutex);
        insert_item(item);
        up(&mutex);
        up(&full);
    }
}

void consumer(){
    int item;
    while(TRUE){
        down(&full);
        down(&mutex);
        item = remove_item();
        up(&mutex);
        up(&empty);
        consume_item(item);
    }
}

Mutex with TSL(Test and Set Lock with h/w)

  • ์„ธ๋งˆํฌ์–ด์˜ ๊ฐ„์†Œํ™”๋œ ๋ฒ„์ „, semaphore๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • Unlock :0, lock :1
  • ๋ฎคํ…์Šค ๊ฐ์ฒด๋ฅผ ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ผ์ข…์˜ locking ๋งค์ปค๋‹ˆ์ฆ˜์œผ๋กœ ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์กฐ์œจํ•˜๊ธฐ ์œ„ํ•ด locking๊ณผ unlocking์„ low level์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค.

์•„๋ž˜ ์˜ˆ์ œ๋Š” tsl instruction์„ ์ด์šฉํ•œ mutex ์ œ์–ด ์ž…๋‹ˆ๋‹ค.

  • TSL instruction์€ ํ•˜๋“œ์›จ์–ด์  ๋„์›€์„ ๋ฐ›๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. TSL(test set lock)์€ mutual exclusion์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ lock๊ณผ unlock์„ ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ ๋™์ž‘์‹œํ‚ค๊ณ  ๋‘๊ฐœ์˜ operation์€ ์ชผ๊ฐค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.์ฆ‰, ํ•œ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ’์„ ์ฝ์–ด์˜ค๊ณ  ๊ทธ ์ฃผ์†Œ์— ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋„์ค‘ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋ณด์žฅํ•ด ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. TSL ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ„์Šค๋ฅผ ์ž ๊ถˆ์„œ ๋‹ค๋ฅธ CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
mutex_lock:
    TSL REGISTER, MUTEX | mutex๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์œผ๋กœ ์˜ฎ๊ธฐ๊ณ  mutex๋Š” 1๋กœ ๋ฐ”๊พผ๋‹ค.
    CMP REGISTER, #0 
    JZE ok
    CALL mutex_lock
ok: RET | critical region์— ๋“ค์–ด๊ฐ„๋‹ค.

mutex_unlock:
    MOVE MUTEX #0 | mutexfmf 0์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
    RET



Toilet problem with Mutex&Semaphore (์˜ˆ์ œ ๋А๋‚Œ์ž…๋‹ˆ๋‹ค์ž‰)

๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฐ€์žฅ ํฐ ์ˆ™์ œ๋Š” ๊ณต์œ ์ž์› ๊ด€๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ณต์œ ์ž์›์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒํ˜ธ๋ฐฐ์ œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๊ธฐ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Mutex

๋ฎคํ…์Šค๋Š” ํ™”์žฅ์‹ค์ด ํ•˜๋‚˜ ๋ฟ์ด ์—†๋Š” ์‹๋‹น๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ํ™”์žฅ์‹ค์„ ๊ฐ€๊ธฐ์œ„ํ•ด ์นด์šดํ„ฐ์—์„œ ์—ด์‡ ๋ฅผ ๋ฐ›์•„ ๊ฐ€์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ์‹œ๋‹ค.

ํ™”์žฅ์‹ค์„ ๊ฐ€๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์นด์šดํ„ฐ์— ํ‚ค๊ฐ€ ์žˆ์œผ๋ฉด ํ™”์žฅ์‹ค์ด ๋น„์–ด์žˆ๋Š” ๊ฒƒ์ด๊ณ  ๊ทธ ์—ด์‡ ๋ฅผ ์ด์šฉํ•ด์„œ ํ™”์žฅ์‹ค์— ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘‡

m1

ํ™”์žฅ์‹ค์—์„œ ํ–‰๋ณตํ•œ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ  ์žˆ๋Š”๋ฐ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ ์–ด๋–ค ๋‚จ์ž๊ฐ€ ํ™”์žฅ์‹ค์— ๊ฐ€๊ณ  ์‹ถ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด ๋‚จ์ž๋Š” ์•„๋ฌด๋ฆฌ ์šฉ๋ฌด๊ฐ€ ๊ธ‰ํ•ด๋„ ๊พน ์ฐธ์•„์•ผ๊ฒ ์ฃ ? ํ™”์žฅ์‹ค์ด ํ’€๋ฐฉ์ด๋‹ˆ๊นŒ์š”.. ๊ฒฐ๊ตญ ๋‚จ์ž๋Š” ๋‚ด๊ฐ€ ํ™”์žฅ์‹ค์„ ๋‹ค ์“ธ ๋•Œ๊นŒ์ง€ ์นด์šดํ„ฐ์—์„œ ์ธ๋‚ด์˜ ์‹œ๊ฐ„์„ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ‘‡

m2

๊ณง์ด์–ด ์˜† ํ…Œ์ด๋ธ”์— ์žˆ๋˜ ์—ฌ์ž๋„ ํ™”์žฅ์‹ค์— ๊ฐ€๊ณ  ์‹ถ์€ ๊ฐ€๋ด์š”,, ์–ด๋–กํ•˜์ง€? ์–ด๋–กํ•˜๊ธด ๊ธฐ๋‹ค๋ ค์•ผ์ฃ ,, ์นด์šดํ„ฐ์—์„œ.. ๐Ÿ‘‡

m3

์ด์ œ ๋‚ด๊ฐ€ ํ™”์žฅ์‹ค์—์„œ ๋‚˜์™”๊ณ  ์นด์šดํ„ฐ์— ํ‚ค๋ฅผ ๋Œ๋ ค๋†จ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๊นŒ ์ธ๋‚ด์˜ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋˜ ๋„ˆ๋ฌด ๊ธ‰ํ–ˆ๋˜ ๋‚จ์ž๋Š” ์นด์šดํ„ฐ์— ์˜ฌ๋ ค์ง„ ํ‚ค๋ฅผ ๋“ค๊ณ  ๋ฐ”๋กœ ํ™”์žฅ์‹ค๋กœ ์งํ–‰~ ๐Ÿ‘‡

m4

์ด๊ฒŒ ๋ฎคํ…์Šค๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ™”์žฅ์‹ค์„ ์ด์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ํ”„๋กœ์„ธ์Šค ํ˜น์€ ์“ฐ๋ ˆ๋“œ์ด๊ณ  ํ™”์žฅ์‹ค์€ ๊ณต์œ ์ž์›์ธ ๊ฒƒ์ด์ฃ . ํ™”์žฅ์‹ค ํ‚ค๋Š” ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์–ด๋–ค ์˜ค๋ธŒ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์šด์˜์ฒด์ œ ์ˆ˜์—… ๋•Œ ๊ต์ˆ˜๋‹˜์˜ ๋ง์”€์„ ๋”๋“ฌ์–ด์„œ ์ƒ๊ฐ์„ ํ•ด๋ณด๋ฉด ์ด ํ™”์žฅ์‹ค ํ‚ค๋ฅผ ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ํ•˜์…จ๋˜๊ฑฐ ๊ฐ™์•„์š”. tsl lock ์ฒ˜๋Ÿผ์š”.! ๊ทธ๋ž˜์„œ ์ด ํ™”์žฅ์‹คํ‚ค๋Š” ์ผ๋ฐ˜ lock๊ณผ๋Š” ๋‹ค๋ฅธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ์ข‹์„๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๐Ÿ‘‡

m5


Semaphore

์„ธ๋งˆํฌ์–ด๋Š” ์†๋‹˜์ด ํ™”์žฅ์‹ค์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ ์ง‘์ž…๋‹ˆ๋‹ค. ์„ธ๋งˆํฌ์–ด๋ฅผ ์ด์šฉํ•˜๋Š” ์ˆ ์ง‘ ํ™”์žฅ์‹ค์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ™”์žฅ์‹ค ์นธ์ด ์žˆ์–ด์š”.. ๋‹คํ–‰์ด๋„ค์š”. ๊ทธ๋ฆฌ๊ณ  ์žฌ๋ฐŒ๊ฒŒ๋„ ํ™”์žฅ์‹ค ํ˜„ํ™ฉํŒ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ–ˆ๋„ค์š”. ๐Ÿ‘‡

s1

๋‚ด๊ฐ€ ํ™”์žฅ์‹ค์— ๊ฐ€๊ณ  ์‹ถ์œผ๋ฉด ์ž…๊ตฌ์—์„œ ํ˜„ํ™ฉํŒ์„ ํ†ตํ•ด ๋นˆ ์นธ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํ˜„ํ™ฉํŒ์„ n-- ์ž…์žฅํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ณผ ์ผ์„ ๋‹ค ๋งˆ์น˜๋ฉด n++ ์‹œ์ผœ์•ผ๊ฒ ์ฃ ? ๐Ÿ‘‡

s2

๋ชจ๋“  ์นธ์— ์‚ฌ๋žŒ๋“ค์ด ์ฐจ์žˆ๋‹ค๋ฉด ๋นˆ ์นธ์˜ ๊ฐœ์ˆ˜๋Š” 0์ธ๋ฐ์š” ์ด๋•Œ๋ถ€ํ„ฐ ๋˜ ๋‹ค์‹œ ์ธ๋‚ด์˜ ์‹œ๊ฐ„์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ์ฃ .. ๐Ÿ‘‡

s3

์‚ฌ๋žŒ๋“ค์ด ๋‚˜์˜ฌ ๋•Œ ๋งˆ๋‹ค ๋นˆ ์นธ์˜ ๊ฐœ์ˆ˜++ ์‹œ์ผœ์ค˜์•ผ ํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋˜ ์‚ฌ๋žŒ์€ ๋‹ค์‹œ ๋นˆ ์นธ์˜ ๊ฐœ์ˆ˜-- ํ•˜๊ณ  ์ž…์žฅํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ‘‡

s4

์ •๋ฆฌํ•˜๋ฉด
mutex <= ํ•œ ์“ฐ๋ ˆ๋“œ, ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์†Œ์œ ๋˜๋Š” ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•œ mutual exclusion ๊ธฐ๋ฒ•
semaphore <= signaling mechanism์œผ๋กœ ํ˜„์žฌ ๊ณต์œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์„ ๋‘์–ด ์ƒํ˜ธ๋ฐฐ์ œ๋ฅผ ๋‹ฌ์„ฑํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


Monitor

  • Mutex์™€ Condition Variables๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” synchronization ๋งค์ปค๋‹ˆ์ฆ˜์ด๋‹ค.
  • Mutex์™€ monitor๋Š” ์ƒํ˜ธ๋ฐฐ์ œ๋ฅผ ํ•จ์œผ๋กœ์จ ์ž„๊ณ„๊ตฌ์—ญ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.(์„ธ๋งˆํฌ์–ด๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ.)
  • ์„ธ๋งˆํฌ์–ด๋ฅผ ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.
  • ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๋ฐ ํ”„๋กœ๊ทธ๋žจ ๋ชจ๋“ˆ, ์šด์˜์ฒด์ œ ๋‚ด๋ถ€์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋ชจ๋‹ˆํ„ฐ๋ผ๊ณ  ํ•œ๋‹ค.

Semaphore vs. Mutex vs. Monitor

์•„์ง ์•ˆ๋๋‚ฌ์Šต๋‹ˆ๋‹ค... ์•„์ง ํ•œ๋ฐœ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค...

mutex vs. monitor

  • ๋ฎคํ…์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ ๊ฐ„์— ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋ชจ๋‹ˆํ„ฐ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ ๊ฐ„์— ๋™๊ธฐํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฎคํ…์Šค๋Š” ์šด์˜์ฒด์ œ ์ปค๋„์— ์˜ํ•ด ์ œ๊ณต๋œ๋‹ค.
    • kernel์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— system call์„ ์ด์šฉํ•จ. ๊ทธ๋ž˜์„œ ๋А๋ฆฌ๋‹ค.
  • ๋ชจ๋‹ˆํ„ฐ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ทธ ์ž์ฒด์—์„œ ์ œ๊ณต๋œ๋‹ค.
    • ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ user level์—์„œ ์ œ๊ณต๊ฐ€๋Šฅ, ๊ทธ๋ž˜์„œ ๋น ๋ฆ„

monitor vs. semaphore

  • ์ž๋ฐ”์—์„œ๋Š” ๋ชจ๋‹ˆํ„ฐ๋ฅผ ๋ชจ๋“  ๊ฐ์ฒด์—๊ฒŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜์ง€๋งŒ C์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ์„ธ๋งˆํฌ์–ด๋Š” ์นด์šดํ„ฐ๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ’์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ƒํ˜ธ๋ฐฐ์ œ๋‚˜ ์ •๋ ฌ์˜ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ ์‹œ ๋งค๋ฒˆ ๊ฐ’์„ ๋”ฐ๋กœ ์ง€์ •ํ•ด์ค˜์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋Ÿฌ์›€์ด ์žˆ๋‹ค.
  • ๋ฐ˜๋ฉด์— ๋ชจ๋‹ˆํ„ฐ๋Š” ์ด๋Ÿฌํ•œ ์ผ๋“ค์ด ์บก์Аํ™” ๋˜์–ด ์žˆ์–ด์„œ ๊ฐœ๋ฐœ์ž๋Š” ์นด์šดํ„ฐ ๊ฐ’์„ 0๋˜๋Š” 1๋กœ ์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ณ ๋ฏผ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์ด synchronized, wait(), notify() ๋“ฑ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ข€ ๋” ํŽธํ•˜๊ฒŒ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

semaphore vs. mutex

  • ์„ธ๋งˆํฌ์–ด๋Š” ๋ฎคํ…์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฎคํ…์Šค๋Š” ์„ธ๋งˆํฌ์–ด๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.
  • ์„ธ๋งˆํฌ์–ด๋Š” ์†Œ์œ ํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋ฎคํ…์Šค๋Š” ์†Œ์œ ํ•  ์ˆ˜ ์žˆ๊ณ  ์†Œ์œ ์ฃผ๊ฐ€ ๊ทธ ์ฑ…์ž„์„ ์ง„๋‹ค.(?)
  • ๋ฎคํ…์Šค์˜ ๊ฒฝ์šฐ ๋ฎคํ…์Šค๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์ด ๋ฎคํ…์Šค๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์„ธ๋งˆํฌ์–ด๋Š” ์†Œ์œ ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์„ธ๋งˆํฌ์–ด๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฎคํ…์Šค๋Š” ๋™๊ธฐํ™” ๋Œ€์ƒ์ด 1๊ฐœ ์ผ ๋•Œ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์„ธ๋งˆํฌ์–ด๋Š” ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. (ํ™”์žฅ์‹ค ์˜ˆ์ œ๋ฅผ ๋– ์˜ฌ๋ฆฌ์‹œ๋ฉด๋  ๊ฑฐ ๊ฐ™์•„์š”~)

*Misconception about mutex and semaphore

There is an ambiguity between binary semaphore and mutex. We might have come across that a mutex is a binary semaphore. But it is not! The purpose of mutex and semaphore are different. Maybe, due to similarity in their implementation a mutex would be referred to as a binary semaphore.

๋ฎคํ…์Šค์™€ ์„ธ๋งˆํฌ์–ด์— ๋Œ€ํ•ด์„œ ๋งŽ์ด ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์‚ฌ์ดํŠธ์—์„œ๋Š” "mutex๊ฐ€ binary semaphore์ด๋‹ค"๋ผ๋Š” ์„ค๋ช…์ด ์žˆ๋Š”๋ฐ geeks for geeks์—์„œ๋Š” ์ด๊ฒŒ ์ž˜๋ชป๋œ ๊ฑฐ๋ผ๊ณ  ํ•˜๋„ค์š”. ๋ฎคํ…์Šค์™€ ์„ธ๋งˆํฌ์–ด๋Š” ์•„์˜ˆ ๋‹ค๋ฅธ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ํ•™๊ต ์šด์˜์ฒด์ œ ๊ฐ•์˜์—์„œ๋„ ๊ต์ˆ˜๋‹˜์ด ๋‹ค๋ฅธ๊ฑฐ ๋ผ๊ณ  ๊ฐ•์กฐํ•˜์…จ๋˜ ๊ธฐ์–ต์ด ๋‚ฉ๋‹ˆ๋‹ค. ์—„๊ฒฉํžˆ ๋งํ•ด์„œ

Strictly speaking, a mutex is a locking mechanism used to synchronize access to a resource. Only one task (can be a thread or process based on OS abstraction) can acquire the mutex. It means there is ownership associated with a mutex, and only the owner can release the lock (mutex). geeks for geeks ๋ณธ๋ฌธ..

์—„๊ฒฉํžˆ ๋งํ•ด์„œ ๋ฎคํ…์Šค๋Š” locking ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ์จ ๊ณต์œ  ์ž์› ์ ‘๊ทผ์— ๋Œ€ํ•œ ๋™๊ธฐํ™”์— ์“ฐ์ž…๋‹ˆ๋‹ค. ๋‹จ ํ•˜๋‚˜์˜ ์—…๋ฌด ์ฆ‰ ๊ณต์œ  ์ž์› ์ ‘๊ทผ ๋™๊ธฐํ™”๋งŒ ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ฎคํ…์Šค๋Š” ์†Œ์œ ๊ถŒ์ด ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์†Œ์œ ์ž๋งŒ์ด lock์„ ๊ฑธ๊ณ  ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Semaphore is signaling mechanism (โ€œI am done, you can carry onโ€ kind of signal). For example, if you are listening to songs (assume it as one task) on your mobile phone and at the same time, your friend calls you, an interrupt is triggered upon which an interrupt service routine (ISR) signals the call processing task to wakeup.

์„ธ๋งˆํฌ์–ด๋Š” signaling ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์ œ๊ฐ€ ์Œ์•…์„ ๋“ฃ๊ณ  ๋™์‹œ์— ์นœ๊ตฌ์—๊ฒŒ ์ „ํ™”๋ฅผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด interrupt๊ฐ€ ๋ฐœ์ƒํ•ด service routine์„ ์œ ๋ฐœํ•ด ์Œ์•…์„ ๋ฉˆ์ถ”๊ณ  ์นœ๊ตฌ์™€ ํ†ตํ™”๋ฅผ ํ•˜๊ณ  ์ „ํ™”๋ฅผ ๋Š์œผ๋ฉด ๋‹ค์‹œ ์Œ์•… ์ŠคํŠธ๋ฆฌ๋ฐ ํ”„๋กœ๊ทธ๋žจ์— wakeup ์‹ ํ˜ธ๋ฅผ ์ค˜์„œ ์Œ์•…์ด ์ €์ ˆ๋กœ ์žฌ์ƒ๋˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

mutex์˜ ํ—ท๊ฐˆ๋ฆฌ๋Š” ์งˆ๋ฌธ

Q1. Binary semaphore์™€ mutex๋Š” ๊ฐ™์€๊ฐ€์š”?

-> ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๋‹ค๋ฅธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. signaling ๊ณผ locking ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์š”~.~

Q2. mutex๋Š” ๋‘ ๋ฒˆ ์ด์ƒ lock๋  ์ˆ˜ ์žˆ๋‚˜์š”?

-> ๋ฎคํ…์Šค๋Š” lock์ž…๋‹ˆ๋‹ค. ๋‹จ ํ•˜๋‚˜์˜ ์ƒํƒœ(lock/unlock)๊ณผ ์—ฐ๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์žฌ๊ท€์ ์ธ ๋ฎคํ…์Šค(POSIX)๋Š” ํ•œ ๋ฒˆ ์ด์ƒ ์ž ๊ธธ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฐ˜๋“œ์‹œ mutex๋ฅผ ์ž ๊ตฐ ํšŸ์ˆ˜๋งŒํผ unlockํ•˜๋„๋ก ์ œ์–ดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜

์œ„ ์ถœ์ฒ˜๋กœ ๊ฐ€์…”์„œ ํ•œ ๋ฒˆ ์ •๋…ํ•˜๋Š” ๊ฒƒ๋„ ๋‚˜์˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. :) ์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค.



๐Ÿ“š ์ฐธ๊ณ 

Critical Region

Process sync

Mutex&semaphore

Monitor,mutex,semaphore

Mutex vs. semaphore

mutex



โ‰๏ธ ๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

  1. Process๋ฅผ ๋™๊ธฐํ™” ํ•ด์•ผํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

1-1. ๋™๊ธฐํ™”๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ค ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋‚˜์š”?

  1. Race Condition์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

2-1. Race condition์€ ์–ธ์ œ ๋ฐœ์ƒํ•˜๋‚˜์š”?

  1. Critical Region์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

3-1. Critical region์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์„ธ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งํ•ด์ฃผ์„ธ์š”.

3-2. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์— ๋ฌด์—‡์ด ์žˆ๋‚˜์š”?

3-3. Semaphore, mutex, monitor์ด ๋ฌด์—‡์ธ๊ฐ€์š”? (๋‚ด์šฉ ์„ค๋ช…)

  1. Mutex vs. Semaphore vs. Monitor๋ฅผ ๋งํ•ด์ฃผ์„ธ์š”

4-1. Mutex vs. semaphore

4-2. semaphore vs. monitor

4-3. monitor vs. mutex