์ฒด๋šฑ๋กœ๊ทธ

[์šด์˜์ฒด์ œ 3๊ธฐ] 4์ฃผ์ฐจ ์Šคํ„ฐ๋”” ์ •๋ฆฌ ๋ณธ๋ฌธ

CS/JSCODE

[์šด์˜์ฒด์ œ 3๊ธฐ] 4์ฃผ์ฐจ ์Šคํ„ฐ๋”” ์ •๋ฆฌ

sooyeoniya 2024. 1. 31. 01:12

Concurrency vs Parallelism

๐Ÿ”น๋ณ‘ํ–‰์„ฑ/๋™์‹œ์„ฑ (Concurrency)

๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ

  • ๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋…
  • ์‹ฑ๊ธ€ ์ฝ”์–ด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ
    • Time-sharing์„ ํ†ตํ•ด CPU๋ฅผ ๋‚˜๋ˆ„์–ด ์‚ฌ์šฉํ•จ์œผ๋กœ์„œ ๋™์‹œ์„ฑ ๊ตฌํ˜„
    • ๋ณ‘๋ ฌ์ด ์•„๋‹Œ ์ˆœ์ฐจ์ ์ธ ๋™์ž‘
    • CPU๊ฐ€ 1๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— context switching ๋ฐœ์ƒ
  • ๋ฉ€ํ‹ฐ ์ฝ”์–ด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ

๐Ÿ”น๋ณ‘๋ ฌ์„ฑ (Parallelism)

์‹ค์ œ๋กœ ๋™์‹œ์— ์ž‘์—…์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ

  • ๋ฌผ๋ฆฌ์ ์ธ ๊ฐœ๋…
  • ๋ฉ€ํ‹ฐ ์ฝ”์–ด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ
  • ๋ฐ์ดํ„ฐ ๋ณ‘๋ ฌ์„ฑ๊ณผ ์ž‘์—… ๋ณ‘๋ ฌ์„ฑ
    • ๋ฐ์ดํ„ฐ ๋ณ‘๋ ฌ์„ฑ: ๊ฐ™์€ ์ž‘์—…์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ธŒ ๋ฐ์ดํ„ฐ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ™์€ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌ
    • ์ž‘์—… ๋ณ‘๋ ฌ์„ฑ: ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌ

๐Ÿ”นํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”(Synchronization)

ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”๋ž€ ๋™์‹œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ์ž์›์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ œ์–ดํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ ๋ฐฉ๋ฒ•(IPC) ์ค‘ ํ•˜๋‚˜์ธ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ(Shared Memory) ๋ฐฉ์‹๊ณผ ๊ฐ™์ด ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ฃผ์†Œ๋ฅผ ๊ณต์œ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์ƒํ™ฉ์— ๊ผญ ํ•„์š”ํ•˜๋‹ค.

๊ทธ ์ด์œ ๋Š” ์•„๋ž˜ ๋‚ด์šฉ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค.

๐Ÿ”น์ž„๊ณ„ ์˜์—ญ(Critical Section)

์ž„๊ณ„ ์˜์—ญ์ด๋ž€ ๋‘˜ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ๊ณต์œ  ์ž์›์„ ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋ฎคํ…์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์‹œ์ด๋‹ค.

do {
      wait(mutex);   //์ž…์žฅ ๊ตฌ์—ญ(entry section)
      ์ž„๊ณ„ ๊ตฌ์—ญ(critical section)
      signal(mutex); //ํ‡ด์žฅ ๊ตฌ์—ญ(exit section)
      ๋‚˜๋จธ์ง€ ๊ตฌ์—ญ(remainder section)
} while (1);

๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์— ์ง„์ž…ํ•˜๋ ค๋ฉด ์ง„์ž… ํ—ˆ๊ฐ€๋ฅผ ์š”์ฒญํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์„ ์ž…์žฅ ๊ตฌ์—ญ(entry section)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ž„๊ณ„ ์˜์—ญ์—์„œ ํ•„์š”ํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ์ž„๊ณ„ ์˜์—ญ์„ ๋‚˜์˜ค๋ฉด, ์ž„๊ณ„ ์˜์—ญ์„ ํ‡ด์žฅํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๋Š” ์ฝ”๋“œ์ธ ํ‡ด์žฅ ๊ตฌ์—ญ(exit section)์ด ์žˆ๋‹ค.

 

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ๊ตฌ์—ญ์— ๋™์‹œ์— ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋ฉด ๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition)๊ฐ€ ๋˜์–ด ์ž์›์˜ ์ผ๊ด€์„ฑ์ด ๊นจ์ง„๋‹ค.

๐Ÿ”น๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition)

๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition)๋ž€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์„ ๋ณ‘ํ–‰์ (Concurrently)์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ˆœ์„œ๋‚˜ ์ž…๋ ฅ ๋˜๋Š” ์กฐ์ž‘ ํƒ€์ด๋ฐ์— ๋”ฐ๋ผ ์‹คํ–‰ ๊ฒฐ๊ด๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋Š” ํ˜„์ƒ์„ ๋งํ•œ๋‹ค.

 

๐Ÿคจ ๊ฒฝ์Ÿ ์ƒํƒœ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋‚˜?

๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition)์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒํ˜ธ ๋ฐฐ์ œ(Mutual Exclusion)๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๐Ÿ”น์ƒํ˜ธ ๋ฐฐ์ œ(Mutual Exclusion)

์ƒํ˜ธ ๋ฐฐ์ œ(Mutual Exclusion)๋ž€ ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ž„๊ณ„ ์˜์—ญ(Critical Section)์— ์ง„์ž…ํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๊ทธ ์ž์›์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰์œผ๋ฉด ๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition) ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿฅธ ์ƒํ˜ธ ๋ฐฐ์ œ ๊ธฐ๋ณธ ์—ฐ์‚ฐ (Mutual Exclusion Primitive)

โ–ช๏ธ enterCS() primitive

  • ์ž„๊ณ„ ์˜์—ญ ์ง„์ž… ์ „ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ ์•ˆ์— ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ
  • ์ž„๊ณ„ ์˜์—ญ์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ๋น„์–ด ์žˆ์„ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ

โ–ช๏ธ exitCS() primitive

  • ์ž„๊ณ„ ์˜์—ญ์„ ๋ฒ—์–ด๋‚  ๋•Œ ํ›„์ฒ˜๋ฆฌ ๊ณผ์ •
  • ์ž„๊ณ„ ์˜์—ญ์„ ๋ฒ—์–ด๋‚ฌ์Œ์„ ํ‘œ์‹œ

๐Ÿ˜Ž ์ƒํ˜ธ ๋ฐฐ์ œ ๊ตฌํ˜„ ์กฐ๊ฑด

1. Mutual Exclusion (์ƒํ˜ธ ๋ฐฐ์ œ)

  • ์ž„๊ณ„ ์˜์—ญ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ง„์ž… ๊ธˆ์ง€

2. Progress (์ง„ํ–‰)

  • ์ž„๊ณ„ ์˜์—ญ์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์ž„๊ณ„ ์˜์—ญ ์ง„์ž… ๊ฐ€๋Šฅ

3. Bounded waiting (์œ ํ•œ/ํ•œ์ • ๋Œ€๊ธฐ)

  • ํ”„๋กœ์„ธ์Šค์˜ ์ž„๊ณ„ ์˜์—ญ ์ง„์ž…์€ ์œ ํ•œํ•œ ์‹œ๊ฐ„ ๋‚ด์— ํ—ˆ์šฉ๋˜์–ด์•ผ ํ•จ
  • ๊ธฐ์•„ ์ƒํƒœ(Starvation) ๋ฐฉ์ง€: ๋ฌดํ•œ ๋Œ€๊ธฐ ๊ธˆ์ง€

๐Ÿค“ ์ƒํ˜ธ ๋ฐฐ์ œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™” ๋ฐฉ์‹์€ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ฎคํ…์Šค(Mutex), ์„ธ๋งˆํฌ์–ด(Semaphore)๊ฐ€ ์žˆ๋‹ค.

