लिनक्स कर्नेल में उपलब्ध प्रत्येक स्पिन लॉक का कच्चा संस्करण है, मैं इसका उपयोग जानना चाहता हूं? जैसे:spin_lock और raw_spin_lock() के बीच क्या अंतर है?
raw_spin_lock(), raw_spin_lock_irqsave() आदि
लिनक्स कर्नेल में उपलब्ध प्रत्येक स्पिन लॉक का कच्चा संस्करण है, मैं इसका उपयोग जानना चाहता हूं? जैसे:spin_lock और raw_spin_lock() के बीच क्या अंतर है?
raw_spin_lock(), raw_spin_lock_irqsave() आदि
spin_lock*
कार्यों कर raw_spin_lock*
के समान के साथ साथ, जब लॉक डिबगिंग (CONFIG_DEBUG_LOCK_ALLOC) सक्षम है, इस तरह की जांच के रूप में ताला के संचालन के लिए कुछ अतिरिक्त क्रम चेक, प्रदर्शन डेडलॉक के लिए। ये चेक lockdep
सबसिस्टम द्वारा किए जाते हैं।
एक नियम के रूप में, spin_lock*
फ़ंक्शंस का उपयोग तब भी किया जाना चाहिए जब यह संभव हो।
केवल बहुत ही मुश्किल लॉकिंग नीति के दुर्लभ मामलों में, जब lockdep
झूठी चेतावनियां उत्पन्न कर सकता है, raw_spin_lock*
फ़ंक्शंस का उपयोग किया जा सकता है।
इसके अलावा, raw_*
कार्यों को स्मृति उपयोग या perfomance कारणों को कम करने के लिए आम लोगों को प्राथमिकता दी जा सकती है। लेकिन यह वास्तविक समय/स्थान माप होना चाहिए, इन अनुकूलन का उपयोग करने से महत्वपूर्ण परावर्तित परावर्तित होना चाहिए।
मुख्य अंतर यह है spin_lock
गैर RT के लिए raw_spin_lock
वेरिएंट के लिए नक्शे वेरिएंट जबकि अगर CONFIG_PREEMPT_RT
सेट कर दिया जाता है, तो वे rt_spin_lock को जो सो सकते हैं नक्शा है।
हम आरटी हैं या नहीं, इस पर निर्भर करते हुए spin_lock नींद से बनाम गैर-नींद भिन्नता से decoupling करके, spin_lock API को कर्नेल कोड में लगातार रखा जा सकता है।
जब लॉकडेप झूठी चेतावनियां उत्पन्न कर सकता है? और in -rt सामान्य spin_lock सो सकते हैं जबकि raw_spin_lock नहीं है, क्या यह सच है? –