NdisAllocateSpinLock

VOID

  NdisAllocateSpinLock(

    IN PNDIS_SPIN_LOCK  SpinLock

    );

NdisAllocateSpinLock ÇÔ¼ö´Â NDIS_SPIN_LOCK ŸÀÔÀÇ º¯¼ö¸¦ ÃʱâÈ­ÇÑ´Ù. ±× º¯¼ö´Â nonISR µå¶óÀ̹ö ÇÔ¼öµé »çÀÌ¿¡¼­ °øÀ¯µÈ ¸®¼Ò½º·ÎÀÇ Á¢±ÙÀ» µ¿±âÈ­ÇϱâÀ§ÇØ »ç¿ëµÈ´Ù.

¸Å°³º¯¼ö

SpinLock
½ºÇɶôÀ» ±¸ÇöÇÑ ºÒÅõ¸íÇÑ(opaque) º¯¼ö¸¦ °¡¸®Å²´Ù.

ÁÖ¼®

µå¶óÀ̹ö°¡ NdisAcquireSpinLock, NdisDprAcquireSpinLock, ȤÀº NdisInterlockedXxx¸¦ È£ÃâÇϱâ Àü¿¡ µå¶óÀ̹ö´Â ÀÌ NdisXxx ÇÔ¼öÀÇ ¿ä±¸µÈ ÆÄ¶ó¹ÌÅÍ·Î ÀüÇØÁö´Â ½ºÇɶôÀ» ÃʱâÈ­Çϱâ À§Çؼ­ NdisAllocateSpinLockÀ» È£ÃâÇØ¾ß¸¸ÇÑ´Ù.

NdisAllocateSpinLockÀ» È£ÃâÇÑ ÈÄ¿¡ µå¶óÀ̹ö´Â ½ºÇɶôÀÌ º¸È£ÇÏ´Â ¸®¼Ò½º¸¦ µ¶Á¡ÀûÀ¸·Î »ç¿ëÇϱâÀ§ÇØ NdisAcquireSpinLockÀ» È£ÃâÇÒ ¼ö ÀÖ´Ù. ¸®¼Ò½º Á¢±ÙÀÌ ¿Ï·áµÉ ¶§ ´Ù¸¥ µå¶óÀ̹ö°¡ ½ºÇɶôÀ¸·Î º¸È£µÇ´Â ÀÚ¿ø¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô ÇϱâÀ§ÇØ µå¶óÀ̹ö´Â NdisReleaseSpinLockÀ» È£ÃâÇÑ´Ù.

ÀϹÝÀûÀÎ ±ÔÄ¢À¸·Î µå¶óÀ̹ö´Â ´Ù¸¥ Áß¿äÇÑ ºÎºÐ(critical sections)À» º¸È£Çϱâ À§ÇØ ´Ù¸¥ ¶ôÀ» »ç¿ëÇÏ¹Ç·Î½á ¼öÇà´É·ÂÀ» Çâ»ó½Ãų ¼ö ÀÖ´Ù. ±×¸®ÇÏ¿© µå¶óÀ̹ö´Â NdisAllocateSpinLockÀ» »ç¿ëÇØ¼­ Çϳª ÀÌ»óÀÇ ½ºÇɶôÀ» ÃʱâÈ­ÇÒ °ÍÀÌ´Ù.

µå¶óÀ̹ö°¡ ÇÒ´çÇÑ °¢°¢ÀÇ ½ºÇɶôÀº IRQL <= DISPATCH_LEVEL¿¡¼­ ½ÇÇàµÇ´Â µå¶óÀ̹ö ÇÔ¼öÀÇ µ¿½Ã Á¢±ÙÀ¸·ÎºÎÅÍ °øÀ¯ ¸®¼Ò½ºÀÇ ºÐ¸®µÈ ¼¼Æ®¸¦ º¸È£ÇÑ´Ù. ¿¹¸¦µé¾î ÆÐŶÀÇ ³»ºÎ Å¥¸¦ À¯ÁöÇÏ´Â µå¶óÀ̹ö´Â Å¥¸¦ º¸È£Çϱâ À§Çؼ­ ±×¸®°í ¸î¸î µå¶óÀ̹ö ÇÔ¼ö(MiniportISR, MiniportDisableInterrupt¸¦ Æ÷ÇÔÇÏÁö ¾Ê´Â)°¡ µå¶óÀ̹ö°¡ ÆÐŶÀ» ó¸®ÇÏ´Â µ¿¾È Á¢±ÙÇÏ´Â »óÅ º¯¼öÀÇ ¼¼Æ®¸¦ º¸È£Çϱâ À§Çؼ­ ÇϳªÀÇ ½ºÇɶôÀ» ÃʱâÈ­ÇÒ °ÍÀÌ´Ù.