๐Ÿ”น๋ฎคํ…์Šค(Mutex)

๋ฎคํ…์Šค(Mutex)๋Š” ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™” ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋กœ ๋‘ ๊ฐ€์ง€ ์—ฐ์‚ฐ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, Locking ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ lock์„ ๊ฑด ์Šค๋ ˆ๋“œ๋งŒ ์ž„๊ณ„ ์˜์—ญ์„ ๋‚˜๊ฐˆ ๋•Œ ์œ ์ผํ•˜๊ฒŒ unlock ํ•  ์ˆ˜ ์žˆ๋‹ค.

lock: ํ˜„์žฌ ์ž„๊ณ„ ์˜์—ญ์— ๋“ค์–ด๊ฐˆ ๊ถŒํ•œ์„ ๋ถ€์—ฌ ๋ฐ›๋Š”๋‹ค. ๋งŒ์ผ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์„ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค.(entry section)

unlock: ๋Œ€๊ธฐ ์ค‘์ธ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ž„๊ณ„ ์˜์—ญ์„ ์ง„์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ˜„์žฌ ์ž„๊ณ„ ์˜์—ญ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ–ˆ์Œ์„ ์•Œ๋ ค์ค€๋‹ค.(exit section)

๋‹ค์Œ์€ ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•œ ์ƒํ˜ธ ๋ฐฐ์ œ ๊ตฌํ˜„ ์˜ˆ์‹œ ์ฝ”๋“œ์ด๋‹ค.

do {
      wait(mutex);   //์ž…์žฅ ๊ตฌ์—ญ(entry section)
      ์ž„๊ณ„ ๊ตฌ์—ญ(critical section)
      signal(mutex); //ํ‡ด์žฅ ๊ตฌ์—ญ(exit section)
      ๋‚˜๋จธ์ง€ ๊ตฌ์—ญ(remainder section)
} while (1);

๐Ÿ”น์„ธ๋งˆํฌ์–ด(Semaphore)

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

์„ธ๋งˆํฌ์–ด ์ข…๋ฅ˜

โ–ช๏ธ Binary semaphore (์ด์ง„)

  • S๊ฐ€ 0๊ณผ 1 ๋‘ ์ข…๋ฅ˜์˜ ๊ฐ’๋งŒ ๊ฐ–๋Š” ๊ฒฝ์šฐ
  • ์ƒํ˜ธ ๋ฐฐ์ œ๋‚˜ ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™” ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ
  • ์ด๋Š” ๋ฎคํ…์Šค๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

โ–ช๏ธ Counting semaphore (์นด์šดํ„ฐ)

  • S๊ฐ€ 0 ์ด์ƒ์˜ ์ •์ˆ˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
  • ์ƒ์‚ฐ์ž-์†Œ๋น„์ž(Producer-Consumer) ๋ฌธ์ œ ๋“ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

์„ธ๋งˆํฌ์–ด ์—ฐ์‚ฐ

์„ธ๋งˆํฌ์–ด๋Š” ํฌ๊ฒŒ ์ดˆ๊ธฐํ™” ์—ฐ์‚ฐ S์™€ P(), V() ์—ฐ์‚ฐ์ด ์žˆ๋‹ค.

๋ชจ๋“  ์—ฐ์‚ฐ์€ Atomic ์—ฐ์‚ฐ์ด๋‹ค. ์ฆ‰, ์—ฐ์‚ฐ์ด ์™„์ „ํžˆ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ์ „ํ˜€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

โ–ช๏ธ S - ์„ธ๋งˆํฌ์–ด ๊ฐ’

โ–ช๏ธ P() or wait() ์ค‘์š”ํ•œ ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ ๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ P() ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด ์ž ๊ธˆ ๊ธฐ๋Šฅ ์ˆ˜ํ–‰

โ–ช๏ธ V() or signal() - ์ฒ˜๋ฆฌ๋ฅผ ๋งˆ์น˜๋ฉด V() ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด ์ž ๊ธˆ ํ•ด์ œ

