2012-07-30 11 views
9
  1. जब एक प्रक्रिया किसी अन्य प्रक्रिया में सिग्नल भेजती है, तो कौन सी परिस्थितियों में प्रक्रिया को प्राप्त करने के लिए पुन: निर्धारित किए जाने तक प्रतीक्षा की जाती है?
  2. स्थापित सिग्नल हैंडलर को किस परिस्थिति में तुरंत शामिल किया जाता है?
  3. सिग्नल उठाते समय केवल सिग्नल हैंडलर को सीधे कॉल करने की तुलना में प्रक्रिया कितनी अधिक होती है?

उत्तर

5

संकेतों के वितरण के बारे में, TLPI कहा गया है कि संकेत हैं "सामान्य रूप से" को जन्म दिया है जब एक कार्य अगले, निर्धारित है जब उपयोगकर्ता मोड पर कर्नेल मोड से स्विच, या "तुरंत" जब काम पहले से ही (शायद तुरंत चल रहा है " "पहले एक बाधा फायर करके होना होगा, अन्यथा यह कैसे कर सकता है)। खैर, जो भी इसका मतलब है, यह सख्ती से बाध्यकारी नहीं है, लेकिन यह क्या होता है इसके बहुत करीब है।

आपको रीयलटाइम और "सामान्य" सिग्नल के साथ-साथ "सामान्य" संकेतों के बीच अंतर करना होगा जो सिंक्रनाइज़ रूप से उत्पन्न होते हैं, अधिकांश समय हार्डवेयर ईवेंट (जैसे सेगमेंटेशन गलती) और जो नहीं हैं (वे 'अतुल्यकालिक रूप से genereated)।

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

रीयलटाइम सिग्नल के कार्यान्वयन (जो कार्यान्वयन-निर्भर लंबाई तक कतारबद्ध करने के लिए आवश्यक हैं) स्पष्ट रूप से अधिक जटिल है।

हार्डवेयर ईवेंट (उदा। Segfault) के कारण होने वाले सिग्नल सिंक्रनाइज़ रूप से उत्पन्न होते हैं, वैसे ही जैसे प्रक्रिया kill स्वयं (अध्याय 22.4 टीएलपीआई) कहा जाता है, यानी उन्हें दो कारणों से "तत्काल" दिया जाता है। सबसे पहले, यह कुछ और करने के लिए समझ में नहीं आता है, और दूसरा ट्रैप हैंडलर लौटने पर पहले से ही कर्नेल/उपयोगकर्ता स्विच हो रहा है। तो वितरण हमेशा वैसे भी "तुरंत" होता है।

0

असल में, संकेत असीमित हैं। जब सिग्नल प्राप्त होता है तो वे सिग्नल हैंडलर पर कोड निष्पादित करने पर भरोसा करते हैं क्योंकि आप कभी नहीं जानते कि यह प्रक्रिया शेड्यूलर जैसे कारकों के कारण होगा। सिग्नल भेजने की विलंबता हार्डवेयर/सॉफ़्टवेयर इंटरप्ट पर आधारित होती है, जो घड़ी की गति पर आधारित होती है।

यदि आप यह जानना चाहते हैं कि लिनक्स पर कुछ कैसे लागू किया गया है, तो POSIX मानकों को देखें।

सिग्नल पर महान जानकारी:

http://www.gnu.org/software/libc/manual/html_node/index.html#toc_Signal-Handling

जब एक संकेत उत्पन्न होता है, यह लंबित हो जाता है। आम तौर पर केवल थोड़े समय के लिए लंबित रहता है और फिर प्रक्रिया को संकेतित किया गया था। हालांकि, अगर उस तरह का सिग्नल वर्तमान में अवरुद्ध अवरुद्ध हो सकता है, तो यह अनिश्चित काल तक लंबित रहेगा - जब तक कि सिग्नल अनब्लॉक किए गए हैं। एक बार अनब्लॉक हो जाने पर, इसे तुरंत वितरित किया जाएगा।

एक और अंश:

जब संकेत दिया जाता है, अभी या एक लंबी विलंब के बाद कि क्या, निर्दिष्ट क्रिया कि संकेत के लिए लिया जाता है।

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