System V IPC ¼Ò°³
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
  • ³Ê¹« ¿À·¡µÈ ¹®¼­´Ù ¼öÁ¤À» ÇØ¾ß ÇÒ °Í °°´Ù. - 2010/1/29
ÇϳªÇϳªÀÇ ÇÁ·Î±×·¥Àº ±×ÀÚü¸¦ °´Ã¼¶ó°í ÇÒ¼ö ÀÖ´Ù. ±×·± Àǹ̿¡¼­ º¸ÀÚ¸é, Unix ½Ã½ºÅÛÀº ¼ö¸¹Àº °´Ã¼°¡ ¸ð¿©¼­ ¿î¿µµÇ´Â ½Ã½ºÅÛÀ̶ó°í ¸»ÇÒ¼ö ÀÖÀ» °ÍÀÌ´Ù. °³°³ÀÇ Àΰ£ÀÌ °´Ã¼·Î Âü¿©Çϰí ÀÖ´Â Àΰ£»çȸ¿¡¼­ ±× »çȸ¸¦ À¯ÁöÇϱâ À§Çؼ­ °¡Àå ÇʼöÀûÀÎ°Ô ¹Ù·Î "»ç¶÷°ú »ç¶÷»çÀÌÀÇ Åë½Å"ÀÌ´Ù. Àΰ£ÀÌ ´Ù¸¥ µ¿¹°µé°ú ´Þ¸® À¯±âÀûÀ̰í ü°èÀûÀÎ Áö±ÝÀÇ »çȸ¸¦ À¯ÁöÇÒ¼ö ÀÖ´Â°Ç "Åë½Å"¿¡ ÈûÀÔÀº ¹Ù°¡ Å©´Ù°í ÇϰڴÙ.

Unix ½Ã½ºÅÛµµ ¸¶Âù°¡ÁöÀÌ´Ù. ¼ö¸¹Àº °´Ã¼·Î ÀÌ·ç¾îÁø Unix ½Ã½ºÅÛÀÌ ¿øÇÒÈ÷ ÀÛµ¿ Çϱâ À§Çؼ­´Â °¢ °´Ã¼°£ÀÇ ¿øÇÒÇÑ "Åë½Å"ÀÌ ÇʼöÀûÀÌ´Ù. ¾î¶²°´Ã¼(ÀÌÇÏ ÇÁ·Î¼¼½º) °¡ ÆÄÀÏÀ» ¿­±â À§Çؼ­´Â ÀÏ·ÃÀÇ ÀÛ¾÷À» À§Çؼ­ Ä¿³Î°ú Åë½ÅÀ» ÇØ¾ßÇÒ°ÍÀÌ´Ù. ¶ÇÇÑ Æ¯Á¤ ÇÁ·Î¼¼½º°¡ °¡Áö´Â µ¥ÀÌŸ¸¦ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡°Ô ³Ñ°Ü¼­ À̸¦ ó¸®Çϵµ·Ï ÇÏ´Â ÀÛ¾÷µµ ÇÊ¿äÇÒ°ÍÀ̸ç, µ¿ÀÏÇÑ µ¥ÀÌŸ¸¦ ¸î°³ÀÇ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ Á¢±ÙÇØ¾ßµÉ Çʿ䰡 ÀÖÀ»°ÍÀÌ´Ù.
ÀÌ·¯ÇÑ µ¥ÀÌŸ Åë½ÅÀ» À§Çؼ­ Unix ¿¡¼­´Â IPC ¶ó´Â ³»ºÎ ÇÁ·Î¼¼½º°£ Åë½ÅÀ» À§ÇÑ µµ±¸¸¦ Á¸ÀçÇÑ´Ù. (¿ÜºÎ ÇÁ·Î¼¼½º¸¦ À§ÇÑ Åë½ÅÀ» À§Çؼ­´Â ¼ÒÄÏÀ» ÁÖ·Î »ç¿ëÇÑ´Ù)
IPC ¿¡¼­ ´ëÇ¥ÀûÀ¸·Î Á¦°øÇÏ´Â ¼³ºñÀÇ ÇüÅ´ Pipe, FIFO, message queue, semaphore, shared memory, ±×¸®°í ÆÄÀϱâ¹Ý¼ÒÄÏ(AF_UNIX) µîÀÌ ÀÖ´Ù. À̵é IPC ¼³ºñ´Â ¾ÆÁ÷±îÁö Ç¥ÁØÈ­µÇÁö ¾ÊÀº Ãø¸éÀÌ À־, ¾î¶² UNIX ½Ã½ºÅÛ¿¡¼­´Â Áö¿øÇÏÁö¸¸ ´Ù¸¥ UNIX ½Ã½ºÅÛ¿¡¼­´Â Áö¿øÇÏÁö ¾Ê´Â °ÍµéÀÌ ¸¹À¸¸ç, ¸ðµç ½Ã½ºÅÛ¿¡ °øÅëÀûÀ¸·Î Áö¿øÇϴ°ÍÀº Pipe Á¤µµ°¡ À¯ÀÏÇÏ´Ù. À̹ø¹®¼­¿¡¼­´Â È¥µ¿À» ¸·±â À§Çؼ­ Linux ½Ã½ºÅÛÀ» ±âÁØÀ¸·Î IPC ¿¡ ´ëÇØ¼­ ¼³¸íÇϵµ·Ï ÇϰڴÙ.