/* P(S) or wait(S) ์—ฐ์‚ฐ */
P(S) { /* ์ž ๊ธˆ */
   if (S > 0)
      then S <- S - 1; // ์ž์› ํš๋“
      else wait on the queue Qs;
}

Critical Section Code /* ์ž„๊ณ„ ์˜์—ญ */

/* V(S) or signal(S) ์—ฐ์‚ฐ */
V(S) { /* ์ž ๊ธˆ ํ•ด์ œ */
   if (∃ waiting processes on Qs)
      then wakeup one of them;
      else S <- S + 1; // ์ž์› ํ•ด์ œ
}

 

์Šคํ•€๋ฝ(Spinlock)์„ ์ด์šฉํ•œ ์„ธ๋งˆํฌ์–ด ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ฒฝ์šฐ์—๋Š” ์Šคํ•€๋ฝ์˜ ํŠน์„ฑ์ƒ Busy waiting ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

*. Busy waiting(๋ฐ”์œ ๋Œ€๊ธฐ): ์ž„๊ณ„ ์˜์—ญ์—์„œ ์ž‘์—… ์ค‘์ธ ์Šค๋ ˆ๋“œ B๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” A๋Š” ์ž„๊ณ„ ์˜์—ญ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์•„๋ฌด๋Ÿฐ ์ž‘์—…์„ ํ•˜์ง€ ์•Š๊ณ  ์ž„๊ณ„ ์˜์—ญ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ์ง€ ๋ฌดํ•œ ๊ฒ€์‚ฌ๋งŒ ํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ

wait(S) {
  while (S <= 0);  // ์ž์›์ด ์—†๋‹ค๋ฉด while ๋ฃจํ”„๋ฅผ ๋Œ๋ฉฐ ๋Œ€๊ธฐ๋ฅผ ํ•จ.
  S--;  // ์ž์›์„ ํš๋“ํ•จ.
}

signal(S) {
  S++;  // ์ž์›์„ ํ•ด์ œํ•จ.
}

๐Ÿ”น๋ฎคํ…์Šค vs ์„ธ๋งˆํฌ์–ด

์ฒซ ๋ฒˆ์งธ ์ฐจ์ด์  : ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ ์ˆ˜

์„ธ๋งˆํฌ์–ด: ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ๋งŒ ๋“ค์–ด๊ฐ€๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜๋„ ์žˆ๋‹ค. 

๋ฎคํ…์Šค: locking ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ์˜ ์ ‘๊ทผ์„ ๋ง‰๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  ์˜ค์ง ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ๋งŒ์ด ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‘ ๋ฒˆ์งธ ์ฐจ์ด์  : ์นด์šดํŒ… ์ˆ˜

๋ฎคํ…์Šค: ๋ณดํ†ต 0 ๋˜๋Š” 1์˜ ์ด์ง„ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋ฉฐ, lock/unlock ์ƒํƒœ๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ด์ง„ ์„ธ๋งˆํฌ์–ด(Binary semaphore)๋Š” ๋ฎคํ…์Šค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์„ธ๋งˆํฌ์–ด: ๋ณดํ†ต 0 ์ด์ƒ์˜ ์ •์ˆ˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, ํ—ˆ์šฉ๋˜๋Š” ๋™์‹œ ์ ‘๊ทผ ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

์„ธ ๋ฒˆ์งธ ์ฐจ์ด์ : ์†Œ์œ ๊ถŒ

๋ฎคํ…์Šค: lock์„ ๊ฑด ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค์‹œ lock์„ ํ•ด์ œํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•ด๋‹น ๋ฎคํ…์Šค๋ฅผ ์–ป์„ ์ˆ˜ ์—†๋‹ค. 

์„ธ๋งˆํฌ์–ด: ์†Œ์œ  ๊ฐœ๋…์ด ์—†๋‹ค. ์–ด๋–ค ์Šค๋ ˆ๋“œ๋“ ์ง€ ์„ธ๋งˆํฌ์–ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”น๋ชจ๋‹ˆํ„ฐ(Monitor)

