मैं क्या इकट्ठा कर सकते हैं से:लिनक्स spin_lock बनाम NT KeAcquireSpinLock
- NT का
KeAcquireSpinLock
spin_lock_bh
के बराबर है: एक DISPATCH_LEVEL, अन्य मास्क नीचे आधा बीच में आता है करने के लिए IRQL को जन्म देती है - कार्यात्मक रूप में एक ही। जबकि एनटी वेरिएंट OldIrql को रखता है, लिनक्स संस्करण कहीं भी "wastertertsAlreadyMasked" स्टोर नहीं करता है। क्या इसका मतलब हैspin_unlock_bh
हमेशा उन्हें अनमास्क करता है? - एनटी का
KeAcquireInterruptSpinLock
spin_lock_irqsave
जैसा है।
spin_lock
की NT बराबर क्या है?
तो spin_unlock_bh
हमेशा बीच में आता है unmasks (NT बात में, हमेशा < DISPATCH_LEVEL को IRQL चला जाता है), इसका मतलब यह है spin_lock
KeAcquireSpinLockAtDpcLevel
के लिए समान है?
जैसा कि आपने बताया है - विंडो की लॉकिंग आईआरक्यूएल टिंकरिंग के माध्यम से प्राप्त की जाती है। तो यदि यह अवधारणा लिनक्स पर मौजूद नहीं है तो तर्क का पालन करके spin_lock वास्तव में प्रत्यक्ष समकक्ष नहीं है क्योंकि दोनों ओएस एक ही चीज़ को प्राप्त करने के लिए थोड़ा अलग तंत्र का उपयोग करते हैं – LordDoskias
आईआरक्यूएल इंटरप्ट-मास्किंग के शीर्ष पर एक अमूर्त है, और लिनक्स स्पष्ट रूप से वह है मैं क्या सोच रहा हूं कि परिदृश्य spin_lock किस लिए उपयोगी है, और एनटी लोग इस परिदृश्य का समर्थन क्यों नहीं करते? – Ilya
इसके अलावा, मैंने कुछ और चीजों के बाद अपने प्रश्न को संशोधित किया: spin_lock_bg। – Ilya