pipe
pipe ´Â ¸ðµç À¯´Ð½º¿¡¼­ Áö¿øµÇ´Â °ÅÀÇ À¯ÀÏÇÑ ipc ¼³ºñÀ̸ç, °¡Àå Ç¥ÁØ¿¡ °¡±î¿ì¸ç, ¶ÇÇÑ °¡Àå¿À·¡µÈ ipc ÀÇ ÇüÅÂÀÌ´Ù.
À¯´Ð½º »ç¿ëÀÚ´Â °ÅÀÇ ¸ÅÀÏ pipe ¸¦ »ç¿ëÇÑ´Ù°í º¼¼ö ÀÖ´Ù. ¾Æ·¡¸¦ º¸¶ó.
ÆÄÀÌÇÁÀÇ ½ÇÁ¦ »ç¿ë¿¹¸¦ µé¾îº¸¾Ò´Ù.
[yundream@localhost test]# ls -al | less
....
[yundream@localhost test]# ps -aux | grep httpd | grep -v grep
...
[yundream@localhost test]# echo "hello world" | wc -w
..
À§ÀÇ ¿¹Á¦¸¦ º¸¸é ¾Ë°ÚÁö¸¸ pipe ´Â ÇÑ ÇÁ·Î¼¼½ºÀÇ µ¥ÀÌŸ¸¦ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡°Ô ³Ñ±â±â À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëµÈ´Ù. µ¥ÀÌŸ´Â ÇÑÂʹæÇâÀ¸·Î¸¸ È带¼ö ÀÖÀ¸¸ç(Àаųª ¾µ¼ö¸¸ ÀÖ°í, µ¿½Ã¿¡ ÀÐ°í ¾²±â¸¦ ÇÒ¼ö´Â ¾ø´Ù.- Read only or Write only), µ¿ÀÏÇÑ ºÎ¸ð¸¦(PPID°¡ °°Àº) °¡Áö´Â process »çÀÌ¿¡¼­¸¸ »ç¿ëÀ̰¡´É Çϴٴ Ư¡ÀÌ ÀÖ´Ù. ÀÌ·¯ÇÑ Æ¯Â¡Àº ´ÜÁ¡À¸·Î ÀÛ¿ëÇϴµ¥, ÀÌ·¯ÇÑ ´ÜÁ¡À» ÇØ°áÇÑ pipe ¿Í À¯»çÇÑ ´Ù¸¥ ¼³ºñ¿¡ ´ëÇØ¼­µµ À̹®¼­ ÈĹݿ¡ ´Ù·çµµ·Ï ÇϰڴÙ. ±×¸® º¹ÀâÇÏÁö ¾ÊÀº ½Ã½ºÅÛ¿¡¼­ ÇѹæÇâÀ¸·Î µ¥ÀÌŸ¸¦ º¸³»°íÀÚ ÇÒ¶§ °£´ÜÇÏ°Ô »ç¿ëÇÒ¼ö ÀÖ´Â ¼³ºñÀÌ´Ù.