์„ธ๋งˆํฌ์–ด๋Š”๋‚˜ ๋ฎคํ…์Šค๋Š” ์ž˜๋ชป ์‚ฌ์šฉํ•˜์˜€์„ ๊ฒฝ์šฐ timing error๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

timing error๋Š” ์ฃผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.

1. P()์™€ V() ์—ฐ์‚ฐ์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๊ฒฝ์šฐ

2. P()๋‚˜ V() ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋ˆ„๋ฝ์ด ๋˜์—ˆ์„ ๊ฒฝ์šฐ

 

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ high-level mechanism ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ชจ๋‹ˆํ„ฐ(Monitor)์ด๋‹ค.

๋ชจ๋‹ˆํ„ฐ(Monitor)๋ž€ ์ƒํ˜ธ ๋ฐฐ์ œ์™€ ์กฐ๊ฑด๋ถ€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๋™๊ธฐํ™” ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๋ชจ๋‹ˆํ„ฐ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ผ๋ถ€๋กœ์„œ, ๊ณ ๊ธ‰ ์–ธ์–ด์—์„œ ์ œ๊ณต๋˜๋Š” ์ถ”์ƒํ™”๋œ ๋™๊ธฐํ™” ๊ฐœ๋…์ด๋‹ค.

 

๋ชจ๋‹ˆํ„ฐ ํŠน์ง•

1. ๋ชจ๋‹ˆํ„ฐ์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ Information hiding(์ •๋ณด ์€ํ)์ด๋‹ค. ์ด ์˜๋ฏธ๋Š” ๊ณต์œ  ๋ฐ์ดํ„ฐ(shared data)๋Š” ์˜ค์ง ๋ชจ๋‹ˆํ„ฐ ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๋“ค๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

2. ๋˜ ๋‹ค๋ฅธ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ํ•œ ์‹œ์ ์—์„œ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.


๋ชจ๋‹ˆํ„ฐ์— ๋Œ€ํ•œ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•ด์„œ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

๐Ÿ–ฅ๏ธ ๋ชจ๋‹ˆํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ

โ–ช๏ธ Mutual Exclusion Queue /  Entry Queue (์ƒํ˜ธ ๋ฐฐ์ œ ํ, ์ง„์ž… ํ) : ๋ชจ๋‹ˆํ„ฐ์— ์ง„์ž…ํ•˜๋ ค๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์˜ ํ

โ–ช๏ธ Shared Resource / Shared data (๊ณต์œ  ์ž์› / ๊ณต์œ  ๋ฐ์ดํ„ฐ) : ๋ชจ๋‹ˆํ„ฐ ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ๊ณต์œ  ์ž์›, ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

โ–ช๏ธ Procedure (ํ”„๋กœ์‹œ์ €) : ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ ‘๊ทผ ํ•จ์ˆ˜, ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ”„๋กœ์‹œ์ €๋ฅผ ์‚ฌ์šฉํ•ด ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ ‘๊ทผ ๋ถˆ๊ฐ€

โ–ช๏ธ Initialization code (์ดˆ๊ธฐํ™” ์ฝ”๋“œ) : ๊ณต์œ  ์ž์›์„ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋Š” ์ฝ”๋“œ

โ–ช๏ธ Condition variable (์กฐ๊ฑด ๋ณ€์ˆ˜) : ๋ชจ๋‹ˆํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋™๊ธฐํ™” ๋ณ€์ˆ˜๋กœ, wait()๊ณผ signal() ์—ฐ์‚ฐ์— ์˜ํ•ด์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

 

์•„๋ž˜ ์˜ˆ์ œ์™€ ๊ฐ™์ด monitor ๋ธ”๋ก ๋‚ด๋ถ€์— ์„ ์–ธ๋œ ํ•จ์ˆ˜๋“ค์€ ๋ชจ๋‘ ๋™๊ธฐํ™” ๋œ๋‹ค.

monitor {
    function p1(..){}
    function p2(..){}
    function p3(..){}
}

 

