IPC๋ž€?

ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
์ด์ฒ˜๋Ÿผ ๋…๋ฆฝ์ ์ธ ๊ณต๊ฐ„์„ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•์ด IPC ํ†ต์‹ ์ด๋‹ค.
ํ”„๋กœ์„ธ์Šค๋Š” ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” IPC ์„ค๋น„๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

  • IPC = Inter-Process Communication
  • ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์— ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ–‰์œ„

  • ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋ชจ๋‘ ์œ ์ €๊ณต๊ฐ„(user-space, user-mode)์—์„œ ๊ฐœ๋ณ„๋กœ OS๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์€ ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์—์„œ ์šดํ–‰์ค‘์— ์žˆ๋‹ค
  • ๋งํ•œ๊ฒƒ ์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์—์„œ ์šดํ–‰ํ•˜๋‹ค๋ณด๋‹ˆ ์„œ๋กœ๊ฐ„์— ํ†ต์‹ ์ด ์–ด๋ ต๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ์ปค๋„ ์˜์—ญ(kernel-space, kernel-mode)์—์„œ IPC(Inter-Process Communication)๋ผ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ๊ฐ„์— ํ†ต์‹ ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค
  • ์ด์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” IPC ๊ธฐ์ˆ ์„ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ„์— ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

 

 

 

 

 

IPC์˜ ์ข…๋ฅ˜


PIPE (ํŒŒ์ดํ”„)

  • ํŒŒ์ดํ”„๋Š” ๋‘ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐ๋งŒ ํ•˜๊ณ , ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ๋งŒ ํ•œ๋‹ค
  • ๋ถ€๋ชจ ์ž์‹ ๊ฐ„์— ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค
  • ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ PIPE์˜ ํŠน์ง• ๋•Œ๋ฌธ์— Half-Duplex(๋ฐ˜์ด์ค‘) ํ†ต์‹  ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค
  • PIPE๋Š” ๋ฐ˜์ด์ค‘ ํ†ต์‹ ์ด๊ธฐ์— ํ•˜๋‚˜์˜ ํ†ต์‹ ์„ ๋กœ๋Š” ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ค‘ ํ•˜๋‚˜๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋งŒ์•ฝ ์ฝ๊ธฐ/์“ฐ๊ธฐ, ์ฆ‰ ์†ก/์ˆ˜์‹ ์„ ๋ชจ๋‘ ํ•˜๊ธฐ ์›ํ•œ๋‹ค๋ฉด ๋‘ ๊ฐœ์˜ ํŒŒ์ดํ”„๋ฅผ ๋งŒ๋“ค์–ด์•ผ ๊ฐ€๋Šฅํ•˜๋‹ค
  • read()์™€ write()๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ block mode๋กœ ์ž‘๋™๋˜๊ธฐ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ read ๋Œ€๊ธฐ์ค‘์ด๋ผ๋ฉด read๊ฐ€ ๋๋‚˜๊ธฐ์ „์—๋Š” write๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค

์žฅ์ 

  • PIPE๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ํ•œ์ชฝ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹จ์ง€ ์ฝ๊ธฐ๋งŒํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹จ์ง€ ์“ฐ๊ธฐ๋งŒ ํ•˜๋Š” ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ์ ํ•ฉ

๋‹จ์ 

  • Full-Duplex(์ „์ด์ค‘) ํ†ต์‹  ๋ฐฉ์‹์œผ๋กœ ํ™œ์šฉํ•˜๋ ค๋ฉด PIPE๋ฅผ ๋‘๊ฐœ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ, ๊ตฌํ˜„์ด ๊ฝค๋‚˜ ๋ณต์žกํ•ด ์งˆ ์ˆ˜ ์žˆ๋‹ค (๊ตณ์ด ์ „์ด์ค‘์„ ํ™œ์šฉํ•ด์•ผํ•œ๋‹ค๋ฉด PIPE๋ง๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š”๊ฒŒ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค)
  • buffer๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘๊ธฐ๋•Œ๋ฌธ์— overflow ๋  ํ™•๋ฅ ์ด ๋†’๋‹ค (read์ฒ˜๋ฆฌ๋ฅผ ๋นจ๋ฆฌ๋นจ๋ฆฌ ํ•ด์ค˜์•ผํ•œ๋‹ค)
  • ๋ถ€๋ชจ ์ž์‹ ๊ด€๊ณ„์˜ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ๊ฐ€๋Šฅ

 

 

 