µå¶óÀ̹ö´Â ¸®¼Ò½ºÀÇ µ¿ÀÏÇÑ ¼­ºê¼¼Æ®¸¦ º¸È£ÇϱâÀ§ÇØ µÎ °³ÀÇ ½ºÇɶôÀ» »ç¿ëÇØ¼­´Â ¾ÊµÈ´Ù. ¿©·¯°³ÀÇ ½ºÇɶôÀº ±³Âø»óŸ¦ ºó¹øÇÏ°Ô ÀÏÀ¸Å°´Â ¿øÀÎÀÌ µÇ±â ¶§¹®ÀÌ´Ù. µå¶óÀ̹ö°¡ ±³Âø»óŸ¦ ¹æÁöÇϵµ·Ï ¼³°èµÇ¾ú´Ù ÇÏ´õ¶óµµ ¿©·¯°³ÀÇ ½ºÇɶôÀº µå¶óÀ̹öÀÇ ¼öÇà´É·Â°ú I/O throughputÀÇ ¼º´É¿¡ ¹Ý´ëÇÏ´Â È¿°ú¸¦ ÀÏÀ¸Å²´Ù.

¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö´Â ±×°ÍÀÇ nonISR ÇÔ¼ö°¡ MiniportISR ȤÀº MiniportDisableInterrupt·Î °øÀ¯ÇÏ´Â ¸®¼Ò½º¸¦ º¸È£Çϱâ À§ÇØ ½ºÇɶôÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. MiniportISR ȤÀº MiniportDisableInterrupt¸¦ °¡Áö°í °øÀ¯µÈ ¸®¼Ò½º¿¡ Á¢±ÙÇϱâ À§ÇÏ¿© ¹Ì´ÏÆ÷Æ®´Â MiniportSynchronizeISR ÇÔ¼ö°¡ DIRQL¿¡¼­ ¸®¼Ò½º¸¦ Á¢±ÙÇϵµ·Ï ÇϱâÀ§ÇØ NdisMSynchronizeWithInterrupt¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.

µå¶óÀ̹ö°¡ ¸®¼Ò½º º¸È£¸¦ ´õÀÌ»ó ¿ä±¸ÇÏÁö ¾ÊÀ» ¶§ µå¶óÀ̹ö´Â NdisFreeSpinLockÀ» È£ÃâÇÑ´Ù. ¿¹¸¦µé¾î NICÀÌ Á¦°ÅµÇ°í µå¶óÀ̹ö°¡ NICÀ» À§ÇØ ÇÒ´çÇß´ø ¸®¼Ò½º¸¦ ÇØÁ¦ÇÒ ¶§.

½ºÇɶô ÇØÁ¦ÀÎ "Free"¿Í "Release"´Â ¾Ö¸ÅÇÏ´Ù. NdisFreeSpinLockÀº ½ºÇɶôµÈ ¸Þ¸ð¸®¸¦ Ŭ¸®¾îÇϹǷΠ´õÀÌ»ó ½ºÇɶôÀÌ ±¸ÇöµÇÁö ¾Ê´Â´Ù. NdisReleaseSpinLockÀ¸·Î ¾ò¾ú´ø ½ºÇɶôÀ» ÇØÁ¦ÇÏ´Â °ÍÀº ´Ü¼øÈ÷ ´Ù¸¥ ÀÛ¾÷¿¡¼­ ±× ½ºÇɶôÀ» ¾ò±âÀ§ÇØ ½º·¹µåÀÇ ½ÇÇàÀ» Çã¶ôÇÑ´Ù. NdisAllocateSpinLockÀÇ È£ÃâÀÚ´Â ¾î¶°ÇÑ IRQL¿¡¼­µµ ½ÇÇàµÉ ¼ö ÀÖ´Ù.

º¸Åë È£ÃâÀÚ´Â ÃʱâÈ­µ¿¾È IRQL PASSIVE_LEVEL¿¡¼­ ½ÇÇàÇÑ´Ù.