์ด๋•Œ ๋ชจ๋‹ˆํ„ฐ ์ž์ฒด์ ์œผ๋กœ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌํ•˜๊ธฐ๋Š” ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด ๋ณ€์ˆ˜(Condition Variable)๋ฅผ ์ •์˜ํ•˜์—ฌ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์กฐ๊ฑด ๋ณ€์ˆ˜(Condition Variable)๋„ ๋ชจ๋‹ˆํ„ฐ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

condition x y; // ์กฐ๊ฑด ๋ณ€์ˆ˜ ์„ ์–ธ
x.wait();
y.signal();

 

์ด๋•Œ ์กฐ๊ฑด ๋ณ€์ˆ˜(Condition Variable) ๋ณ„๋กœ ๋Œ€๊ธฐ ํ(waiting queue)๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ๋™๊ธฐํ™”๊ฐ€ ๋œ๋‹ค.

 

x.wait()

- ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กฐ๊ฑด x์—์„œ ๋Œ€๊ธฐํ•ด์•ผ ํ•  ๋•Œ ํ˜ธ์ถœ

- ํ˜ธ์ถœํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์กฐ๊ฑด x์™€ ๊ด€๋ จ๋œ ๋Œ€๊ธฐ ํ(waiting queue)์—์„œ ์ผ์‹œ ์ค‘์ง€(block)

 

y.signal()

- ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กฐ๊ฑด y์˜ ๋ณ€ํ™”๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ

- y.wait()์— ์˜ํ•ด ์ค‘์ง€๋˜์–ด ์žˆ๋˜ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์„ ๋‹ค์‹œ ์žฌ๊ฐœ

- ์กฐ๊ฑด y์—์„œ ์ค‘์ง€๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ: ์ด ์ค‘ ํ•˜๋‚˜ ์„ ํƒ

- ์กฐ๊ฑด y์—์„œ ์ค‘์ง€๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์„ ๊ฒฝ์šฐ: ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Œ

- ์ผ์‹œ ์ค‘์ง€๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žฌ๊ฐœ๋˜๋ฉด, signal์„ ๋ณด๋‚ธ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ˜๋“œ์‹œ wait์„ ํ•ด์•ผ ํ•จ

๐Ÿ”น๊ต์ฐฉ ์ƒํƒœ(Deadlock)

๊ต์ฐฉ ์ƒํƒœ(Deadlock)๋ž€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ ์ƒ๋Œ€๋ฐฉ์ด ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์–ด์„œ ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

starvation๊ณผ deadlock ๋ฐœ์ƒ ์ง€์ 

๐Ÿ“Œ ๊ต์ฐฉ ์ƒํƒœ ๋ฐœ์ƒ ํ•„์š” ์กฐ๊ฑด

์•„๋ž˜ 4๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•  ๊ฒฝ์šฐ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

1. Exclusive use of resources (๋ฐฐํƒ€์  ์‚ฌ์šฉ)

  • ํ•œ ์ˆœ๊ฐ„์— ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž์›

2. Non-preemptible resources (๋น„์„ ์  ์ž์›)

  • ์„ ์  ๋‹นํ•˜๋ฉด ์ดํ›„ ์ง„ํ–‰์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ž์›
  • ์„ ์ ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ž์›

3. Hold and wait(Partial allocation) (์ ์œ  ๋Œ€๊ธฐ, ๋ถ€๋ถ„ ์ž์› ํ• ๋‹น)

  • ํ•˜๋‚˜์˜ ์ž์›์„ ์ ์œ (hold)ํ•œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ž์›์„ ๋Œ€๊ธฐ(wait)

4. Circular wait (์›ํ˜• ๋Œ€๊ธฐ)

  • ์ž์‹ ์˜ ์ž์›์€ ๋ณด์œ ํ•œ ์ฑ„๋กœ ์„œ๋กœ ์ƒ๋Œ€๋ฐฉ ์ž์›์„ ์š”์ฒญํ•  ๋•Œ ์›ํ˜• ์‚ฌ์ดํด์ด ์ƒ๊ธฐ๋Š” ํ˜„์ƒ