message queue(¸Þ½ÃÁö Å¥) queue ´Â ÀڷᱸÁ¶ÀÇ ÇÑÁ¾·ùÀε¥, ¸ÕÀú µé¾î¿ÂÀÚ·á°¡ ¸ÕÀú ³ª°¡´Â ±¸Á¶·Î½á, stack °ú´Â ¹Ý´ëµÇ´Â °³³äÀÌ´Ù. ÀºÇà ⱸ ȤÀº, ±ØÀå Æ¼ÄÏ ²÷±â¸¦ »ý°¢Çϸé ÀÌÇØ°¡ ½¬¿ï°ÍÀÌ´Ù.
¸Þ½ÃÁö Å¥ ´Â À§¿¡¼­ ¼³¸íÇÑ°Í °ú °°ÀºÀÏÀ» Çϴµ¥, ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¡¹Ö¿¡¼­ ¾²À̴ ť°¡ ³»ºÎ ÀڷᱸÁ¶¸¦ À§ÇѰÍÀ̶ó°í Çϸé, ¸Þ½ÃÁö Å¥´Â ¼­·Î ´Ù¸¥ ÇÁ·Î¼¼½ºµé°£ÀÇ ÀÚ·á Àü´ÞÀ» À§ÇÑ °ÍÀÌ ´Ù¸¥Á¡ÀÌ´Ù.
¶ÇÇϳª ¸Þ½ÃÁö Å¥´Â ÇÁ·Î±×·¥ÀÇ ¸Þ¸ð¸®¿¡¼­ °ü¸®ÇÏ´Â°Ô ¾Æ´Ñ, Ä¿³Î¸Þ¸ð¸®¿¡¼­ °ü¸®¸¦ ÇϹǷÎ, ÇÁ·Î±×·¥ÀÌ Á¾·áÇÑ´Ù°í ÇØ¼­ ¸Þ½ÃÁö Å¥°¡ »ç¶óÁö´Â°Ç ¾Æ´Ï´Ù. ±×·¯¹Ç·Î °ü¸®ÀÚ´Â Á¾Á¾ ÇöÀçÀÇ ¸Þ½ÃÁöÅ¥ »óŸ¦ È®ÀÎÇØÁÙ Çʿ䰡 Àִµ¥, ÀÌ·²°æ¿ì ipcs ¸í·ÉÀ» »ç¿ëÇÏ°Ô µÈ´Ù.
[yundream@localhost test]# ipcs -q

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages
0x00003039 0          root       600        8            1
0x0000303b 32769      root       600        8            1
ipcs ¸¦ »ç¿ëÇϸé ÇöÀç ipc ÀÚ¿ø»óŸ¦ »ìÆìº¼¼ö ÀÖÀ¸¸ç, ipcrm À» ÀÌ¿ëÇØ¼­ ÇÊ¿ä¾ø´Â ipc ÀÚ¿øÀ» Á¤¸®ÇÒ¼öµµ ÀÖ´Ù. ÀÌ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº man ÆäÀÌÁö¸¦ Âü°íÇϱ⠹ٶõ´Ù. À§ÀÇ ¿¡Á¦¸¦ º¸¸é msqid ¶ó´Â Á¤¼öÇüÀÇ ¼ýÀÚ°¡ º¸ÀϰÍÀÌ´Ù. ¿ì¸®´Â ÀÌ msqid ¸¦ ÀÌ¿ëÇØ¼­ ¸Þ½ÃÁö Å¥ ¿¡ Á¢±ÙÇØ¼­ ¸Þ½ÃÁö Å¥¿¡ µ¥ÀÌŸ¸¦ º¸³»°Å³ª, ¸Þ½ÃÁöÅ¥¿¡ µé¾î ÀÖ´Â ¸Þ½ÃÁö¸¦ Àоî¿Ã¼ö°¡ ÀÖ´Ù.

