๐Ÿ“š Study/์šด์˜์ฒด์ œ

๋ฐ์ดํ„ฐ ํ†ต์‹ ๊ณผ ๋™๊ธฐํ™” ๋ฌธ์ œ

์ ์ด 2022. 5. 25. 22:08
๋ฐ˜์‘ํ˜•

Multi process์—์„œ์˜ ๋ฐ์ดํ„ฐ ํ†ต์‹ 

์›์น™์ ์œผ๋กœ Process๋Š” ๋…๋ฆฝ์ ์ธ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค๋ฅธ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.
ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด, ์šด์˜์ฒด์ œ๋Š” Process ๊ฐ„์˜ ์ž์› ์ ‘๊ทผ์„ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ
ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ (Inter Process Communication) ์ œ๊ณตํ•œ๋‹ค.

 IPC (Inter Process Communication)

Process๊ฐ„์˜ ํ†ต์‹ ์„ ๋„์™€์ฃผ๋Š” ์šด์˜์ฒด์ œ์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜

์™ผ - ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ / ์˜ค - ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ

๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ (Shared Memory)

Process๋“ค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ์ผ๋ถ€๋ฅผ ๊ณต์œ 
  1. Process๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ Kernel์— ์š”์ฒญ
  2. Kernel์€ ํ•ด๋‹น process์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น
  3. ์ดํ›„, Kernel์˜ ๋„์›€์—†์ด Process๋“ค์ด ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ ‘๊ทผ

โœ… ์žฅ์ 

  • ์ปค๋„์˜ ๊ด€์—ฌ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— IPC ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

โŽ ๋‹จ์ 

  • ๋™์‹œ์— ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์— ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋ฉด ์ผ๊ด€์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ.
    -> ์ด์— ๋Œ€ํ•ด ์ปค๋„์ด ๊ด€์—ฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— process๋ผ๋ฆฌ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์— ๋Œ€ํ•œ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ

๐Ÿ“„ ์˜ˆ์‹œ: ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ, POSIX

๋ฉ”์„ธ์ง€ ์ „๋‹ฌ (Message passing)

send(message) / receive(message) ๋‘๊ฐ€์ง€ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ kernel system call์„ ํ†ตํ•œ ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ

โœ… ์žฅ์ 

  • ์ถฉ๋Œ์„ ํšŒํ”ผํ•  ํ•„์š”๊ฐ€ ์—†์Œ -> ์ ์€์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๋Š”๋ฐ ์œ ๋ฆฌ

โŽ ๋‹จ์ 

  • ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ ๋ณด๋‹ค ์†๋„๊ฐ€ ๋А๋ฆผ

๐Ÿ“„ ์˜ˆ์‹œ: Pipe, socket, message queue


๋™๊ธฐํ™” ๋ฌธ์ œ 

๋™๊ธฐํ™” ๋ฌธ์ œ

: ์—ฌ๋Ÿฌ thread๊ฐ€ ๋™์ผํ•œ ์ž์›์— ๋™์‹œ์— ์ ‘๊ทผํ•˜์—ฌ ์—‰๋šฑํ•œ ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๋ฌธ์ œ

ํ•ด๊ฒฐ๋ฒ•

Mutex

  • ๊ณต์œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” process / thread์˜ ์ˆ˜๋ฅผ 1๊ฐœ๋กœ ์ œํ•œ
  • ์ž„๊ณ„์˜์—ญ์„ ๋ณดํ˜ธํ•˜๊ณ , ๊ฒฝ์Ÿ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด mutex lock ์‚ฌ์šฉ

๐Ÿ’ก process / thread๋Š” ์ž„๊ณ„์˜์—ญ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ lock์„ ํš๋“ํ•ด์•ผ ํ•˜๊ณ , ์ž„๊ณ„๊ตฌ์—ญ์„ ๋น ์ ธ๋‚˜์˜ฌ ๋•Œ lock์„ ๋ฐ˜ํ™˜

acquire() // available = false;
// ์ž„๊ณ„์˜์—ญ ์‹คํ–‰
release() // available = true;