Named PIPE (์ต๋ช… ํŒŒ์ดํ”„)

  • Linux๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํŒŒ์ผ(fd)๋กœ ํ†ตํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฐœ๋…์„ ๊ธฐ์–ตํ•˜๊ณ  ๋ณด์ž
  • Named PIPE๋Š” ํ†ต์‹ ์„ ํ•  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • ๋ณดํ†ต PIPE๋Š” ๋ถ€๋ชจ์ž์‹๊ฐ„์— ์‚ฌ์šฉํ•˜๊ณ  Named PIPE๋Š” ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ํ†ต์‹ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • Named PIPE๋Š” ๋ถ€๋ชจํ”„๋กœ์„ธ์Šค์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ „ํ˜€ ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ์ด์œ ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„์— ํ†ต์‹ ์„ ์œ„ํ•ด ์ด๋ฆ„์ด ์žˆ๋Š” ํŒŒ์ผ์„ ๋งค๊ฐœ์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ
  • mkfifo๋ฅผ ํ†ตํ•ด Named PIPE๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ, mkfifo๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด ์ด๋ฆ„์ด ๋ช…๋ช…๋œ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ  ์ด๋ฅผ ํ™œ์šฉํ•ด์„œ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง

์žฅ์ 

  • ๊ธฐ๋ณธ PIPE์™€ ๋น„์Šท

๋‹จ์ 

  • ์ฝ๊ธฐ/์“ฐ๊ธฐ๊ฐ€ ๋™์‹œ์— ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Œ, ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ , read-only or write-only
  • ๊ธฐ๋ณธ PIPE์™€ ๋น„์Šท
PIPE ์™€ Named PIPE

๊ณตํ†ต์ 
๋จผ์ € ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ์ „๋‹ฌ๋˜๋Š” ํ๋ฆ„์„ ๊ฐ€์ง„๋‹ค๋Š” ์ธก๋ฉด์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐ€์ง„๋‹ค

์ฐจ์ด์ 
Named PIPE๋Š” ์‚ฌ์šฉํ•  PIPE๋ฅผ ๋ช…๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ 
PIPE๋Š” ์‚ฌ์šฉํ•  PIPE๋ฅผ ๋ช…๋ช…ํ•  ์ˆ˜ ์—†๋‹ค
(๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— PIPE๋Š” ์ต๋ช… PIPE๋ผ ๋ถ€๋ฅธ๋‹ค)


์ถ”๊ฐ€ ์„ค๋ช…
์ต๋ช… ํŒŒ์ดํ”„(PIPE)๋Š” ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ
์†ก์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋Š” ์ˆ˜์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ์•Œ๊ณ , ์ˆ˜์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋Š” ์†ก์‹ ํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ์•„๋Š” ๊ฒฝ์šฐ
๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๊ฐ€ ๋ถ€๋ชจํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ํ”„๋กœ์„ธ์Šค๊ฐ„์— ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•˜๊ณ ์ž ํ•  ๋•Œ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ๋ฅผ ๋ช…ํ™•ํžˆ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ตณ์ด ํŒŒ์ดํ”„์— ์ด๋ฆ„์„ ์ค„ ํ•„์š”๊ฐ€ ์—†์„ ๊ฒƒ์ด๋‹ค

๋ฐ˜๋ฉด, ์ž์‹๊ณผ ๋ถ€๋ชจ ๊ด€๊ณ„๊ฐ€ ์•„๋‹Œ ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ pipe๋ฅผ ์ด์šฉํ•ด์„œ ํ†ต์‹ ์„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ƒํŒ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๊ณผ ๋Œ€ํ™”๋ฅผ ํ•˜๋ ค๋ฉด ์ด๋ฆ„์„ ์•Œ์•„์•ผ ํ•˜๋“ฏ pipe์— ์ด๋ฆ„์„ ์ฃผ์–ด์ ธ์•ผ ํ•œ๋‹ค, ๊ทธ๊ฒƒ์ด Named PIPE๋ฅผ ๋งŒ๋“  ์ด์œ ์ด๋‹ค

 

 

 

 

