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¿¡¼ ½ÇÇàÇÑ´Ù.
|