๐Ÿ“–ํ”„๋กœ์„ธ์Šค

๐Ÿ“–IPC(Inter Process Communication)

ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ํ–‰์œ„

๐Ÿ“–IPC์˜ ํ•„์š”์„ฑ

ํ”„๋กœ์„ธ์Šค๋Š” ์™„์ „ํžˆ ๋…๋ฆฝ๋œ ์‹คํ–‰ ๊ฐ์ฒด(์„œ๋กœ ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ฐ€์ง)์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์„ค๋น„ ์—†์ด๋Š” ์„œ๋กœ ๊ฐ„ ํ†ต์‹ ์ด ์–ด๋ ค์šด๋ฐ, ์ปค๋„ ์˜์—ญ์—์„œ ์ œ๊ณตํ•˜๋Š” IPC ์„ค๋น„๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ์Œ

ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ์ด ํ•„์š”ํ•  ๋•Œ๋Š”?

  1. ์ •๋ณด ๊ณต์œ (information sharing)
  2. ๊ณ„์‚ฐ ๊ฐ€์†ํ™”(computation speedup)
  3. ๋ชจ๋“ˆ์„ฑ(modularity)

๐Ÿ“–IPC Model ์ข…๋ฅ˜

๐Ÿ“Ž๋ฉ”์„ธ์ง€ ์ „๋‹ฌ ๋ชจ๋ธ(Message Passing model)

์ปค๋„ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ์„ ์œ„ํ•œ ์ฑ„๋„์„ ๋งŒ๋“ค์–ด์„œ ํ˜‘๋ ฅํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์— ๋ฉ”์„ธ์ง€ ํ˜•ํƒœ๋กœ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ์‹

  • ๋ฉ”์„ธ์ง€๋ฅผ ์ปค๋„์„ ๊ฒฝ์œ ํ•˜์—ฌ ์†ก/์ˆ˜์‹ ์ž๋ผ๋ฆฌ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ, ์ปค๋„์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋ง &nbsp โ†’ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ ์—†์ด ๋™์ž‘์ด ๊ฐ€๋Šฅ

์žฅ์ 

  • ์ปค๋„์—์„œ ๋ฐ์ดํ„ฐ์˜ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์„ ์ปจํŠธ๋กคํ•  ์ˆ˜ ์žˆ์–ด ๋ณ„๋„์˜ ๋™๊ธฐํ™” ๋กœ์ง์ด ํ•„์š” ์—†์Œ

๋‹จ์ 

  • ์ปค๋„์„ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— Shared Memory Model๋ณด๋‹ค ๋А๋ฆผ

๋ฐฉ์‹

1. Direct Communication

ํ†ต์‹ ํ•˜๋ ค๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ด๋ฆ„์„ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œํ•˜์—ฌ ๋ฉ”์„ธ์ง€๋ฅผ ์ง์ ‘ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹

  • ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋งํฌ๋Š” ์œ ์ผ
  • ๋Œ€๋ถ€๋ถ„ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๊ตฌ์„ฑ

2. Indirect Communication

mailbox(๋˜๋Š” port)๋ฅผ ํ†ตํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ๊ฐ„์ ‘ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹

  • port๋กœ ์ „์†ก๋งŒ ํ•˜๋ฉด ๋˜๊ธฐ์— ๋ณต์žกํ•œ Communication Link(๋‹ค:๋‹ค)๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

๋ฉ”์„ธ์ง€ ์ „๋‹ฌ ๋ชจ๋ธ ๊ตฌํ˜„ IPC

1. ํŒŒ์ดํ”„(Pipe)

ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ์ง์ ‘ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹

  • 1:1 ํ†ต์‹ 
  • Direct Communication
  • ํ•œ ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋™ (Half-duplex) (ํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐ๋งŒ ํ•˜๊ณ , ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ๋งŒ ํ•จ) &nbsp โ†’ ์–‘ ๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ๋Š” 2๊ฐœ์˜ ํŒŒ์ดํ”„ ํ•„์š”
  • ๋ณด๋‚ด์ง„ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ›์Œ (in-order)
  • ์šฉ๋Ÿ‰ ์ œํ•œ์ด ์žˆ์–ด ํŒŒ์ดํ”„๊ฐ€ ๊ฐ€๋“ ์ฐจ๋ฉด ์“ธ ์ˆ˜ ์—†์Œ

2. ๋ฉ”์„ธ์ง€ ํ

๊ณ ์ • ํฌ๊ธฐ์˜ ๋ฉ”์„ธ์ง€๋ฅผ ํ๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹

  • 1:N ํ†ต์‹  &nbsp โ†’ ๋™๊ธฐํ™” ํ•„์š”
  • ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅ (full-duplex)
  • ๋ฉ”์„ธ์ง€์˜ ํ˜•ํƒœ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์žˆ๋‹ค๋ฉด ํ์— ๋„ฃ์€ ํ›„ ๋‚˜์ค‘์— ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ &nbsp but, ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ด ์Œ“์ผ์ˆ˜๋ก ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์ด ํ•„์š” &nbsp &nbsp ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋‚˜์˜ค๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ
  • ๋ฐ์ดํ„ฐ์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Œ

3. ์†Œ์ผ“

๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ๊ฐ๊ฐ ์ž„์˜์˜ ํฌํŠธ๋ฅผ ์ •ํ•˜๊ณ  ํฌํŠธ ๋ฒˆํ˜ธ์„ ์ด์šฉํ•˜์—ฌ ํ†ต์‹ ํ•˜๋ ค๋Š” ์ƒ๋Œ€ ํ”„๋กœ์„ธ์Šค์˜ ์†Œ์ผ“์„ ์ฐพ์€ ํ›„ ํ•ด๋‹น ํฌํŠธ ๊ฐ„์˜ ๋Œ€ํ™”๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹

  • ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅ (full-duplex)
  • ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์„ ์ด์šฉํ•˜์—ฌ Client-Server ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ ํ†ต์‹ 
  • ์›๊ฒฉ์—์„œ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ๋•Œ ์‚ฌ์šฉ
  • ํฌํŠธ์˜ ๋„์›€์œผ๋กœ ํ”„๋กœ์„ธ์Šค์˜ ์œ„์น˜์— ๋…๋ฆฝ์ ์ด๊ณ  Machine Boundary์™€ ๊ด€๊ณ„๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— Local ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Remote๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๐Ÿ“Ž๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ (Shared Memory Model)

 ํ˜‘๋ ฅ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ์ผ๋ถ€๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ, ๊ณต์œ ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์”€์œผ๋กœ์จ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ํ˜•์‹

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ปค๋„์— ์š”์ฒญํ•˜๋ฉด ์ปค๋„์€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๊ณ , ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ผ๋„ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ

์žฅ์ 

  • ์ปค๋„์˜ ๊ด€์—ฌ ์—†์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— IPC ์†๋„๊ฐ€ ๊ฐ€์žฅ ๋น ๋ฆ„
  • ํ”„๋กœ๊ทธ๋žจ ๋ ˆ๋ฒจ์—์„œ ํ†ต์‹  ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ์ž์œ ๋กœ์šด ํ†ต์‹ ์ด ๊ฐ€๋Šฅ

๋‹จ์ 

  • ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ ๋ฐฉ์‹์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผํ•˜๋Š” ์‹œ์ ์„ ์•Œ ์ˆ˜ ์—†์Œ &nbsp โ†’ ๋ณ„๋„์˜ ๋™๊ธฐํ™” ๊ธฐ์ˆ ์ด ํ•„์š”
  • ๋™์‹œ์— ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์œ„์น˜๊ฐ€ ๋ฐœ์ƒ ๊ฐ€๋Šฅ &nbsp โ†’ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ Lock ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”

๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ ๊ตฌํ˜„ IPC

  • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ(Shared Memory)
  • POSIX: Portable OS interface (for UNIX)