Semaphore

  • ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” process / thread์˜ ๊ฐœ์ˆ˜๋ฅผ 2๊ฐœ ์ด์ƒ์œผ๋กœ ์ง€์ •
  • S(์„ธ๋งˆํฌ): ๋™์‹œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ process / thread ๊ฐฏ์ˆ˜
    • S>0: ์ž„๊ณ„์˜์—ญ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • S==0: ์ž„๊ณ„์˜์—ญ์— ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
wait(S) // S--
// ์ž„๊ณ„์˜์—ญ ์‹คํ–‰
signal(S) // S++

๊ต์ฐฉ์ƒํƒœ(Deadlock)

๋‘˜ ์ด์ƒ์˜ thread๊ฐ€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ thread๊ฐ€ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์›์„ ์„œ๋กœ ๊ธฐ๋‹ค๋ฆด ๋•Œ, ๋ฌดํ•œ ๋Œ€๊ธฐ์— ๋น ์ง€๋Š” ์ƒํ™ฉ

์กฐ๊ฑด

  1. ์ƒํ˜ธ ๋ฐฐ์ œ: ๋™์‹œ์— ํ•œ thread๋งŒ ์ž์›์„ ์ ์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ
  2. ์ ์œ  ๋Œ€๊ธฐ: thread๊ฐ€ ์ž์›์„ ๋ณด์œ ํ•œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ thread๊ฐ€ ๋ณด์œ ํ•œ ์ž์›์„ ์ถ”๊ฐ€๋กœ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ
  3. ๋น„์„ ์ : ๋‹ค๋ฅธ thread๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ ์ž์›์„ ๊ฐ•์ œ๋กœ ์„ ์ ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ
  4. ์ˆœํ™˜ ๋Œ€๊ธฐ: ๋Œ€๊ธฐ ์ค‘์ธ thread๋“ค์ด ์ˆœํ™˜ ํ˜•ํƒœ๋กœ ์ž์›์„ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ

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

๊ธฐ๋ฒ• ์„ค๋ช… ๋น„๊ณ 
๋ฌด์‹œ deadlock ๋ฐœ์ƒ ํ™•๋ฅ ์ด ๋‚ฎ์€ ์‹œ์Šคํ…œ์—์„œ ์•„๋ฌด๋Ÿฐ ์กฐ์น˜๋„ ์ทจํ•˜์ง€ ์•Š๊ณ , deadlock์„ ๋ฌด์‹œํ•˜๋Š” ๋ฐฉ๋ฒ• - ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์—†์Œ
- ํ˜„๋Œ€ ์‹œ์Šคํ…œ์—์„œ๋Š” deadlock์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , ํ•ด๊ฒฐ ๋น„์šฉ์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์‹œ ๋ฐฉ๋ฒ•์ด ๋งŽ์ด ์‚ฌ์šฉ ๋จ
์˜ˆ๋ฐฉ ๊ต์ฐฉ ์ƒํƒœ์˜ 4๊ฐ€์ง€ ๋ฐœ์ƒ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๊ฐ€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ• - ์ˆœํ™˜ ๋Œ€๊ธฐ ์กฐ๊ฑด์ด ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š”๊ฒƒ์ด ํ˜„์‹ค์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ์˜ˆ๋ฐฉ ๊ธฐ๋ฒ•
- ์ž์› ์‚ฌ์šฉ์˜ ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ๋น„์šฉ์ด ํผ
ํšŒํ”ผ thread๊ฐ€ ์•ž์œผ๋กœ ์ž์›์„ ์–ด๋–ป๊ฒŒ ์š”์ฒญํ• ์ง€์— ๋Œ€ํ•ด ์ •๋ณด๋ฅผ ํ†ตํ•ด ์ˆœํ™˜ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ž์›์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ• - ์ž์›ํ• ๋‹น ๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์›์„ ํ• ๋‹น
ํƒ์ง€ - ํšŒ๋ณต ์‹œ์Šคํ…œ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด deadlock๋ฐœ์ƒ์„ ํƒ์ง€ํ•˜๊ณ , ์ด๋ฅผ ํšŒ๋ณตํ•˜๋Š” ๋ฐฉ๋ฒ• - ์ž์› ์‚ฌ์šฉ์˜ ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ๋น„์šฉ์ด ํผ
๋ฐ˜์‘ํ˜•