Message Queue (๋ฉ”์‹œ์ง€ ํ)

  • FIFO(First-In First-Out, ์„ ์ž…์„ ์ถœ) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ํ†ต์‹ ์„ค๋น„๋กœ ์ปค๋„์—์„œ ๊ด€๋ฆฌ
  • ์ž…์ถœ๋ ฅ ๋ฐฉ์‹์œผ๋กœ๋ณด๋ฉด ์œ„์— Named PIPE์™€ ๋™์ผํ•˜๋‹ค ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์ฐจ์ด์ ์ด๋ผ๋ฉด, Named PIPE๋Š” ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ด๋ผ๋ฉด Message Queue๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋ผ๋Š” ์ 
  • ์–ด๋””์„œ๋‚˜ ๋ฌผ๊ฑด์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ฒจํŠธ์™€ ๊ฐ™๋‹ค ๋ณด๋ฉด ๋œ๋‹ค
  • Message Queue์— ์“ธ ๋ฐ์ดํ„ฐ์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™ํž˜์œผ๋กœ์จ ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™ใ…‡์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค

์žฅ์ 

  • ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๊ธฐ์— ๋ฐฉ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ์žˆ๋‹ค๋ฉด ํ์— ๋„ฃ์€ ํ›„ ๋‚˜์ค‘์— ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ  ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค
  • ๋ถ„์‚ฐ์ฒ˜๋ฆฌ ๋ฐ ๊ฒฝ์Ÿ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
  • (๋น„๋™๊ธฐ, ๋น„๋™์กฐ, ํƒ„๋ ฅ์„ฑ, ๊ณผ์ž‰, ํ™•์žฅ์„ฑ์ด ์žˆ๋Š”๋ฐ ์ด๊ฑด ๋‹ค๋ฅธ ํฌ์ŠคํŠธ ์ฐธ์กฐํ•ด๋„ ์ถฉ๋ถ„ํ•  ๊ฑฐ ๊ฐ™๋‹ค)

๋‹จ์ 

  • ๋ฉ”์‹œ์ง€๊ฐ€ ์ •๋ง ์ž˜ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค
  • ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋‚˜์˜ค๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ด ์Œ“์ผ์ˆ˜๋ก ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์ด ํ•„์š”ํ•˜๋‹ค

 

 

 

 

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

  • ๋ฐ์ดํ„ฐ ๊ณต์œ  ๋ฐฉ๋ฒ•์—๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ,
  1. ํ†ต์‹ ์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ๋ฒ• (ex. PIPE, Named PIPE, Message Queue, ...)
  2. ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ , ์ฆ‰ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ (ex. Shared Memory, ...)
    • ์ฆ‰, ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ๊ณต์œ ํ•˜๋„๋ก ์ง€์›ํ•˜๋Š” ์„ค๋น„์ด๋‹ค
    • Shared Memory(๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ)๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉ
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ปค๋„์— ์š”์ฒญํ•˜๋ฉด ์ปค๋„์€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด ์ฃผ๊ฒŒ๋˜๊ณ , ์ดํ›„ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฑด ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค
    ์žฅ์ 
    • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ค‘๊ฐœ์ž ์—†์ด ๊ณง๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  IPC์ค‘์—์„œ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•œ๋‹ค
    • (๋‹ค์‹œ๋งํ•ด, ์ปค๋„๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ)
    ๋‹จ์ 
    • ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๋ฐฉ์‹์ด ์•„๋‹ˆ๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผํ•˜๋Š” ์‹œ์ ์„ ์•Œ ์ˆ˜ ์—†๋‹ค
    • ์ปค๋„ ์„ค์ •์— ์ข…์†์ ์ด๊ธฐ์— ์‚ฌ์šฉํ•˜๊ธฐ์ „์— ์ปค๋„์—์„œ ํ—ˆ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค

 

 

 

