Process Synchronization - hochan222/Everything-in-JavaScript GitHub Wiki

๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ”๋กœ๊ฐ€๊ธฐ

ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”(Concurrency Control) ๋ฐ Deadlock

Race Condition

OS์—์„œ Race Condition์€ ์–ธ์ œ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€?

  • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋™์‹œ์— ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์ƒํ™ฉ

  • kernel ์ˆ˜ํ–‰ ์ค‘ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ

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

  • Multiprocessor์—์„œ shared memory๋‚ด์˜ kernel data

The Critical-Section Problem

  • n๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ
  • ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ code segment์—๋Š” ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ์ธ critical section์ด ์กด์žฌ
  • ๊ณต์œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ Critical Section์ด๋ผ๊ณ  ํ•œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์  ํ•ด๊ฒฐ๋ฒ•์˜ ์ถฉ์กฑ ์กฐ๊ฑด

  • Peterson's Algorithm
  • Busy Waiting(=spin lock)

Synchromization Hardware

  • Test_and_set(a)

Semaphores

  • integer variable
  • ์•„๋ž˜์˜ ๋‘๊ฐ€์ง€ atomic ์—ฐ์‚ฐ์— ์˜ํ•ด์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • p ์—ฐ์‚ฐ์€ ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋ฅผ ํš๋“ํ•˜๋Š” ๊ณผ์ •์ด๊ณ , v ์—ฐ์‚ฐ์€ ๋‹ค ์‚ฌ์šฉํ•˜๊ณ ๋‚˜์„œ ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

busy-wait vs block / wake up

Two type of semaphores

  • Counting semaphore
    • ๋„๋ฉ”์ธ์ด 0 ์ด์ƒ์ธ ์ž„์˜์˜ ์ •์ˆ˜๊ฐ’
    • ์ฃผ๋กœ resource counting์— ์‚ฌ์šฉ
  • Binary semaphore(=mutex)
    • 0 ๋˜๋Š” 1 ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” semaphore
    • ์ฃผ๋กœ mutual exclusion (lock/unlock)์— ์‚ฌ์šฉ

Deadlock and Starvation

  • Deadlock
    • ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ์ƒ๋Œ€๋ฐฉ์— ์˜ํ•ด ์ถฉ์กฑ๋  ์ˆ˜ ์žˆ๋Š” event๋ฅผ ๋ฌดํ•œํžˆ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ˜„์ƒ
  • Starvation
    • indefinite blocking ํ”„๋กœ์„ธ์Šค๊ฐ€ suspend๋œ ์ด์œ ์— ํ•ด๋‹นํ•˜๋Š” ์„ธ๋งˆํฌ์–ด ํ์—์„œ ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์—†๋Š” ํ˜„์ƒ

Classical Problems of Synchronization

  • Bounded-Buffer Problem (Producer-Consumer Problem)
  • Readers and Writers Problem
  • Dining-Philosophers Problem

Bounded-Buffer Problem (Producer-Consumer Problem)

Readers and Writers Problem

  • ํ•œ process๊ฐ€ DB์— write์ค‘์ผ ๋•Œ ๋‹ค๋ฅธ process๊ฐ€ ์ ‘๊ทผํ•˜๋ฉด ์•ˆ๋จ
  • read๋Š” ๋™์‹œ์— ์—ฌ๋Ÿฟ์ด ํ•ด๋„๋จ
  • solution
    • Writer๊ฐ€ DB์— ์ ‘๊ทผ ํ—ˆ๊ฐ€๋ฅผ ์•„์ง ์–ป์ง€ ๋ชปํ•œ ์ƒํƒœ์—์„œ๋Š” ๋ชจ๋“  ๋Œ€๊ธฐ์ค‘์ธ Reader๋“ค์„ ๋‹ค DB์— ์ ‘๊ทผํ•˜๊ฒŒ ํ•ด์ค€๋‹ค
    • Writer๋Š” ๋Œ€๊ธฐ์ค‘์ธ Reader๊ฐ€ ํ•˜๋‚˜๋„ ์—†์„ ๋•Œ DB์ ‘๊ทผ์ด ํ—ˆ์šฉ๋œ๋‹ค
    • ์ผ๋‹จ Writer๊ฐ€ DB์— ์ ‘๊ทผ ์ค‘์ด๋ฉด Reader๋“ค์€ ์ ‘๊ทผ์ด ๊ธˆ์ง€๋œ๋‹ค.
    • Writer๊ฐ€ DB์—์„œ ๋น ์ ธ๋‚˜๊ฐ€์•ผ๋งŒ Reader์˜ ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋œ๋‹ค.

Reader๊ฐ€ ๊ณ„์† ๋“ค์–ด์˜ค๋ฉด Starvation ๋ฐœ์ƒ๊ฐ€๋Šฅ.. Writer๊ฐ€ ๊ณ„์† ๋ชปํ•จ..

Dining-Philosophers Problem

  • Deadlock ๊ฐ€๋Šฅ์„ฑ์ด์žˆ๋‹ค.

  • ๋ชจ๋“  ์ฒ ํ•™์ž๊ฐ€ ๋™์‹œ์— ๋ฐฐ๊ฐ€ ๊ณ ํŒŒ์ ธ ์™ผ์ชฝ ์ “๊ฐ€๋ฝ์„ ์ง‘์–ด๋ฒ„๋ฆฐ ๊ฒฝ์šฐ

  • ํ•ด๊ฒฐ๋ฐฉ์•ˆ

    • 4๋ช…์˜ ์ฒ ํ•™์ž๋งŒ์ด ํ…Œ์ด๋ธ”์— ๋™์‹œ์— ์•‰์„ ์ˆ˜ ์žˆ๋„๋กํ•œ๋‹ค
    • ์ “๊ฐ€๋ฝ์„ ๋‘ ๊ฐœ ๋ชจ๋‘ ์ง‘์„ ์ˆ˜ ์žˆ์„ ๋•Œ์—๋งŒ ์ “๊ฐ€๋ฝ์„ ์ง‘์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค
    • ๋น„๋Œ€์นญ
      • ์ง์ˆ˜(ํ™€์ˆ˜) ์ฒ ํ•™์ž๋Š” ์™ผ์ชฝ(์˜ค๋ฅธ์ชฝ) ์ “๊ฐ€๋ฝ๋ถ€ํ„ฐ ์ง‘๋„๋ก

Monitor

  • ๋ชจ๋‹ˆํ„ฐ ๋‚ด์—์„œ๋Š” ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ํ™œ๋™๊ฐ€๋Šฅ
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋™๊ธฐํ™” ์ œ์•ฝ ์กฐ๊ฑด์„ ๋ช…์‹œ์ ์œผ๋กœ ์ฝ”๋”ฉํ•  ํ•„์š”์—†์Œ
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋‹ˆํ„ฐ ์•ˆ์—์„œ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด