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