3.4 Synchronization and Notification
µ¿±âÈ ¹®Á¦´Â µÎ°³ÀÇ ¾²·¹µåµé ½ÇÇàÀÌ uniprocessor ±â°è¿¡¼ ȤÀº SMP ±â°è¿¡¼
µ¿½Ã¿¡ Á¢±ÙµÉ ¼ö ÀÖ´Â ÀÚ¿øµéÀ» °øÀ¯ÇÒ ¶§¸¶´Ù ÇÊ¿äµÇ¾îÁø´Ù.
¿¹¸¦ µé¾î, uniprocessor¿¡¼ ¸¸¾à ÇϳªÀÇ µå¶óÀ̹ö ÇÔ¼ö°¡ °øÀ¯ ÀÚ¿ø¿¡ Á¢±ÙÇϰí
ISR°ú °°Àº ´õ ³ôÀº IRQL¿¡¼ ½ÇÇàÇÏ´Â ¶Ç ÇϳªÀÇ ÇÔ¼ö¿¡ ÀÇÇØ ÀÎÅÍ·´Æ®µÈ´Ù¸éÀº,
°øÀ¯µÈ ÀÚ¿øÀº Áß°£´Ü°è »óÅ¿¡¼ ÀÚ¿øÀ» leaveÇÏ´Â race Á¶°ÇµéÀ» ¸·±âÀ§ÇØ º¸È£
µÇ¾îÁ®¾ß ÇÑ´Ù. SMP ±â°è¿¡¼, µÎ°³ÀÇ ¾²·¹µåµéÀº ´Ù¸¥ ÇÁ·Î¼¼¼¿¡¼ µ¿½Ã¿¡
½ÇÇàµÉ ¼ö ÀÖ°í °°Àº µ¥ÀÌÅ͸¦ º¯°æÇÏ´Â °ÍÀÌ ½ÃµµµÇ¾îÁú ¼ö ÀÖ´Ù.
±×·¯ÇÑ Á¢±ÙµéÀº µ¿±âȵǾîÁ®¾ß ÇÑ´Ù.
NDIS´Â °°Àº IRQL¿¡¼ ½ÇÇàÇÏ´Â ¾²·¹µåµé »çÀÌ¿¡¼ °øÀ¯µÈ ÀÚ¿øµé¿¡ ´ëÇÑ Á¢±ÙÀ»
µ¿±âÈÇϱâ À§ÇØ »ç¿ëµÇ¾îÁú ¼ö ÀÖ´Â ½ºÇÉ ¶ôµéÀ» Á¦°øÇÑ´Ù.
ÀÚ¿øÀ» °øÀ¯ÇÏ´Â µÎ°³ÀÇ ¾²·¹µåµéÀÌ ´Ù¸¥ IRQL¿¡¼ ½ÇÇàÇÒ ¶§, NDIS´Â °øÀ¯µÈ ÀÚ¿ø¿¡
´ëÇÑ Á¢±ÙÀ» Á÷·Ä鵃 ¼ö ÀÖ°Ô Çϱâ À§ÇØ ³·Àº IRQL ÄÚµåÀÇ IRQL¸¦ ÀϽÃÀûÀ¸·Î
»ó½ÂÇÏ´Â ¸ÞÄ¿´ÏÁòÀ» Á¦°øÇÑ´Ù.
ÁÖÁö(Notification)´Â ¾²·¹µå°¡ ¾²·¹µå ¹Û¿¡¼
À̺¥Æ®ÀÇ ¹ß»ý¿¡ Á¾¼ÓÀûÀÏ ¶§ ÇÊ¿äÇÏ´Ù. ¿¹¸¦ µé¾î, µå¶óÀ̹ö´Â ¸î¸î ŸÀÓ ±â°£(period)
ÀÌ ÀåÄ¡¸¦ üũÇÒ ¼ö ÀÖ°Ô Çϱâ À§ÇØ Àü´ÞµÇ¾îÁú ¶§ ÁÖÁöµÇ¾îÁö´Â °ÍÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ȤÀº
NIC µå¶óÀ̹ö°¡ polling°ú °°Àº ÁÖ±âÀûÀÎ ¿¬»êÀ» ÇàÇØ¾ß ÇÒ °ÍÀÌ´Ù.
TimerµéÀº ±×·¯ÇÑ ¸ÞÄ¿´ÏÁòÀ» Á¦°øÇÑ´Ù.
À̺¥Æ®µéÀº µÎ°³ÀÇ ¾²·¹µåµéÀÇ ½ÇÇàÀÌ
¿¬»êµéÀ» µ¿±âÈÇϱâ À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Â ¸ÞÄ¿´ÏÁòÀ» Á¦°øÇÑ´Ù. ¿¹¸¦ µé¾î, ¹Ì´ÏÆ÷Æ® NIC
µå¶óÀ̹ö´Â ÀåÄ¡¿¡ ¾¸À¸·Î½á NIC¿¡ ÀÎÅÍ·´Æ®¸¦ Å×½ºÆ®Çϱ⸦ ¿øÇÒ °ÍÀÌ´Ù.
¿¬»êÀÌ ¼º°øÀûÀ̶ó´Â °ÍÀ» µå¶óÀ̹ö¿¡ ¾Ë¸®±â À§ÇØ ÀÎÅÍ·´Æ®¸¦ À§ÇØ ±â´Ù·Á¾ß ÇÑ´Ù.
À̺¥Æ®µéÀº ÀÎÅÍ·´Æ®¸¦ ±â´Ù¸®´Â ¾²·¹µå°¡ ¿Ï¼ºÇϰí ÀÎÅÍ·´Æ®¸¦ ´Ù·ç´Â ¾²·¹µå »çÀÌ¿¡
¿¬»êÀ» µ¿±âÈÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù.
ÀÌ·¯ÇÑ NDIS ¸ÞÄ¿´ÏÁòµéÀÇ ¼³¸íÀº ´ÙÀ½°ú °°´Ù.
- Spin Locks
½ºÇÉ ¶ôÀº uniprocessor ȤÀº multiprocessor ±â°è¿¡¼ IRQL > PASSIVE_LEVEL¿¡¼ ½ÇÇàÇÏ´Â
Ä¿³Î ¸ðµå ¾²·¹µåµé¿¡ ÀÇÇØ °øÀ¯µÈ ÀÚ¿øµéÀ» º¸È£Çϱâ À§ÇÑ µ¿±âÈ ¸ÞÄ¿´ÏÁòÀ» Á¦°øÇÑ´Ù.
½ºÇÉ ¶ôÀº SMP ±â°è¿¡¼ µ¿½Ã¿¡ ½ÇÇàÇÏ´Â ´Ù¾çÇÑ ½ÇÇà ¾²·¹µé »çÀÌ¿¡¼ µ¿±âȸ¦
´Ù·é´Ù. ¾²·¹µå´Â º¸È£µÈ ÀÚ¿øµéÀ» Á¢±ÙÇϱâ Àü¿¡ ½ºÇÉ ¶ôÀ» ¾ò´Â´Ù. ½ºÇÉ ¶ôÀº
¾î¶² ¾²·¹µåÁö¸¸ ½ºÇɶôÀ» À¯ÁöÇÏ´Â ¾²·¹µå°¡ ÀÚ¿øÀ» »ç¿ëÇÏ´Â °ÍÀ» À¯ÁöÇÑ´Ù.
(keep - ¸·´Â´Ù . ?)
½ºÇɶôÀ» ±â´Ù¸®´Â ¾²·¹µå´Â lockÀ» À¯ÁöÇÏ´Â ¾²·¹µå¿¡ ÀÇÇØ ÇØÁ¦µÉ ¶§±îÁö ½ºÇɶôÀ»
¾ò±â À§ÇØ ½ÃµµÇÏ´Â °ÍÀ» ·çÇÁÇÑ´Ù.
½ºÇɶôµéÀÇ ¶Ç ÇϳªÀÇ Æ¯Â¡Àº °ü·ÃµÈ IRQL¿¡ ÀÖ´Ù. ½ºÇɶôÀÇ ½ÃµµµÈ ȹµæÀº ÀϽÃÀûÀ¸·Î
½ºÇɶô°ú °ü·ÃµÈ IRQL¿¡ ´ëÇÑ ¿ä±¸ ¾²·¹µåÀÇ IRQLÀ» »ó½ÂÇÑ´Ù. À̰ÍÀº ¸ðµç ³·Àº
IRQL ¾²·¹µåµéÀÌ °°Àº ÇÁ·Î¼¼¼ ¾È¿¡¼ ½ÇÇàÇÏ´Â ¾²·¹µå¸¦ ¼±Á¡ÇÏ´Â °ÍÀ» ¸·´Â´Ù.
´õ ³ôÀº IRQL¿¡¼ ½ÇÇàÇÏ´Â ¾²·¹µåµéÀº ½ÇÇà ¾²·¹µå¸¦ ¼±Á¡ÇÒ ¼ö ÀÖÁö¸¸Àº,
ÀÌ·¯ÇÑ ¾²·¹µåµéÀº ±×µéÀÌ °¡Áø °Íº¸´Ù ³·Àº IRQLÀ» °¡Áö±â ¶§¹®¿¡ ½ºÇɶôÀ» ¾òÀ» ¼ö ¾ø´Ù.
±×·¯¹Ç·Î, °°Àº ÇÁ·Î¼¼¼¿¡¼ ¾î¶°ÇÑ ´Ù¸¥ ¾²·¹µåµéÀÌ ½ÇÇà ¾²·¹µå¿¡ ÀÇÇØ ¾ò¾îÁú ¶§ ȤÀº
ÇØÁ¦µÉ ¶§±îÁö ½ºÇɶôÀ» ¾ò´Â °ÍÀ» ½ÃµµÇÏÁö ¾Ê´Â´Ù.
Àß Â¥¿©Áø ³×Æ®¿öÅ© µå¶óÀ̹ö´Â ½ºÇɶôÀÌ À¯ÁöµÉ ½Ã°£¾çÀÌ ÃÖ¼Ò鵃 °ÍÀÌ´Ù.
½ºÇÉ ¶ôÀÇ ÀüÇüÀûÀÎ »ç¿ëÀº Å¥¸¦ º¸È£ÇÒ °ÍÀÌ´Ù. ¿¹¸¦ µé¾î, ¹Ì´ÏÆ÷Æ® º¸³»±â ÇÔ¼ö,
MiniportSend, ´Â ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö¿¡ ÀÇÇØ ±×°Í¿¡ Àü´ÞµÇ´Â ÆÐŶµéÀ» Å¥¿¡ ÀúÀåÇÒ
°ÍÀÌ´Ù. ´Ù¸¥ µå¶óÀ̹ö ÇÔ¼öµéÀº ¶ÇÇÑ ÀÌ Å¥¸¦ »ç¿ëÇϱ⠶§¹®¿¡, MiniportSend ÇÔ¼ö´Â
ÇϳªÀÇ ¾²·¹µå°¡ Çѹø¿¡ Çѹø ¸µÅ©µé ȤÀº ³»¿ëµéÀ» ´Ù·ê¼ö ÀÖ°Ô Çϱâ À§ÇØ ½ºÇɶôÀ»
»ç¿ëÇÏ¿© Å¥¸¦ º¸È£ÇØ¾ß ÇÑ´Ù.
MiniportSend ÇÔ¼ö´Â ½ºÇɶôÀ» ¾ò°í ÆÐŶÀ» Å¥¿¡ Ãß°¡ÇÏ°í ±×¸®°í ³ª¼ ½ºÇɶôÀ» ÇØÁ¦ÇÑ´Ù.
½ºÇɶôÀ» »ç¿ëÇÏ´Â °ÍÀº ¶ôÀ» À¯ÁöÇÏ´Â ¾²·¹µå°¡ ÆÐŶÀÌ ¾ÈÀüÇÏ°Ô Å¥¿¡ Ãß°¡µÇ´Â µ¿¾È
Å¥ ¸µÅ©¸¦ ¼öÁ¤ÇÏ´Â À¯ÀÏÇÑ ¾²·¹µå¶ó´Â °ÍÀ» È®½ÇÈ÷ ÇÑ´Ù.
NIC µå¶óÀ̹ö°¡ ÆÐŶµéÀ» Å¥¿¡¼ °¡Á®¿Ã ¶§, ±×·¯ÇÑ Á¢±ÙÀº °°Àº ½ºÇÉ ¶ô¿¡ ÀÇÇØ
º¸È£µÇ¾îÁø´Ù.
Å¥ÀÇ Çì´õ¸¦ ¼öÁ¤Çϰųª ȤÀº Å¥¸¦ ±¸¼ºÇÏ´Â ¸µÅ© ÇʵåµéÀÇ ¾î¶² °ÍÀ» ¼öÁ¤ÇÏ´Â
¸í·ÉµéÀ» ½ÇÇàÇÒ ¶§, µå¶óÀ̹ö´Â Å¥¸¦ ½ºÇɶôÀ¸·Î º¸È£ÇØ¾ß ÇÑ´Ù.
µå¶óÀ̹ö´Â Å¥¸¦ ³Ê¹« º¸È£ÇÏÁö ¾Êµµ·Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î, µå¶óÀ̹ö´Â ÆÐŶÀ»
Å¥¿¡ ÀúÀåÇϱâ Àü¿¡ ÆÐŶÀÇ ³×Æ®¿öÅ© µå¶óÀ̹ö ¿¹¾à Çʵ峻¿¡ ¸î¸î ¿¬»êµéÀ»(¿¹¸¦ µé¾î,
±æÀ̸¦ Æ÷ÇÔÇÏ´Â Çʵ带 ä¿ì´Â °Í) ÇàÇÒ ¼ö ÀÖ´Ù.
µå¶óÀ̹ö´Â ½ºÇɶôÀ¸·Î º¸È£µÈ ¿µ¿ª ¹Û¿¡¼ À̰ÍÀ» ÇÒ ¼ö ÀÖÁö¸¸Àº, ÆÐŶÀ» Å¥¿¡ ÀúÀåÇϱâ
Àü¿¡ À̰ÍÀ» ÇØ¾ß ÇÑ´Ù. ÀÏ´Ü ÆÐŶÀÌ Å¥¿¡ ÀÖ°í ½ÇÇàÇÏ´Â ¾²·¹µå°¡ ½ºÇɶôÀ» ÇØÁ¦ÇÒ ¶§,
µå¶óÀ̹ö´Â ´Ù¸¥ ¾²·¹µåµéÀÌ Áï½Ã ÆÐŶµéÀ» Å¥¿¡¼ »©³¾ ¼ö ÀÖ´Ù°í »ý°¢ÇØ¾ß ÇÑ´Ù.
- Avoiding Deadlock Problems
À©µµ¿ìÁî 2000Àº ³×Æ®¿öÅ© µå¶óÀ̹ö´Â µ¿½Ã¿¡ ÇϳªÀÇ ½ºÇɶô ÀÌ»óÀ» À¯ÁöÇÏ´Â °ÍÀ»
Á¦ÇÑÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª, ¸¸¾à µå¶óÀ̹öÀÇ ÇϳªÀÇ ¼½¼ÇÀÌ ½ºÇɶô B¸¦ À¯ÁöÇÏ´Â µ¿¾È,
½ºÇɶô A¸¦ ¾ò´Â ½Ãµµ¸¦ ÇÏ°í ¶Ç ÇϳªÀÇ ¼½¼Ç¿¡¼ ½ºÇɶô A¸¦ À¯ÁöÇÏ´Â µ¿¾È ½ºÇɶô
B¸¦ ¾òÀ»·Á°í ÇÑ´Ù¸éÀº, µ¥µå¶ôÀÌ ¹ß»ýÇÑ´Ù. ¸¸¾à Çϳª ÀÌ»óÀÇ ½ºÇɶôµéÀ» ¾ò´Â´Ù¸éÀº,
µå¶óÀ̹ö´Â ȹµæÀÇ ¼ø¼¸¦ °ÈÇÔÀ¸·Î½á µ¥µå¶ôÀ» ÇÇÇØ¾ß ÇÑ´Ù. Áï, ¸¸¾à µå¶óÀ̹ö°¡
½ºÇɶô B¿¡ ¾Õ¼ ½ºÇɶô A¸¦ ¾òÀ»·Á°í ÇÏ´Â °ÍÀ» enforcing ÇÑ´Ù¸éÀº, À§¿¡ ¼³¸íÇÑ
»óȲÀº ¹ß»ýÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.
½ºÇɶôµéÀ» »ç¿ëÇÏ´Â °ÍÀº ÆÛÆ÷¸Õ½º¸¦ ¾ß±âÇϰí ÀϹÝÀûÀ¸·Î, µå¶óÀ̹ö´Â ¸¹Àº ½ºÇɶôµéÀ»
»ç¿ëÇÒ Çʿ䰡 ¾ø´Ù. °æ¿ì¿¡ µû¶ó, Ç×»ó ±¸º°µÇ´Â(¿¹¸¦ µé¾î º¸³»±â¿Í ¹Þ±â ÇÔ¼öµé)
ÇÔ¼öµéÀº µÎ°³ÀÇ ½ºÇɶôµéÀÌ »ç¿ëµÉ ¼ö ÀÖ±â À§ÇØ ÃÖ¼Ò(minor) overlapsÀ» °¡Áø´Ù.
Çϳª ÀÌ»óÀÇ ½ºÇɶôÀÇ »ç¿ëÀº µ¶¸³ÀûÀ¸·Î ºÐ¸®µÈ ÇÁ·Î¼¼¼¿¡¼ ÀÛ¿ëÇÏ´Â ÇÔ¼öµéÀ» Çã¶ôÇϱâ
À§ÇØ °¡Ä¡ÀÖ´Â tradeoff°¡ µÉ °ÍÀÌ´Ù.
- Timers
ŸÀ̸ӵéÀº ¿¬»êµéÀ» polling ȤÀº timing outÀ» À§ÇØ »ç¿ëµÇ¾îÁø´Ù. µå¶óÀ̹ö´Â
ŸÀ̸Ӹ¦ ¸¸µé°í ŸÀÌ¸Ó¿Í °ü·ÃµÈ ÇÔ¼ö¸¦ ¿¬°üÇÑ´Ù. °ü·ÃµÈ ÇÔ¼ö°¡ ŸÀ̸ӿ¡ ÀÇÇØ ÁöÁ¤µÈ
½Ã°£ÀÌ(period) ¸¸·áµÉ ¶§ È£ÃâµÇ¾îÁø´Ù. ŸÀ̸ӵéÀº one-shot ȤÀº periodicÀÌ µÉ ¼ö ÀÖ´Ù.
ÀÏ´Ü periodic ŸÀ̸Ӱ¡ ¼³Á¤µÉ ¶§, ¿Ü¿¬ÀûÀ¸·Î Ŭ¸®¾îµÉ ¶§±îÁö ¸ðµç ÁÖ±â(period)ÀÇ
¸¸·á¸¶´Ù °è¼ÓÇØ¼ fireÇÒ °ÍÀÌ´Ù. one-shot ŸÀ̸Ӵ fireµÈ °¢ ½Ã°£¸¶´Ù ¸®¼ÂµÉ °ÍÀÌ´Ù.
ŸÀ̸ӵéÀº NdisMInitializeTimer¸¦ È£ÃâÇÔÀ¸·Î½á ¸¸µé¾îÁö°í ÃʱâȵǾîÁö°í NdisMSetTimer
¸¦ È£ÃâÇÔÀ¸·Î½á ¼³Á¤µÇ¾îÁö°í NdisMSetPeriodicTimer¸¦ È£ÃâÇÔÀ¸·Î½á Áֱ⠟À̸Ӹ¦
¼³Á¤ÇÑ´Ù. ¸¸¾à ºñÁֱ⠟À̸Ӱ¡ »ç¿ëµÈ´Ù¸éÀº, NdisMSetTimer¸¦ È£ÃâÇÔÀ¸·Î½á ¸®¼ÂµÇ¾îÁ®¾ß
ÇÑ´Ù. ŸÀ̸Ӵ NdisMCancelTimer¸¦ È£ÃâÇÔÀ¸·Î½á Ŭ¸®¾îµÇ¾îÁø´Ù.
- Events
À̺¥Æ®µéÀº µÎ°³ÀÇ ¾²·¹µåµé ½ÇÇà »çÀÌ¿¡¼ ¿¬»êµéÀ» µ¿±âÈÇϱâ À§ÇØ »ç¿ëµÇ¾îÁø´Ù.
À̺¥Æ®´Â µå¶óÀ̹ö¿¡ ÀÇÇØ ÇÒ´çµÇ¾îÁö°í NdisIntializeEvent¸¦ È£ÃâÇÔÀ¸·Î½á ÃʱâȵǾîÁø´Ù.
IRQL PASSIVE_LEVEL¿¡¼ ½ÇÇàÇÏ´Â ¾²·¹µå´Â ±× ÀÚü¸¦ wait »óÅ·Π³õ±â À§ÇØ NdisWaitEvent¸¦
È£ÃâÇÑ´Ù. µå¶óÀ̹ö ¾²·¹µå°¡ À̺¥Æ®¸¦ ±â´Ù¸± ¶§, ±â´Ù¸®°í ÀÖ´Â À̺¥Æ®¿Í ¸¶Âù°¡Áö·Î
±â´Ù¸®±â À§ÇÑ ÃÖ´ë ½Ã°£À» ÁöÁ¤ÇÑ´Ù.
¾²·¹µåÀÇ ±â´Ù¸²Àº NdisSetEvent°¡ À̺¥Æ®¸¦ ½Ã±×³Î »óÅ·Π¾ß±âÇϱâ À§ÇØ È£ÃâµÇ¾îÁú ¶§,
ȤÀº óÀ½ ¹ß»ýÇØ¼ ÁöÁ¤µÈ ÃÖ´ë ±â´Ù¸² ½Ã°£ °£°ÝÀÌ ¸¸·áµÉ ¶§ ¸¸Á·µÇ¾îÁø´Ù.
ÀüÇüÀûÀ¸·Î, À̺¥Æ®´Â NdisSetEvent¸¦ È£ÃâÇÏ´Â Çù·Â ¾²·¹µå¿¡ ÀÇÇØ ¼³Á¤µÇ¾îÁø´Ù.
À̺¥Æ®µéÀº ¸¸µé¾îÁú ¶§ ºñ½Ã±×³Î »óÅ·ΠµÇ°í ±â´Ù¸®´Â ¾²·¹µåµéÀ» ½Ã±×³ÎÇϱâ À§ÇØ ¼³Á¤
µÉ °ÍÀÌ´Ù. À̺¥Æ®µéÀÌ NdisResetEvent°¡ È£ÃâµÉ ¶§±îÁö ½Ã±×³Î»óÅ·Π³²´Â´Ù.
|