[CS] IPC(Inter Process Communication)

โ˜‘๏ธ Process๋Š” ์™„์ „ํžˆ ๋…๋ฆฝ๋œ ์‹คํ–‰๊ฐ์ฒด

→ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€์•Š๋Š”๋‹ค๋Š” ์žฅ์ 

→ but, ๋…๋ฆฝ๋˜์–ด์žˆ๋Š” ๋งŒํผ ๋ณ„๋„์˜ ์„ค๋น„๊ฐ€ ์—†์ด๋Š” ์„œ๋กœ๊ฐ„์— ํ†ต์‹ ์ด ์–ด๋ ต๋‹ค๋Š” ๋ฌธ์ œ

โ˜‘๏ธ ์ปค๋„ ์˜์—ญ์—์„œ IPC๋ผ๋Š” ๋‚ด๋ถ€ ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ ์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ์Œ

 

IPC์˜ ์ข…๋ฅ˜

โ˜‘๏ธ PIPE(ํŒŒ์ดํ”„)

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

โ˜‘๏ธ Named PIPE

  • ํ†ต์‹ ์„ ํ•  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • ์ „ํ˜€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ํ†ต์‹ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • ํ”„๋กœ์„ธ์Šค๊ฐ„์— ํ†ต์‹ ์„ ์œ„ํ•ด ์ด๋ฆ„์ด ์žˆ๋Š” ํŒŒ์ผ์„ ๋งค๊ฐœ์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ „ํ˜€ ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ํ†ต์‹ ์ด ๊ฐ€๋Šฅ
  • mkfifo๋ฅผ ํ†ตํ•ด Named PIPE๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ, mkfifo๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด ์ด๋ฆ„์ด ๋ช…๋ช…๋œ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ  ์ด๋ฅผ ํ™œ์šฉํ•ด์„œ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง
    • โœ… ์žฅ์ 
      • ๊ธฐ๋ณธPIPE์™€ ๋น„์Šท
    • โœ… ๋‹จ์ 
      • ์ฝ๊ธฐ/์“ฐ๊ธฐ๊ฐ€ ๋™์‹œ์— ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Œ. (๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  : read-only or write-only)
      • ๊ทธ์™ธ → ๊ธฐ๋ณธ PIPE์™€ ๋น„์Šท

โ˜‘๏ธ Message Queue (๋ฉ”์‹œ์ง€ ํ)

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

โ˜‘๏ธ Shared Memory (๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ)

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

โ˜‘๏ธ Memory Map (๋ฉ”๋ชจ๋ฆฌ ๋งต)

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

โ˜‘๏ธ Socket (์†Œ์ผ“)

  • ๊ฐ™์€ ๋„๋ฉ”์ธ ๋‚ด์—์„œ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๊ณ , ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ
  • ์„œ๋ฒ„๋‹จ์—์„œ๋Š” bind, listen, accept๋ฅผ ์ง„ํ–‰ํ•ด ์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ์ค€๋น„๋ฅผ ํ•จ
  • ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ๋Š” connect์„ ํ†ตํ•ด ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ๋œ ํ›„์—๋Š” socket์— sendํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์Œ
  • ์—ฐ๊ฒฐ์ด ๋๋‚˜๋ฉด ๋ฐ˜๋“œ์‹œ close()๋กœ clear ํ•จ
  • ์ฆ‰, ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ„์— ํ†ต์‹ ์„ ์ง„ํ–‰ํ•จ
    • โœ… ์žฅ์ 
      • ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ์šฉ์ด
      • Internet Socket์ธ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Unix Domain ์†Œ์ผ“์€ PIPE์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ง€๊ณ  ๊ฐ™์€ ์‹œ์Šคํ…œ์—์„œ ๊ตํ™˜์ด ์ผ์–ด๋‚˜๋ฏ€๋กœ ํŒจํ‚ท์ด ์œ ์‹ค๋˜๊ฑฐ๋‚˜, ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๋“ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ ์žฅ๋‹ดํ•  ์ˆ˜ ์žˆ์Œ
      • ๋ฒ”์šฉ์ ์ธ IPC๋กœ์จ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•จ
      • ํŒจํ‚ท ๋‹จ์œ„๋กœ ์ฃผ๊ณ  ๋ฐ›์Œ์œผ๋กœ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
    • โœ… ๋‹จ์ 
      • Internet UDP์™€๋Š” ๋‹ฌ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†์Œ (๋‹ค์ค‘์˜ ํด๋ฆฌ์–ธํŠธ๋ฅผ ๋ฐ›์•„๋“ค์ด๋Š” ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ)

'CS > OS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[CS] ๋ฐ๋“œ๋ฝ  (0) 2024.02.06
[CS] CPU ์Šค์ผ€์ค„๋ง  (0) 2024.02.06
[CS] PCB & Context Switching  (0) 2024.02.01
[CS] ์‹œ์Šคํ…œ ์ฝœ(System Call)  (0) 2024.02.01
[CS] ์ธํ„ฐ๋ŸฝํŠธ (Interrupt)  (0) 2023.11.29