ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 1 °øÀ¯¸Þ¸ð¸® (shared memory)
º¸Åë ÇÁ·Î¼¼½º¿¡¼ »ç¿ëµÇ´Â ¸Þ¸ð¸®¿µ¿ªÀº ÇØ´ç ÇÁ·Î¼¼½º¸¸ÀÌ»ç¿ëÇÒ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ¶§¶§·Î ¿©·¯°³ÀÇ ÇÁ·Î¼¼½º°¡ ƯÁ¤ ¸Þ¸ð¸®¿µ¿ªÀ» »ç¿ëÇßÀ¸¸é Çϴ¶§°¡ ÀÖÀ»°ÍÀÌ´Ù.
System V IPC ¼³ºñÁßÀÇ ÇϳªÀÎ "°øÀ¯¸Þ¸ð¸®"¸¦ ÅëÇØ¼ ÀÌ·¯ÇÑÀÏÀ» ÇÒ¼öÀÖ´Ù. 1.1 °³¿ä
¸ðµç ÇÁ·Î¼¼½º´Â ÀÚ½ÅÀÇ ¾÷¹«¸¦ ¼öÇàÇϱâ À§Çؼ ÇÊ¿äÇÑ ÀڷḦ ÀúÀåÇϱâ À§ÇÑ ¸Þ¸ð¸® °ø°£À» °¡Áö°Ô µÈ´Ù. ÀÌ·¯ÇÑ ¸Þ¸ð¸®°ø°£¿¡´Â CPU¿¡ ÀÇÇØ ¼öÇàµÇ´Â ¸í·É¾îµé, ÇÁ·Î±×·¥ ½ÃÀ۽à Á¤Àǵǰí ÃʱâÈµÈ µ¥ÀÌŸ, ÇÁ·Î±×·¥ ½ÃÀ۽à Á¤ÀǵǾúÁö¸¸ ÃʱâÈ µÇÁö ¾ÊÀº µ¥ÀÌŸ, ÇÔ¼öÈ£Ãâ¿¡ ÇÊ¿äÇÑ Á¤º¸, µ¿ÀûÇÒ´çÀÌ ÀÌ·ç¾îÁö´Â µ¥ÀÌŸµî ÀÌ µé¾î°¡°Ô µÈ´Ù.
ÇÁ·Î¼¼½º´Â ½ÃÀ۽à ȤÀº ½ÇÇàÁß¿¡ ÀÌ·¯ÇÑ µ¥ÀÌŸ¸¦ ÀúÀåÇÏ°í »ç¿ëÇϱâ À§ÇÑ ¸Þ¸ð¸® °ø°£À» Ä¿³Î¿¡ ¿ä±¸ÇÏ¿©¼ ÇÒ´ç¹Þ¾Æ »ç¿ëÇÏ°Ô µÇ´Âµ¥, ÀÌ·¯ÇÑ ¸Þ¸ð¸®°ø°£Àº ±âº»ÀûÀ¸·Î ¸Þ¸ð¸®¸¦ ¿äûÇÑ ÇÁ·Î¼¼½º¸¸ÀÌ Á¢±Ù°¡´ÉÇϵµ·Ï µÇ¾îÀÖ´Ù. ÇÏÁö¸¸ °¡²ûÀº ¿©·¯°³ÀÇ ÇÁ·Î¼¼½º°¡ ƯÁ¤ ¸Þ¸ð¸® °ø°£À» µ¿½Ã¿¡ Á¢±ÙÇØ¾ßÇÒ Çʿ伺À» °¡Áú¶§°¡ ÀÖÀ»°ÍÀÌ´Ù.
°øÀ¯¸Þ¸ð¸®´Â ÀÌ·¯ÇÑ ÀÛ¾÷À» À§ÇÑ È¿À²ÀûÀÎ ¹æ¹ýÀ» Á¦°øÇÑ´Ù.
°øÀ¯¸Þ¸ð¸®´Â ¿©·¯ IPC Áß¿¡¼ °¡Àå ºü¸¥ ¼öÇà¼Óµµ¸¦ º¸¿©ÁØ´Ù.
±×ÀÌÀ¯´Â ÇϳªÀÇ ¸Þ¸ð¸®¸¦ °øÀ¯Çؼ Á¢±ÙÇÏ°Ô µÇ¹Ç·Î, µ¥ÀÌŸ º¹»ç¿Í °°Àº ºÒÇÊ¿äÇÑ ¿À¹öÇìµå°¡ ¹ß»ýÇÏÁö ¾Ê±â ¶§¹®À¸·Î, ºü¸¥ µ¥ÀÌŸÀÇ ÀÌ¿ëÀÌ °¡´ÉÇÏ´Ù. ±×·¯³ª ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ ¸Þ¸ð¸®¿¡ Á¢±ÙÁß¿¡ ÀÖÀ»¶§, ¶Ç´Ù¸¥ ÇÁ·Î¼¼½º°¡ ¸Þ¸ð¸®¿¡ Á¢±ÙÇÏ´Â ÀÏÀÌ ¹ß»ýÇϸé ÀÚÄ© µ¥ÀÌŸ°¡ ȳ¼ÕµÉ¼ö ÀÖÀ»°ÍÀ̹ǷÎ, Çѹø¿¡ ÇϳªÀÇ ÇÁ·Î¼¼½º°¡ ¸Þ¸ð¸®¿¡ Á¢±ÙÇϰí ÀÖ´Ù´Â°É º¸ÁõÇØÁÙ¼ö ÀÖ¾î¾ß ÇÒ°ÍÀÌ´Ù.
ÀÌ·¯ÇÑ ÀÛ¾÷À» À§Çؼ Unix ¿¡¼´Â Semaphore ¶ó´Â ¶Ç´Ù¸¥ °øÀ¯ÀÚ¿øÀ» Á¦¾îÇÒ¼ö ÀÖµµ·Ï ÇØÁÖ´Â µµ±¸¸¦ Á¦°øÇØÁØ´Ù. À̹ø ¹®¼¿¡¼´Â Semaphore ¸¦ ´Ù·çÁö´Â ¾ÊÀ»°ÍÀÌ´Ù. À̰ÍÀº ´Ù¸¥ ¹®¼¿¡¼ ´Ù·çµµ·Ï ÇÏ°í ¿©±â¿¡¼´Â ´ÜÁö °øÀ¯¸Þ¸ð¸®¿¡ ´ëÇØ¼¸¸ ´Ù·çµµ·Ï ÇÒ°ÍÀÌ´Ù.
´ÙÀ½Àº °øÀ¯¸Þ¸ð¸®¿¡ °ü·ÃµÈ ÇÔ¼öµéÀÇ ¸ðÀ½ÀÌ´Ù.
1.2 °øÀ¯¸Þ¸ð¸®´Â ¾î¶»°Ô ÇÒ´çµÇ´Â°¡
À§ÀÇ ÇÔ¼öµéÀ» ¼³¸íÇϱâ Àü¿¡ ¿ì¼± °øÀ¯¸Þ¸ð¸®°¡ ¾î¶»°Ô ÇÒ´çµÇ°í, ¾î¶² °úÁ¤À» ÅëÇØ¼ Á¢±Ù°¡´ÉÇÑÁö¿¡ ´ëÇØ¼ ¿ì¼± ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.
°øÀ¯¸Þ¸ð¸®ÀÇ »ý¼º¿äûÀº ÃÖÃÊ °øÀ¯¸Þ¸ð¸® ¿µ¿ªÀ» ¸¸µå´Â ÇÁ·Î¼¼½º°¡ Ä¿³Î¿¡ °øÀ¯¸Þ¸ð¸® °ø°£ÀÇ ÇÒ´çÀ» ¿äûÇÔÀ¸·Î½á ÀÌ·ç¾îÁö¸ç, ¸¸µé¾îÁø °øÀ¯¸Þ¸ð¸®´Â Ä¿³Î¿¡ ÀÇÇØ¼ °ü¸® µÇ°Ô µÈ´Ù.
ÀÌ·± ÀÌÀ¯·Î Çѹø¸¸µé¾îÁø °øÀ¯¸Þ¸ð¸®´Â ¿î¿µÃ¼Á¦¸¦ ¸®ºÎÆÃÇϰųª, Á÷Á¢ °øÀ¯¸Þ¸ð¸® °ø°£À» »èÁ¦½ÃÄÑÁÖÁö ¾ÊÀºÇÑ, °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÏ´Â ¸ðµç ÇÁ·Î¼¼½º°¡ ¾ø¾îÁ³´Ù°í ÇÏ´õ¶óµµ, °è¼ÓÀûÀ¸·Î À¯ÁöµÇ°Ô µÈ´Ù.
ÇÁ·Î¼¼½º°¡ Ä¿³Î¿¡°Ô °øÀ¯¸Þ¸ð¸® °ø°£À» ¿äûÇÏ°Ô µÇ¸é, Ä¿³ÎÀº °øÀ¯¸Þ¸ð¸® °ø°£À» ÇÒ´ç½ÃÄÑÁÖ°í ÀÌµé °øÀ¯¸Þ¸ð¸®°ø°£À» °ü¸®Çϱâ À§ÇÑ ³»ºÎÀڷᱸÁ¶¸¦ ÅëÇÏ¿©, ÀÌµé °øÀ¯¸Þ¸ð¸®¸¦ °ü¸®ÇÏ°Ô µÈ´Ù. ÀÌ ÀÚ·á´Â shmid_ds ¶ó´Â ±¸Á¶Ã¼¿¡ ÀÇÇØ¼ °ü¸®µÇ¸ç shm.h ¿¡ Á¤ÀǵǾî ÀÖ´Ù.
1.3 shmget
shmget Àº Ä¿³Î¿¡ °øÀ¯¸Þ¸ð¸® °ø°£À» ¿äûÇϱâ À§ÇØ È£ÃâÇÏ´Â ½Ã½ºÅÛ È£Ãâ ÇÔ¼öÀÌ´Ù. key ´Â ¹Ù·Î À§¿¡¼ ¼³¸íÇßµíÀÌ °íÀ¯ÀÇ °øÀ¯¸Þ¸ð¸®ÀÓÀ» ¾Ë·ÁÁÖ±â À§Çؼ »ç¿ëµÈ´Ù. shmget À» ÀÌ¿ëÇØ¼ »õ·Î¿î °øÀ¯¸Þ¸ð¸® ¿µ¿ªÀ» »ý¼ºÇϰųª ±âÁ¸¿¡ ¸¸µé¾îÁ®ÀÖ´ø °øÀ¯¸Þ¸ð¸® ¿µ¿ªÀ» ÂüÁ¶ÇÒ¼ö ÀÖ´Ù.
ù¹øÂ° ¾Æ±Ô¸ÕÆ®´Â ¿©·¯°³ÀÇ °øÀ¯¸Þ¸ð¸®Áß ¿øÇÏ´Â °øÀ¯¸Þ¸ð¸®¿¡ Á¢±ÙÇϱâ À§ÇÑ Key °ªÀÌ´Ù. ÀÌ Key °ªÀº Ä¿³Î¿¡ ÀÇÇØ¼ °ü¸®µÇ¸ç, Key °ªÀ» ÅëÇØ¼ ¼±ÅÃÀûÀÎ °øÀ¯¸Þ¸ð¸®¿¡ÀÇ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù.
¸¸¾à IPC_CREAT ¸¸ »ç¿ëµÈ´Ù¸é shmget()Àº »õ·Î »ý¼ºµÇ´Â °øÀ¯¸Þ¸ð¸®°ø°£À» Áö½ÃÇÏ´Â °øÀ¯¸Þ¸ð¸®°ø°£ "½Äº°ÀÚ" µÇµ¹·ÁÁØ´Ù. ¸¸¾à ÀÔ·ÂµÈ key °ªÀÌ Áö½ÃÇÏ´Â °øÀ¯¸Þ¸ð¸® °ø°£ÀÌ ÀÌ¹Ì Á¸ÀçÇϰí ÀÖ´Ù¸é Á¸ÀçÇÏ´Â °øÀ¯¸Þ¸ð¸® °ø°£ÀÇ "½Äº°ÀÚ"¸¦ µÇµ¹·ÁÁØ´Ù. IPC_EXCL °ú IPC_CREAT ¸¦ °°ÀÌ »ç¿ëÇÒ°æ¿ì, °øÀ¯¸Þ¸ð¸® °ø°£ÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é »õ·Î »ý¼º½ÃÄÑÁÖ¸ç, Á¸ÀçÇÒ°æ¿ì¿¡ error ¸¦ µÇµ¹·ÁÁØ´Ù. µÎ¹øÂ° ¾Æ±Ô¸ÕÆ®´Â °øÀ¯¸Þ¸ð¸® ÀÇ ÃÖ¼ÒÅ©±â ÀÌ´Ù. »õ·Î¿î °øÀ¯¸Þ¸ð¸®¸¦ »ý¼ºÇϰíÀÚ ÇÑ´Ù¸é Å©±â¸¦ ¸í½ÃÇØÁÖ¾î¾ß ÇÑ´Ù. Á¸ÀçÇÏ´Â ¸Þ¸ð¸®¸¦ ÂüÁ¶ÇÑ´Ù¸é Å©±â´Â 0À¸·Î ¸í½ÃÇÑ´Ù. 3¹øÂ° ¾Æ±Ô¸ÕÆ®´Â °øÀ¯¸Þ¸ð¸®ÀÇ Á¢±Ù±ÇÇѰú, »ý¼º¹æ½ÄÀ» ¸í½ÃÇϱâ À§Çؼ »ç¿ëÇÑ´Ù. ¾Æ±Ô¸ÕÆ®ÀÇ »ý¼º¹æ½ÄÀ» ÁöÁ¤Çϱâ À§Çؼ IPC_CREAT ¿Í IPC_EXCL À» »ç¿ëÇÒ¼ö ÀÖ´Ù. ¾Æ·¡ À̵鿡 ´ëÇØ¼ ¼³¸íÀ» ÇØµÎ¾ú´Ù.
key ¸¦ ÀÌ¿ë »õ·Î¿î °øÀ¯¸Þ¸ð¸® °ø°£À» ¸¸µç´Ù.
IPC_CREAT¿Í °°ÀÌ »ç¿ëµÇ¸ç, °øÀ¯¸Þ¸ð¸® °ø°£ÀÌ ÀÌ¹Ì Á¸ÀçÇÒ°æ¿ì error ¸¦ µÇµ¹·ÁÁØ´Ù.
3¹øÂ° ¾Æ±Ô¸ÕÆ®´Â À̿ܿ¡µµ ±ÇÇÑÀ» ÁöÁ¤ÇØÁÙ¼öµµ ÀÖ´Ù. ±ÇÇÑÀº ÆÄÀϱÇÇѰú µ¿ÀÏÇϰÔ, À¯Àú, ±×·ì, Other ¿¡ ´ëÇÑ Àбâ/¾²±â ±ÇÇÑÀ» ÁöÁ¤ÇÒ¼ö ÀÖ´Ù. ´Ü ½ÇÇà±ÇÇÑÀº ÁÙ¼ö ¾øµµ·Ï µÇ¾î ÀÖ´Ù. ¾Æ·¡¿Í °°ÀÌ »ç¿ë°¡´ÉÇÏ´Ù. int shmid;
key_t keyval;
keyval = 1234;
shmid = shmget(keyval, 1024, IPC_CREAT | 0666));
if (shmid == -1)
{
return -1;
}
1.4 shmat
ÀÏ´Ü °øÀ¯¸Þ¸ð¸® °ø°£À» »ý¼ºÇßÀ¸¸é, ¿ì¸®´Â °øÀ¯¸Þ¸ð¸®¿¡ Á¢±ÙÇÒ¼ö ÀÖ´Â int ÇüÀÇ "½Äº°ÀÚ" ¸¦ ¾ò°Ô µÈ´Ù. ¿ì¸®´Â ÀÌ ½Äº°ÀÚ¸¦ shmat ¸¦ ÀÌ¿ëÇØ¼ Áö±ÝÀÇ ÇÁ·Î¼¼½º°¡ °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ë°¡´ÉÇϵµ·Ï "µ¡ºÙÀÓ" ÀÛ¾÷À» ÇØÁÖ¾î¾ß ÇÑ´Ù.
ù¹øÂ° ¾Æ±Ô¸ÕÆ®´Â shmgetÀ» ÀÌ¿ëÇØ¼ ¾ò¾î³½ ½Äº°ÀÚ ¹øÈ£À̸ç,
µÎ¹øÂ° ¾Æ±Ô¸ÕÆ®´Â ¸Þ¸ð¸®°¡ ºÙÀ» ÁÖ¼Ò¸¦ ¸í½ÃÇϱâ À§ÇØ »ç¿ëÇϴµ¥, 0À» »ç¿ëÇÒ°æ¿ì Ä¿³ÎÀÌ ¸Þ¸ð¸®°¡ ºÙÀ» ÁÖ¼Ò¸¦ ¸í½ÃÇÏ°Ô µÈ´Ù. Ưº°ÇÑ »çÇ×ÀÌ ¾ø´Ù¸é 0À» »ç¿ëÇϵµ·Ï ÇÑ´Ù. ¼¼¹øÂ° ¾Æ±Ô¸ÕÆ®¸¦ ÀÌ¿ëÇØ¼, ¿ì¸®´Â ÇØ´ç °øÀ¯¸Þ¸ð¸®¿¡ ´ëÇÑ "ÀбâÀü¿ë", "Àбâ/¾²±â°¡´É" ¸ðµå·Î ¿¼ö Àִµ¥, SHM_RDONLY¸¦ ÁöÁ¤ÇÒ°æ¿ì Àбâ Àü¿ëÀ¸·Î, ¾Æ¹«°ªµµ ÁöÁ¤ÇÏÁö ¾ÊÀ»°æ¿ì "Àбâ/¾²±â °¡´É" ¸ðµå·Î ¿¸®°Ô µÈ´Ù. 1.5 shmdt
ÇÁ·Î¼¼½º°¡ ´õÀÌ»ó °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÒÇʿ䰡 ¾øÀ»°æ¿ì ÇÁ·Î¼¼½º¿Í °øÀ¯¸Þ¸ð¸®¸¦ ºÐ¸® Çϱâ À§Çؼ »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ °æ¿ì ´ÜÁö ÇöÀç ÇÁ·Î¼¼½º¿Í °øÀ¯¸Þ¸ð¸®¸¦ ºÐ¸®½Ãų»ÓÀÌÁö, °øÀ¯¸Þ¸ð¸® ³»¿ëÀ» »èÁ¦ÇÏÁö´Â ¾Ê´Â´Ù´Â Á¡À» ±â¾ïÇØ¾ß ÇÑ´Ù. °øÀ¯¸Þ¸ð¸®¸¦ Ä¿³Î»ó¿¡¼ »èÁ¦ ½ÃŰ±æ ¿øÇÑ´Ù¸é shmctl °°Àº ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¾ß ÇÑ´Ù.
shmdt °¡ ¼º°øÀûÀ¸·Î ¼öÇàµÇ¸é Ä¿³ÎÀº shmid_ds ÀÇ ³»¿ëÀ» °»½ÅÇÑ´Ù. Áï shm_dtime, shm_lpid, shm_nattch µîÀÇ ³»¿ëÀ» °»½ÅÇϴµ¥, shm_dtime ´Â °¡Àå ÃÖ±Ù¿¡ dettach (Áï shmdt ¸¦ »ç¿ëÇÑ)µÈ ½Ã°£, shm_lpid ´Â È£ÃâÇÑ ÇÁ·Î¼¼¼¼ÀÇ PID, shm_nattch ´Â ÇöÀç °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÏ´Â (shmat ¸¦ ÀÌ¿ëÇØ¼ °øÀ¯¸Þ¸ð¸®¿¡ ºÙ¾îÀÖ´Â) ÇÁ·Î¼¼½ºÀÇ ¼ö¸¦ µ¹·ÁÁØ´Ù. shmdt ¸¦ »ç¿ëÇÏ°Ô µÇ¸é shm_nattch ´Â 1 °¨¼ÒÇÏ°Ô µÉ°ÍÀ̸ç, shm_nattch °¡ 0 Áï ´õÀÌ»ó ºÙ¾îÀÖ´Â ÇÁ·Î¼¼½º°¡ ¾ø´Ù¶ó´Â ¶æÀÌ µÉ°ÍÀÌ´Ù. shm_nattch °¡ 0ÀÌ µÇ¾îÀÖÀ»¶§ ¸¸¾à ÀÌ °øÀ¯¸Þ¸ð¸®°¡ shm_ctl µî¿¡ ÀÇÇØ »èÁ¦Ç¥½Ã °¡ µÇ¾î ÀÖ´Ù¸é, ÀÌ °øÀ¯¸Þ¸ð¸®´Â »èÁ¦µÇ°Ô µÈ´Ù. 1.6 shmctl
À̰ÍÀº °øÀ¯¸Þ¸ð¸®¸¦ Á¦¾îÇϱâ À§Çؼ »ç¿ëÇÑ´Ù. Áï shmid_ds ¸¦ Á÷Á¢ Á¦¾îÇÔÀ¸·Î½á, ÇØ´ç °øÀ¯¸Þ¸ð¸®¿¡ ´ëÇÑ ¼ÒÀ¯ÀÚ, ±×·ì µîÀÇ Çã°¡±ÇÀ» º¯°æÇϰųª, °øÀ¯¸Þ¸ð¸®¸¦ »èÁ¦È¤Àº, °øÀ¯¸Þ¸ð¸®ÀÇ Àá±ÝÀ» ¼³Á¤Çϰųª ÇØÁ¦ÇÏ´Â µîÀÇ ÀÛ¾÷À» ÇÑ´Ù.
2¹øÂ° ¾Æ±Ô¸ÕÆ®¸¦ ÀÌ¿ëÇØ¼ shmid °¡ °¡¸£Å°´Â °øÀ¯¸Þ¸ð¸®¸¦ Á¦¾îÇϸç, cmd ¸¦ ÀÌ¿ëÇØ¼ ¿øÇÏ´Â Á¦¾î¸¦ ÇÒ¼ö ÀÖ´Ù. cmd ¸¦ ÀÌ¿ëÇØ ³»¸±¼ö ÀÖ´Â ¸í·É¿¡´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÀÖ´Ù.
¿¹Á¦ : shm.c #include <sys/ipc.h> #include <sys/shm.h> #include <string.h> #include <unistd.h> int main() { int shmid; int pid; int *cal_num; void *shared_memory = (void *)0; // °øÀ¯¸Þ¸ð¸® °ø°£À» ¸¸µç´Ù. shmid = shmget((key_t)1234, sizeof(int), 0666|IPC_CREAT); if (shmid == -1) { perror("shmget failed : "); exit(0); } // °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇϱâ À§ÇØ ÇÁ·Î¼¼½º¸Þ¸ð¸®¿¡ ºÙÀδÙ. shared_memory = shmat(shmid, (void *)0, 0); if (shared_memory == (void *)-1) { perror("shmat failed : "); exit(0); } cal_num = (int *)shared_memory; pid = fork(); if (pid == 0) { shmid = shmget((key_t)1234, sizeof(int), 0); if (shmid == -1) { perror("shmget failed : "); exit(0); } shared_memory = shmat(shmid, (void *)0, 0666|IPC_CREAT); if (shared_memory == (void *)-1) { perror("shmat failed : "); exit(0); } cal_num = (int *)shared_memory; *cal_num = 1; while(1) { *cal_num = *cal_num + 1; printf("child %d\n", *cal_num); sleep(1); } } // ºÎ¸ð ÇÁ·Î¼¼½º·Î °øÀ¯¸Þ¸ð¸®ÀÇ ³»¿ëÀ» º¸¿©ÁØ´Ù. else if(pid > 0) { while(1) { sleep(1); printf("%d\n", *cal_num); } } }¿¹Á¦ ÇÁ·Î±×·¥ÀÌ ÇÏ´Â ÀÏÀº °£´ÜÇÏ´Ù. int ÇüÀÇ °øÀ¯¸Þ¸ð¸® °ø°£À» ÇÒ´çÇÑ´ÙÀ½. ÀÚ½ÄÇÁ·Î¼¼½º¿¡¼ ¿©±â¿¡ 1¾¿À» ´õÇÏ°í ºÎ¸ðÇÁ·Î¼¼½º¿¡¼´Â °øÀ¯¸Þ¸ð¸® ³»¿ëÀ» Ãâ·ÂÇÏ´Â ÀÏÀ»ÇÑ´Ù. 2 °øÀ¯¸Þ¸ð¸® Á¦¾îÇϱâ
½©¿¡¼ °øÀ¯¸Þ¸ð¸®ÀÇ »óȲÀ» º¸¿©ÁÖ±â À§Çؼ ipcs(1)¶õ µµ±¸¸¦ Á¦°øÇÑ´Ù. ipcs ¸¦ »ç¿ëÇÏ¸é °øÀ¯¸Þ¸ð¸® »Ó¸¸ ¾Æ´Ñ, Semaphore, Message Queue µî ¼ÒÀ§ sytem V IPC ¼³ºñ¿¡ ´ëÇÑ ³»¿ëÀ» º¸¿©ÁØ´Ù. ±×¸®°í ipcrm µµ±¸¸¦ ÀÌ¿ëÇØ¼ ÇÊ¿ä¾ø´Â °øÀ¯¸Þ¸ð¸®, Message Queue, Semaphore µîÀ» Áö¿öÁÙ¼ö ÀÖ´Ù.
À§ÀÇ ¿¹Á¦Äڵ带 ÄÄÆÄÀÏ ½ÃÄѼ ½ÇÇà½ÃŲ´ÙÀ½ ipcs ¸¦ ÀÌ¿ëÇØ¼ È®ÀÎÀ» ÇØº¸¸é °øÀ¯¸Þ¸ð¸® ÀÚ¿øÀÌ ¾î¶²½ÄÀ¸·Î °ü¸®µÇ´ÂÁö Á»´õ ÀÌÇØ¸¦ ½±°Ô ÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù. 2.1 °øÀ¯ ¸Þ¸ð¸® Á¤º¸ È®ÀÎ
-l ¿É¼Ç°ú ÇÔ²² ipcs¸¦ ½ÇÇàÇϸé ipcÀÚ¿ø Á¦ÇÑ Á¤º¸¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù. $ ipcs -l ------ Shared Memory Limits -------- max number of segments = 4096 max seg size (kbytes) = 32768 max total shared memory (kbytes) = 8388608 min seg size (bytes) = 1 ------ Semaphore Limits -------- max number of arrays = 128 max semaphores per array = 250 max semaphores system wide = 32000 max ops per semop call = 32 semaphore max value = 32767 ------ Messages: Limits -------- max queues system wide = 1706 max size of message (bytes) = 8192 default max size of queue (bytes) = 16384-m ¿É¼ÇÀ¸·Î ½ÇÇàÇϸé ÇöÀç »ç¿ëÁßÀÎ ipc ÀÚ¿ø Á¤º¸¸¦ È®ÀÎÇÒ ¼ö ÀÖ´Ù. $ ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 0 root 777 135168 2 0x00000000 819201 yundream 600 393216 2 dest 0x00000000 950274 yundream 600 393216 2 dest 0x00000000 983043 yundream 600 393216 2 dest 0x00000000 917508 yundream 600 393216 2 dest 0x00000000 1015813 yundream 600 393216 2 dest 0x00000000 1048582 yundream 600 393216 2 dest 0x00000000 27590663 yundream 600 393216 2 dest 0x00000000 35684360 yundream 666 4343780 2 dest 0x00000000 35717129 yundream 666 282808 2 dest 2.2 /proc ÆÄÀÏ ½Ã½ºÅÛÀ¸·Î Á¦¾îÇϱâ
¸®´ª½º ¿î¿µÃ¼Á¦´Â /proc ÆÄÀÏ ½Ã½ºÅÛÀ¸·Î °øÀ¯ ¸Þ¸ð¸® ÀÚ¿ø °ªÀ» º¯°æÇÒ ¼ö ÀÖ´Ù.
// 500M·Î # echo 536870912 > /proc/sys/kernel/shmmax |
|
|||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|