NdisAcquireSpinLock

VOID

  NdisAcquireSpinLock(

    IN PNDIS_SPIN_LOCK  SpinLock

    );

NdisAcquireSpinLock ÇÔ¼ö°¡ ½ºÇɶôÀ» ¾òÀ¸¹Ç·Î½á È£ÃâÀÚ´Â ¿©·¯ µå¶óÀ̹öÀÇ ÇÔ¼öµéÀÌ °øÀ¯ÇÏ´Â ¸®¼Ò½º·ÎÀÇ À¯ÀÏÇÑ Á¢±ÙÀ» ¾ò´Â´Ù.

¸Å°³º¯¼ö

SpinLock
È£ÃâÀÚ¿¡ ÀÇÇØ¼­ ÀÌ¹Ì ÃʱâÈ­µÈ ºÒÅõ¸íÇÑ(opaque) ½ºÇɶôÀ» °¡¸®Å²´Ù.

ÁÖ¼®

µå¶óÀ̹ö´Â ¾î¶² ´Ù¸¥ ½ºÇɶô ÇÔ¼öµéÀÌ È£ÃâµÇ±â Àü¿¡ NdisAllocateSpinLock ÇÔ¼ö¸¦ °®´Â NDIS_SPIN_LOCK ŸÀÔÀÇ º¯¼öµéÀ» ÃʱâÈ­ÇØ¾ß¸¸ÇÑ´Ù. µå¶óÀ̹ö´Â »ç¿ëÇÏ´Â ½ºÇɶôÀ» À§ÇØ °íÀ¯ÀÇ ÀúÀå°ø°£À» Á¦°øÇؾßÇÑ´Ù.

NdisAcquireSpinLockÀ¸·Î ½ºÇɶôÀ» ¾òÀº ÈÄ¿¡ È£ÃâÀÚ´Â NdisReleaseSpinLockÀ» »ç¿ëÇØ¼­ ½ºÇɶôÀ» ÇØÁ¦Çؾ߸¸ÇÑ´Ù. µå¶óÀ̹ö´Â °¢°¢ÀÇ NdisAcquireSpinLock È£Ãâ¿¡ µû¸¥ NdisReleaseSpinLockÀ» È£ÃâÇØ¾ßÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ±³Âø»óŰ¡ ÀϾ´Ù.

NdisAcquireSpinLockÀ¸·Î ¾òÀº ½ºÇɶôÀº NdisReleaseSpinLockÀ¸·Î ÇØÁ¦µÇ¾ßÇÑ´Ù. NdisDprAcquireSpinLockÀ¸·Î ¾òÀº ½ºÇɶôÀº NdisDprReleaseSpinLockÀ¸·Î ÇØÁ¦µÇ¾ßÇÑ´Ù.

µå¶óÀ̹ö´Â °áÄÚ È®ÀåµÈ ±â°£(¸î¸îÀÇ ¸í·É ÀÌ»óÀ¸·Î) µ¿¾È ½ºÇɶôÀ» Àâ°í ÀÖÁö ¸øÇÑ´Ù. 25 ¸¶ÀÌÅ©·ÎÃÊ ÀÌ»ó ½ºÇɶôÀ» Àâ°í ÀÖÀ¸¸é ½Ã½ºÅÛ°ú µå¶óÀ̹ö ¸ðµÎ ±× ¼öÇàÀÌ Èûµé¾îÁø´Ù.

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

NdisAcquireSpinLockÀÇ È£ÃâÀÚ´Â IRQL <= DISPATCH_LEVEL¿¡¼­ ½ÇÇàÇÑ´Ù.