3.7 ºñµ¿±â I/O¿Í ¿Ï·á ÇÔ¼öµé

¸î¸î ³×Æ®¿öÅ© ¿¬»êµé¿¡¼­ inherent ÇÑ latency ¶§¹®¿¡, NIC µå¶óÀ̹ö¿¡ ÀÇÇØ Á¦°øµÈ ¸¹Àº upper-edge ÇÔ¼öµé°ú ÇÁ·ÎÅäÄÝ µå¶óÀ̹öÀÇ lower-edge ÇÔ¼öµéÀº ºñµ¿±â ¿¬»êÀ» Áö¿øÇϱâ À§ÇØ ¼³°èµÇ¾îÁ³´Ù. Çϵå¿þ¾î À̺¥Æ®°¡ ½Ã±×³ÎÇϰųª ¸î¸î ½Ã°£ ¼Òºñ ÀÓ¹«°¡ ¸¶Ä¡±â À§ÇØ loop³»¿¡¼­ ±â´Ù¸®´Â CPU »çÀÌŬµéÀ» ¼ÒºñÇÏ´Â °Íº¸´Ù ¿ÀÈ÷·Á, ³×Æ®¿öÅ© µå¶óÀ̹öµéÀº ºñµ¿±âÀûÀ¸·Î ´ëºÎºÐÀÇ ¿¬»êµéÀ» ´Ù·ç´Â ´É·Â¿¡ ÀÇÁ¸ÇÑ´Ù.

ºñµ¿±âÀûÀÎ ³×Æ®¿öÅ© I/O ´Â completion ÇÔ¼ö¸¦ »ç¿ëÇÔÀ¸·Î½á Áö¿øµÇ¾îÁø´Ù. ´ÙÀ½ÀÇ ¿¹´Â ³×Æ®¿öÅ© send ¿¬»êÀ» À§ÇÑ completion ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀ» ¼³¸íÇÏÁö¸¸Àº ÀÌ·¯ÇÑ °°Àº ¸ÞÄ¿´ÏÁòÀº ÇÁ·ÎÅäÄÝ È¤Àº NIC µå¶óÀ̹ö¿¡ ÀÇÇØ ÇàÇØÁö´Â ¸¹Àº ´Ù¸¥ ¿¬»êµéÀ» À§ÇØ Á¸ÀçÇÑ´Ù.

ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö°¡ NDIS¿¡°Ô NIC µå¶óÀ̹öÀÇ MiniportSend ÇÔ¼ö¿¡ ´ëÇÑ È£ÃâÀÇ °á°ú·Î ÆÐŶÀ» º¸³»µµ·Ï È£ÃâÇÒ ¶§, NIC µå¶óÀ̹ö´Â Áï½Ã ÀÌ ¿ä±¸¸¦ ¿Ï¼ºÇϱâ À§ÇØ ½ÃµµÇÒ ¼ö ÀÖ°í °á°ú·Î¼­ Àû´çÇÑ »óÅ °ªÀ» ¸®ÅÏÇÑ´Ù. µ¿±âÀû ¿¬»êÀ¸·Î, °¡´ÉÇÑ ÀÀ´äÀº º¸³»±âÀÇ ¼º°øÀûÀÎ ¿Ï¼ºÀ» À§ÇØ NDIS_STATUS_SUCCESSÀÌ°í ¸î¸î Á¾·ùÀÇ ½ÇÆÐ¸¦ °¡¸®Å°´Â NDIS_STATUS_RESOURCES, NDIS_STATUS_FAILUREÀÌ´Ù.

±×·¯³ª º¸³»±â ¿¬»êÀÌ NIC µå¶óÀ̹ö°¡(ȤÀº NDIS) ÆÐŶÀ» Å¥¿¡ ÀúÀåÇϰí NICÀÌ º¸³»±â ¿¬»êÀÇ °á°ú¸¦ ÀεðÄÉÀÌÆ®Çϱâ À§ÇØ ±â´Ù¸®´Â µ¿¾È ¿Ï¼ºÇϱâ À§ÇØ ½Ã°£ÀÌ Á» °É¸±¼ö ÀÖ´Ù. NIC µå¶óÀ̹ö MiniportSend ÇÔ¼ö´Â NDIS_STATUS_PENDINGÀÇ »óÅ °ªÀ» ¸®ÅÏÇÔÀ¸·Î½á ºñµ¿±âÀûÀ¸·Î ÀÌ·¯ÇÑ ¿¬»êÀ» ´Ù·ê ¼ö ÀÖ´Ù. NIC µå¶óÀ̹ö°¡ º¸³»±â ¿¬»êÀ» ¿Ï¼ºÇÒ ¶§ º¸³»¾îÁö´Â ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ Àü´ÞÇÏ´Â ¿Ï¼º ÇÔ¼öÀÎ NdisMSendComplete ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÌ·¯ÇÑ Á¤º¸´Â ¿Ï¼ºÀ» ½Ã±×³Î¸µÇÏ´Â ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö¿¡°Ô Àü´ÞµÇ¾îÁø´Ù.

¿Ï¼ºÇϱâ À§ÇØ È®Àå ½Ã°£À» ¿ä±¸ÇÒ ¼ö ÀÖ´Â ´ëºÎºÐÀÇ µå¶óÀ̹ö ¿¬»êµéÀº À¯»çÇÑ ¿Ï¼º ÇÔ¼ö·Î ºñµ¿±âÀû ¿¬»êÀ» Áö¿øÇÑ´Ù. ±×·¯ÇÑ ÇÔ¼öµéÀº NdisMXxxComplete ÇüÅÂÀÇ À̸§µéÀ» °¡Áø´Ù. ¸í¹éÇÑ º¸³»±â¿Í ¼ö½Å ÇÔ¼öµé·Î ¿Ï¼º ÇÔ¼öµéÀº ±¸¼ºÀ» Äõ¸®ÇÏ°í ¼³Á¤Çϱâ À§ÇØ, Çϵå¿þ¾î¸¦ ¸®¼ÂÇϱâ À§ÇØ »óŸ¦ ÀεðÄÉÀÌÆ®Çϰí, ¼ö½ÅµÈ µ¥ÀÌÅ͸¦ ÀεðÄÉÀÌÆ®ÇÏ°í ¼ö½ÅµÈ µ¥ÀÌÅ͸¦ Àü¼ÛÇϴµ¥ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.