2015-04-13 8 views
5

में किसी दिए गए फ़ंक्शन को एक संदर्भित फ़ंक्शन कहा जाता है, क्या किसी दिए गए फ़ंक्शन को किसी इंटरप्ट संदर्भ में या प्रक्रिया संदर्भ से कहा जाता है या नहीं, यह पहचानने के लिए एक सीधी आगे की व्यवस्था है। यह सवाल का पहला हिस्सा है। दूसरा भाग यह है: मैं 2 प्रक्रियाओं को कैसे सिंक्रनाइज़ कर सकता हूं, जो कि इंटरप्ट संदर्भ में है और दूसरा जो प्रक्रिया संदर्भ में है। अगर मेरी समझ सही है, तो हम प्रक्रिया को बाधित संदर्भ में प्रक्रिया के लिए म्यूटेक्स का उपयोग नहीं कर सकते क्योंकि इसे सोने की अनुमति नहीं है। दूसरी ओर, अगर मैं स्पिनलॉक्स का उपयोग करता हूं, तो दूसरी प्रक्रिया सीपीयू चक्र का उपयोग करेगी। इन 2 प्रक्रियाओं को सिंक्रनाइज़ करने का सबसे अच्छा तरीका क्या है। अगर मेरी समझ पूरी तरह से गलत है तो मुझे सही करें।लिनक्स कर्नेल

उत्तर

4

आप बता सकते हैं कि in_irq() फ़ंक्शन का उपयोग कर आईआरक्यू हैंडलर के रूप में कार्य चलाया गया था या नहीं। लेकिन मुझे नहीं लगता कि इसका इस्तेमाल करने के लिए यह एक अच्छा अभ्यास है। आपको केवल कोड से देखना चाहिए जिसमें आपका फ़ंक्शन चल रहा है। अन्यथा मैं कहूंगा कि आपके कोड में खराब डिज़ाइन है।

तुल्यकालन तंत्र के लिए के रूप में - तुम सही हो, क्योंकि आप परमाणु संदर्भ में तुल्यकालन करने के लिए (उदाहरण के लिए व्यवधान) की जरूरत है आप, spinlock उपयोग करने के लिए - नहीं है कि आप यहाँ पसंद के बहुत है। आप यह भी सही हैं कि स्पिनलॉक की प्रतीक्षा करते समय बहुत सी CPU चक्र बर्बाद हो जाएंगे, इसलिए आपको लॉक के नीचे अपने कोड की मात्रा को कम और कम करना चाहिए।

0

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

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