2017-03-27 13 views
5

के लिए कताई कर रही है मेरे कोड में एक स्पिन लॉक है जो दो धागे के बीच साझा किया जाता है। जब एक धागा ताला पकड़ रहा है और दूसरा धागा ताला पाने की कोशिश कर रहा है, तो दूसरा धागा एक प्रोसेसर पर कताई रखेगा। तो क्या होगा यदि प्रोसेसर पर एक बाधा होती है जहां थ्रेड लॉक के लिए कताई होती है?प्रोसेसर पर बाधा डालें जबकि एक और प्रक्रिया लॉक

मैंने लॉक लेने के लिए spin_lock() का उपयोग किया है और spin_lock_irqsave() नहीं है क्योंकि मैं स्थानीय प्रोसेसर पर बाधा को अक्षम नहीं करना चाहता हूं।

जैसा कि मैंने कर्नेल में spin_lock() फ़ंक्शन के कोड की जांच की है, मुझे लगता है कि प्रीम्प्शन डिफ़ॉल्ट रूप से अक्षम है और कोई भी आईआरक्यू नहीं है। तो मुझे लगता है कि कताई धागे पर बाधा को प्राथमिकता मिलेगी। तो स्पिन लॉक का अर्थ गैर-नींद लॉक होने का क्या अर्थ होगा?

+1

यह कताई के बाद व्यवधान सेवा नियमित लौटे जारी रहेगा? – joop

उत्तर

5

तो क्या होगा यदि प्रोसेसर पर एक बाधा होती है जहां थ्रेड लॉक के लिए कताई होती है?

बाधा उत्पन्न होगी। इसके लिए कोई कारण नहीं है। इंटरप्ट रिटर्न के बाद, प्रक्रिया कताई पर वापस जायेगी।

तो स्पिन लॉक का एक गैर नींद लॉक होने का क्या अर्थ होगा?

इसका मतलब है कि, लॉक को रिलीज़ होने की प्रतीक्षा करने वाले धागे एक थ्रेड लूप को अन्य थ्रेड प्रोसेसर का उपयोग करने के लिए सोने के बजाय लॉक स्टेट की जांच करेंगे।

सोना तब होता है जब कोई थ्रेड प्रोसेसर उत्पन्न करता है या तो संसाधन के अनुरोध के परिणामस्वरूप जो उपलब्ध नहीं है या पूर्व-खाली होने के परिणामस्वरूप होता है। क्योंकि यह एक धागा एक स्पिन ताला पकड़े सोने के लिए जाने के लिए के लिए एक आपदा होगा:

शुफ़ा धागे कि स्पिन ताले (नहीं धागे कि ताला के लिए इंतजार कर रहे हैं कताई टिप्पणी) पकड़ के लिए अक्षम है। एक दो सीपीयू प्रणाली की कल्पना करें जहां एक थ्रेड एक ताला रखता है और दूसरा उस पर कताई कर रहा है और पहला थ्रेड तीसरे धागे के लिए बदल जाता है जो लॉक हासिल करने का भी प्रयास करता है। अचानक आपके पास दो धागे कताई होते हैं और सिस्टम प्रभावी ढंग से तब तक रुक जाएगा जब तक उनमें से एक को बाहर नहीं किया जाता है। सबसे खराब स्थिति परिदृश्य में, सिस्टम डेडलॉक होगा।

स्पिन ताले इंटरप्ट को अक्षम कर सकते हैं क्योंकि स्पिन लॉक प्राप्त करने के लिए बाधाओं को बाधित करने की अनुमति है। यदि कोई बाधा एक प्रोसेसर पर चल रहे थ्रेड द्वारा रखे गए स्पिन लॉक को प्राप्त करने का प्रयास करती है, तो प्रोसेसर डेडलॉक हो जाएगा।

स्पिन ताले के बारे में अधिक जानने के लिए यहां एक अच्छा संसाधन है।

http://www.makelinux.net/ldd3/chp-5-sect-5

+0

क्या आपका मतलब था कि जब इंटरप्ट होता है, तो आईएसआर निष्पादित किया जाएगा, और कताई धागा उस प्रोसेसर पर स्पिन करने में सक्षम नहीं होगा? यदि हां, तो आईएसआर (इंटरप्ट सेवा दिनचर्या) निष्पादित होने पर अब उस कताई धागे की स्थिति क्या होगी? उपर्युक्त उत्तर के लिए धन्यवाद, यह अनुवर्ती प्रश्न मेरी क्वेरी को पूरा करेगा। – Saturn

+0

किसी बाधा के साथ क्या होता है यह है कि चलने वाला थ्रेड इंटरप्ट सेवा दिनचर्या पर कूदता है और जब आईएसआर खत्म होता है, तो यह ठीक उसी स्थान पर जाता है जहां यह चलने वाले धागे में था। यानी यह कताई फिर से शुरू होता है। – JeremyP

+0

आईएसआर निष्पादित होने पर थ्रेड की स्थिति के बारे में कोई विचार है? – Saturn

संबंधित मुद्दे