Semaphore (์„ธ๋งˆํฌ์–ด)

  • PIPE, Named PIPE, Message Queue์™€ ๊ฐ™์€ ๋‹ค๋ฅธ IPC ์„ค๋น„๋“ค์ด ๋Œ€๋ถ€๋ถ„ ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š”๋ฐ ๋ฐ˜ํ•ด,
  • Semaphore๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ๋ณดํ˜ธํ•˜๋Š”๋ฐ ๊ทธ ๋ชฉ์ ์ด ์žˆ๋‹ค
  • ํ”„๋กœ์„ธ์Šค๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „์†ก์„ ํ•˜๊ฑฐ๋‚˜ ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๊ณต์œ ๋œ ์ž์›์— ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ ๋‹จ์ง€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š”๊ฒƒ์ด ์„ธ๋งˆํฌ์–ด(Semaphore) ์ด๋‹ค
  • ์ฆ‰, ์šด์˜ ์ฒด๊ณ„ ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ๋‚ด์—์„œ ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์ ‘์†์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์‹ ํ˜ธ
  • ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋™์•ˆ์— ์„ธ๋งˆํฌ์–ด๋ฅผ ์„ธ์›Œ์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ€๊ธฐ์‹œํ‚ค๊ณ  ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด ํ•ด์ œ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ
๋ฎคํ…์Šค Mutex ์„ธ๋งˆํฌ์–ด Semaphore
๊ณต์œ ๋œ ์ž์›์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ ๊ณต์œ ๋œ ์ž์›์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ
์ƒํƒœ๊ฐ€ 0, 1 ๋‘๊ฐœ (์ด์ง„ ์„ธ๋งˆํฌ์–ด) ์„ธ๋งˆํฌ์–ด๋Š” ๋ฎคํ…์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค
๋ฎคํ…์Šค ์†Œ์œ  ์ค‘์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฎคํ…์Šค๋ฅผ ํ•ด์ œ ์„ธ๋งˆํฌ์–ด๋ฅผ ์†Œ์œ ํ•˜์ง€ ์•Š๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์„ธ๋งˆํฌ์–ด ํ•ด์ œ
ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์ข…๋ฃŒ ๋  ๋•Œ, ์ž๋™ Clean ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์˜ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์กด์žฌ
๋™๊ธฐํ™” ๋Œ€์ƒ์ด ์˜ค์ง ํ•˜๋‚˜์ผ ๋•Œ ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ํ•˜๋‚˜ ์ด์ƒ์ผ ๋•Œ
(ํ•œ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด, ํ™”์žฅ์‹ค์— ๊ฐ”์„๋•Œ ํ™”์žฅ์‹ค ์นธ์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ํ™”์žฅ์‹ค ํ•œ ์นธ์— ๋Œ€ํ•ด ๊ด€๋ฆฌ๋ฅผ ํ•˜๋Š”๊ฒƒ์ด ๋ฎคํ…์Šค์ด๊ณ  ํ™”์žฅ์‹ค ์ž์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๊ฒŒ ์„ธ๋งˆํฌ์–ด๊ฐ€ ๋œ๋‹ค)

์žฅ์ 

  • ๋งŽ์€ Thread๋“ค์€ ํฌ๋ฆฌํ‹ฐ์ปฌ ์„น์…˜์„ ํ—ˆ๋ฝ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์ฆ‰, ํฌ๋ฆฌํ‹ฐ์ปฌ ์„น์…˜์—์„œ ์ถฉ๋Œ์ด ๋‚˜์ง€ ์•Š๋Š”๋‹ค

๋‹จ์ 

  • ๋งŽ์€ Thread๋“ค์€ block์„ ๋‹นํ•œ๋‹ค. ์ฆ‰, CPU๊ฐ€ ๊ฐ€๋งŒํžˆ waitingํ•˜๋Š” ์‹œ๊ฐ„ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

 

 