FIFO
FIFO ´Â À§¿¡¼­ ¼³¸íÇÑ pipe ¿Í ¸Å¿ì À¯»çÇÏ´Ù. FIFO ´Â À§¿¡¼­ ¼³¸íÇÑ pipe ÀÇ ´ÜÁ¡Áß °°Àº PPID(°°Àº ºÎ¸ðÇÁ·Î¼¼½º)¸¦ °¡Áö´Â ÇÁ·Î¼¼½ºµé »çÀÌ¿¡¼­¸¸ Åë½ÅÀÌ °¡´ÉÇÏ´Ù´Â ´ÜÁ¡À» ÇØ°áÇÑ, pipe ÀÇ È®Àå¹öÁ¯À̶ó°í ÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù. FIFO´Â ºÎ¸ðÇÁ·Î¼¼½º¿Í ¹«°üÇÏ°Ô ÀüÇô´Ù¸¥ ¸ðµç ÇÁ·Î¼¼½ºµé »çÀÌ¿¡¼­ Åë½ÅÀÌ °¡´ÉÇѵ¥, ±×ÀÌÀ¯´Â ÇÁ·Î¼¼½º Åë½ÅÀ» À§Çؼ­, À̸§ÀÌ ÀÖ´Â ÆÄÀÏÀ» »ç¿ëÇϱ⠶§¹®ÀÌ´Ù.
FIFO ÀÇ »ý¼ºÀº mkfifo(1) À» ÅëÇØ¼­ ÀÌ·ç¾îÁö´Âµ¥, mkfifo ¸¦ ¼º°øÇÏ¸é ¸í¸íµÈ ÆÄÀÏÀÌ »ý¼ºµÈ´Ù. ÀÌ ÆÄÀÏÀÇ Á¤º¸¸¦ º¸¸é ´ÙÀ½°ú °°´Ù.
-rw-r--r-- 1 root root 0 1¿ù 12 22:31 lock drwx------ 2 root root 4096 1¿ù 11 02:48 mcop-root prw------- 1 root root 0 1¿ù 22 00:32 myfifo
Á¦ÀÏ ¸¶Áö¸· ÁÙ¿¡ º¸¸é myfifo ¶õ ÆÄÀÏÀÌ ÀÖÀ»°ÍÀÌ´Ù. °¡Àå¾ÕºÎºÐÀ» º¸¸é "p" ¶ó°í µÇ¾î Àִµ¥, FIFO ¼³ºñ·Î ¸¸µé¾îÁø ÆÄÀÏÀ̶õ°É ¾Ë·ÁÁØ´Ù. FIFOµµ pipe ÀÇ ¶Ç´Ù¸¥ ´ÜÁ¡ÀÎ Àбâ/¾²±â °¡ µ¿½Ã¿¡ °¡´ÉÇÏÁø ¾ÊÀ¸¸ç, read-only, write-only ¸¸ °¡´ÉÇÏ´Ù. ÇÏÁö¸¸ Åë½Å¼±·Î°¡ ÆÄÀÏ·Î Á¸ÀçÇϱ⠶§¹®¿¡, Çϳª¸¦ ÀбâÀü¿ëÀ¸·Î ¿­°í ¶Ç ´Ù¸¥ Çϳª¸¦ ¾²±â Àü¿ëÀ¸·Î ¿­¾î¼­, ÀÌ·¯ÇÑ read/write ¹®Á¦¸¦ ÇØ°áÇÒ¼ö´Â ÀÖ´Ù. È£½ºÆ®¿µ¿ªÀÇ ¼­¹ö Ŭ¶óÀÌ¾ðÆ®°£ ÀüÀÌÁß Åë½ÅÀ» À§Çؼ­´Â °á±¹ 2°³ÀÇ FIFO ÆÄÀÏÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù.(ÀÌ·¯ÇÑ Á¡Àº PIPE¸¦ ÅëÇÑ ºÎ¸ð/ÀÚ½Ä ÇÁ·Î¼¼½º°£ Åë½Åµµ ¸¶Âù°¡Áö´Ù.)

ÀÌ»ó Unix ¿¡¼­ ´ëÇ¥ÀûÀ¸·Î »ç¿ëµÇ´Â IPC ¼³ºñµé¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸¾Ò´Ù. À̹®¼­¿¡¼­ ¸ðµç IPC ¼³ºñ¸¦ ´Ù·é°Ç ¾Æ´Ñµ¥, ±×Áß Semaphore °¡ ºüÁ® ÀÖ´Ù. ÀÌÀ¯´Â ºñ·Ï Semaphore °¡ IPC ¼³ºñ·Î ºÐ·ù°¡ µÇ±ä ÇÏÁö¸¸, ¸Þ½ÃÁö¸¦ Á÷Á¢Àü´ÞÇÏ´Â ´Ù¸¥ ¼³ºñµé°ú´Â Á» ¹«°üÇϱ⠶§¹®¿¡ Á¦¿Ü¸¦ ½ÃÄ×´Ù. Semaphore ¿¡ ´ëÇØ¼­´Â ´Ù¸¥ ¹®¼­¸¦ ÅëÇØ¼­ ¼³¸íÀ» Çϵµ·Ï ÇϰڴÙ. ¿©±â¿¡ µîÀåÇß´ø IPC ¿¡ ´ëÇÑ ÄÚµå Â÷¿ø¿¡¼­ÀÇ ¼³¸íÀº Â÷±ÙÂ÷±Ù ÇØ³ª°¥ °ÍÀÌ´Ï ±â´ë¸¦ ÇØÁÖ±æ(--;) °£ÀýÈ÷ ¹Ù¶ó´Â ¹ÙÀÌ´Ù.
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.