๐Ÿ“Œ ๊ต์ฐฉ ์ƒํƒœ ๋ง‰๋Š” ๋ฐฉ๋ฒ•

1. Deadlock prevention (์˜ˆ๋ฐฉ)

4๊ฐœ์˜ ๊ต์ฐฉ ์ƒํƒœ ๋ฐœ์ƒ ํ•„์š” ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋œ๋‹ค.

์ด ๋ฐฉ๋ฒ•์€ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ์ ˆ๋Œ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • Exclusive use of resources ์กฐ๊ฑด ์ œ๊ฑฐ
    • ๋ชจ๋“  ์ž์› ๊ณต์œ ๋ฅผ ํ—ˆ์šฉ
    • ํ˜„์‹ค์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅ
  • Non-preemptible resources ์กฐ๊ฑด ์ œ๊ฑฐ
    • ๋ชจ๋“  ์ž์›์— ๋Œ€ํ•ด ์„ ์  ํ—ˆ์šฉ
    • ํ˜„์‹ค์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅ
  • Hold and wait ์กฐ๊ฑด ์ œ๊ฑฐ
    • ํ•„์š” ์ž์› ํ•œ ๋ฒˆ์— ๋ชจ๋‘ ํ• ๋‹น (Total allocation)
    • ์ž์› ๋‚ญ๋น„ ๋ฐœ์ƒ → ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ˆœ๊ฐ„์—๋„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
    • ๋ฌดํ•œ ๋Œ€๊ธฐ ํ˜„์ƒ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • Circular wait ์กฐ๊ฑด ์ œ๊ฑฐ
    • Totally allocation์„ ์ผ๋ฐ˜ํ™”ํ•œ ๋ฐฉ์‹
    • ์ž์›๋“ค์—๊ฒŒ ์ˆœ์„œ ๋ถ€์—ฌ
    • ํ”„๋กœ์„ธ์Šค๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ž์› ์š”์ฒญ ๊ฐ€๋Šฅ → ์ž์› ๋‚ญ๋น„ ๋ฐœ์ƒ

2. Deadlock avoidance (ํšŒํ”ผ)

Deadlock avoidance๋Š” ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ๊ณ„์† ๊ฐ์‹œํ•˜๋ฉด์„œ deadlock ์ƒํƒœ๊ฐ€ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์ž์› ํ• ๋‹น ์š”์ฒญ์„ ๋ณด๋ฅ˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์ฆ‰, ์‹œ์Šคํ…œ์„ ํ•ญ์ƒ safe state๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

โ–ช๏ธ safe state: ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ, deadlock ์ƒํƒœ๊ฐ€ ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ๋ณด์žฅ

โ–ช๏ธ unsafe state: deadlock ์ƒํƒœ๊ฐ€ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ, ๋ฐ˜๋“œ์‹œ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹˜

 

Deadlock avoidance ๊ฐ€์ •

- ํ”„๋กœ์„ธ์Šค ์ˆ˜๊ฐ€ ๊ณ ์ •๋จ

- ์ž์›์˜ ์ข…๋ฅ˜์™€ ์ˆ˜๊ฐ€ ๊ณ ์ •๋จ

- ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ž์› ๋ฐ ์ตœ๋Œ€ ์ˆ˜๋Ÿ‰์„ ์•Œ๊ณ  ์žˆ์Œ

- ํ”„๋กœ์„ธ์Šค๋Š” ์ž์› ์‚ฌ์šฉ ํ›„ ๋ฐ˜๋“œ์‹œ ๋ฐ˜๋‚ฉ

 

๋Œ€ํ‘œ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • Dijkstra's algorithm - Banker's algorithm
  • Habermann's algorithm

์ž์› ์š”์ฒญ์— ๋Œ€ํ•œ safe state์„ ํ™•์ธํ•˜๊ณ  ์•ˆ์ „ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ž์›์„ ํ• ๋‹นํ•œ๋‹ค.

์ฆ‰, safe sequence(์•ˆ์ „ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ž์› ํ• ๋‹น ์ˆœ์„œ)๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ• ๋‹นํ•œ๋‹ค.

 