Memory Map (๋ฉ”๋ชจ๋ฆฌ ๋งต)

๋ฉ”๋ชจ๋ฆฌ ๋งต๋„ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•œ๋‹ค๋Š” ์ธก๋ฉด์—์„œ๋Š” ๋น„์Šทํ•˜๋‹ค

    • ์ฐจ์ด์ ์€ ๋ฉ”๋ชจ๋ฆฌ ๋งต์€ ์—ด๋ฆฐ ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋งตํ•‘์‹œ์ผœ์„œ ๊ณต์œ ํ•œ๋‹ค๋Š” ์ 
    • ํŒŒ์ผ(fd)๋Š” ๋ฆฌ๋ˆ…์Šค์˜ ์‹œ์Šคํ…œ์˜ ์ „์—ญ์ ์ธ ์ž์›์ด๋ฏ€๋กœ ์ฆ‰, ๋ชจ๋‘ ๊ณต์œ ํ• ์ˆ˜ ์žˆ๋Š” ์ž์›์ด๋ฏ€๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Œ์„ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค
    ์žฅ์ 
    • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ด๋ฏธ ์˜ฌ๋ผ์™€์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค
    • ์ผ๋ฐ˜์ ์ธ ํŒŒ์ผ IO์— ๋น„ํ•ด ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค€๋‹ค
    • ๋น„๋™๊ธฐ IO๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ ๋ฌธ์ œ๋ฅผ ๊ฑฑ์ •ํ•  ํ•„์š” ์—†๋‹ค
    ๋‹จ์ 
    • ์ผ๋ฐ˜ ํŒŒ์ผ IO์— ๋น„ํ•ด ์ƒ๋‹นํžˆ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”๊ตฌ
    • ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ผ๋งˆ๋‚˜ ์˜ค๋žซ๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ์— ๋‘˜ ๊ฒƒ์ธ์ง€ ์ปจํŠธ๋กคํ•  ์ˆ˜ ์—†๋‹ค

 

 

 

 

 

Socket (์†Œ์ผ“, UDS = Unix Domain Socket)

  • ๊ฐ™์€ ๋„๋ฉ”์ธ ๋‚ด์—์„œ ์—ฐ๊ฒฐ ๋  ์ˆ˜ ์žˆ๊ณ  ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค
  • ์„œ๋ฒ„๋‹จ์—์„œ๋Š” bind, listen, accept ์ง„ํ–‰ํ•ด ์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ์ค€๋น„๋ฅผ ํ•œ๋‹ค
  • ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ๋Š” connect์„ ํ†ตํ•ด ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ ๋œ ํ›„์—์„œ๋Š” socket์— send ํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค.
  • ์—ฐ๊ฒฐ์ด ๋๋‚˜๋ฉด ๋ฐ˜๋“œ์‹œ close()๋กœ clear ํ•œ๋‹ค
  • ์ฆ‰, ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ„์— ํ†ต์‹ ์„ ์ง„ํ–‰ํ•œ๋‹ค

์žฅ์ 

  • ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ์šฉ์ดํ•˜๋‹ค
  • Internet Socket์ธ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Unix Domain์†Œ์ผ“์€ PIPE์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ง€๊ณ  ๊ฐ™์€ ์‹œ์Šคํ…œ์—์„œ ๊ตํ™˜์ด ์ผ์–ด๋‚˜๋ฏ€๋กœ ํŒจํ‚ท์ด ์œ ์‹ค๋˜๊ฑฐ๋‚˜, ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๋“ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„๊ฑฐ๋ผ ์žฅ๋‹ด ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋ฒ”์šฉ์ ์ธ IPC๋กœ์จ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
  • ํŒจํ‚ท ๋‹จ์œ„๋กœ ์ฃผ๊ณ  ๋ฐ›์Œ์œผ๋กœ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

๋‹จ์ 

  • Internet UDP์™€๋Š” ๋‹ฌ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค (๋‹ค์ค‘์˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ฐ›์•„๋“ค์ด๋Š” ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค)

 

 

 

 

 

 

 


References.

 

link1 link2

 

 

+ Recent posts