3. Deadlock detection and deadlock recovery (ํƒ์ง€ ๋ฐ ๋ณต๊ตฌ)

Deadlock์„ ํƒ์ง€ํ•˜๊ณ , deadlock์ธ ๊ฒฝ์šฐ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •

 

Deadlock detection

- Deadlock ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ์‚ฌ์ „ ์ž‘์—…์„ ํ•˜์ง€ ์•Š์Œ (Deadlock ๋ฐœ์ƒ ๊ฐ€๋Šฅ)

- ์ฃผ๊ธฐ์ ์œผ๋กœ deadlock ๋ฐœ์ƒ ํ™•์ธ

  • ์‹œ์Šคํ…œ์ด deadlock ์ƒํƒœ์ธ๊ฐ€?
  • ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ deadlock ์ƒํƒœ์ธ๊ฐ€?

- Resource Allocation Graph (RAG) ์‚ฌ์šฉํ•˜์—ฌ deadlock ํƒ์ง€

  • ์ฃผ์–ด์ง„ RAG์—์„œ ๊ฐ„์„ (edge)๋ฅผ ํ•˜๋‚˜์”ฉ ์ง€์›Œ๊ฐ€๋Š” ๋ฐฉ๋ฒ•
  • ๋ชจ๋“  ๊ฐ„์„ ์ด ์ œ๊ฑฐ๋  ๊ฒฝ์šฐ deadlock์— ๋น ์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋Š” ๊ฒƒ
  • ์ง€์šธ ์ˆ˜ ์—†๋Š” ๊ฐ„์„ ์ด ์กด์žฌํ•˜๋ฉด ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ deadlock ์ƒํƒœ

Deadlock recovery

- Process termination(ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ): Deadlock ์ƒํƒœ์ธ ํ”„๋กœ์„ธ์Šค ์ค‘ ์ผ๋ถ€ ์ข…๋ฃŒ

- Resource preemption(์ž์› ์„ ์ )

  • Deadlock ์ƒํƒœ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์„ ์ ํ•  ์ž์› ์„ ํƒ
  • ํ•ด๋‹น ์ž์›์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒ์‹œํ‚ด
    • Deadlock ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ์ˆ˜๋„ ์žˆ์Œ
    • ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋Š” ์ดํ›„ ์žฌ์‹œ์ž‘๋จ

 

๋‚ด ๋ธ”๋กœ๊ทธ: [์šด์˜์ฒด์ œ 3๊ธฐ] 2์ฃผ์ฐจ ์Šคํ„ฐ๋”” ์ •๋ฆฌ

https://nesoy.github.io/articles/2018-09/OS-Concurrency-Parallelism

https://memostack.tistory.com/49

https://www.robotstory.co.kr/raspberry/?vid=149

https://ko.wikipedia.org/wiki/%EC%9E%84%EA%B3%84_%EA%B5%AC%EC%97%AD

https://ko.wikipedia.org/wiki/%EA%B2%BD%EC%9F%81_%EC%83%81%ED%83%9C

https://iredays.tistory.com/125

https://yoongrammer.tistory.com/63

https://www.baeldung.com/cs/concurrency-vs-parallelism

https://yoongrammer.tistory.com/60

https://benlee73.tistory.com/11

https://velog.io/@octo__/%EB%AE%A4%ED%85%8D%EC%8A%A4Mutex

https://hpckoreatech.notion.site/Operating-System-CSE132-2023-b8aa98fe69cc4a8cb950051a04bc35ca

https://velog.io/@moonheekim0118/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%AA%A8%EB%8B%88%ED%84%B0-Monitor

https://yonghwankim-dev.tistory.com/323

https://hyunah-home.tistory.com/entry/Monitor%EB%9E%80

https://coding-gongbu.tistory.com/47

https://blog.naver.com/kgr2626/222118655167

https://velog.io/@holim0/6.-%EA%B5%90%EC%B0%A9-%EC%83%81%ED%83%9CDeadlock

 

Comments