2009-12-07 7 views
19

संकेत मिला है यदि मैं गलत हूं तो कृपया मुझे सही करें।प्रक्रिया को कैसे पता चलता है कि इसे

जहाँ तक मुझे पता है, संकेत पीढ़ी और संकेत वितरण 2 अलग बातें हैं: यहाँ संकेतों के बारे में मेरी समझ है। आदेश में एक संकेत उत्पन्न करने के लिए, ओएस बस एक प्रक्रिया के प्रक्रिया नियंत्रण ब्लॉक (पीसीबी) में बनाए रखा एक bitarray में बिट सेट। प्रत्येक बिट एक विशेष संकेत, और से मेल खाती है जब एक सा सेट किया गया है, इसका मतलब है संकेत बिट करने के लिए इसी है लंबित है।

डिलिवरी: उपयोगकर्ता मोड में एक प्रक्रिया के लिए नियंत्रण स्थानांतरित वापस करने से पहले, कर्नेल हमेशा लंबित संकेत इस प्रक्रिया के लिए जाँच करता है। यह चेक कर्नेल अंतरिक्ष में होने चाहिए क्योंकि कुछ संकेत एक प्रक्रिया के द्वारा कभी नहीं अनदेखा किया जा सकता - अर्थात् SIGSTOP और SIGKILL।

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

कहें कि बहु प्रोसेसर मशीन है और इसलिए असली है समांतरता यानी कई प्रक्रियाएं एक ही समय में निष्पादित की जा रही हैं। प्रक्रिया पी 1 सीपीयू 1 पर निष्पादित कर रहा है और प्रक्रिया पी 2 सीपीयू 2 पर निष्पादित कर रही है और अब पी 2 (पर्याप्त विशेषाधिकार रखने) को पी 1 को संसाधित करने के लिए संकेत भेजता है। क्या यह सिग्नल अभी पी 1 पर पहुंचाया जाएगा या पी 1 के बाद इसे किसी कारण से सीपीयू छोड़ने के बाद वितरित किया जाएगा और फिर कुछ समय बाद कर्नेल द्वारा फिर से निर्धारित किया जाएगा और फिर यह सिग्नल पी 1 को संसाधित करने के लिए वितरित किया जाएगा।

कृपया नहीं कहता इस सवाल का कार्यान्वयन निर्भर है। यदि आपको लगता है कि सही उत्तर कार्यान्वयन परिभाषित किया गया है तो मैं लिनक्स, फ्रीबीएसडी या किसी भी * निक्स प्लेटफ़ॉर्म में उत्तर ढूंढ रहा हूं जिसके लिए आपको ज्ञान है।

धन्यवाद आपकी मदद और धैर्य :)

सादर

लाली

उत्तर

12

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

सोलारिस पर, कार्यान्वयन कुछ हद तक समान है, हालांकि यह हार्डवेयर जाल के आधार पर सिंक्रोनस सिग्नल भी प्रदान करता है - सिंक्रोनस सिग्नल को उस धागे पर पहुंचाया जाता है जो जाल उठाता है, जबकि एसिंक्रोनस सिग्नल ऊपर वर्णित तरीके से काम करते हैं।

Linux does something similar सोलारिस (मुझे यकीन नहीं है कि उस संदर्भ में निष्कर्ष चर्चा से कैसे चलता है, लेकिन यह चर्चा उपयोगी है)।

Posix.4 भी वास्तविक समय संकेतों को परिभाषित करता है, लेकिन मैं उन के साथ काम नहीं किया।

+0

क्या इसका मतलब यह है कि सिग्नल केवल तब ही वितरित किया जाता है जब उस प्रक्रिया को निर्धारित किया जाता है? क्या होगा यदि प्रक्रिया सीपीयू गहन है और वर्तमान में मशीन के सीपीयू 1 पर चल रहा है, तो 2 सीपीयू है और शेड्यूलिंग गैर प्रीपेप्टिव फीफो है, इसलिए प्रक्रिया को कोई संकेत नहीं मिलेगा, भले ही सीपीयू 2 पर चल रही प्रक्रिया सिग्नल भेजती है (प्रक्रिया के रूप में cpu1 पर कभी cpu1 को छोड़ देता है)? क्या यह ? – ghayalcoder

+0

@ ग्राहम: क्यों 2 2 कोर मशीन पर कभी नहीं चलेंगे? – SiegeX

+0

क्षमा करें @ सिएजेक्स, आप सही हैं, इसलिए मैंने अपनी टिप्पणी हटा दी। @ इली की सजा का विश्लेषण करने की कोशिश करते समय मैं उलझन में आया। –

3

संक्षिप्त उत्तर है - हाँ, प्रक्रिया केवल अगले निर्धारित सीपीयू टाइम्सलाइस पर सिग्नल का ज्ञान प्राप्त करें।

प्रक्रिया को कैसे पता चला है सिग्नल प्राप्त हुआ है - यह सिगप्रोकमास्क (2) कह सकता है।

0

प्रक्रिया P1 cpu 1 पर निष्पादित हो रहा है और इस प्रक्रिया P2 cpu2 और अब प्रक्रिया P2 (पास पर्याप्त विशेषाधिकार) पर निष्पादित हो रहा है P1 कार्रवाई करने के लिए एक संकेत भेजता है। क्या यह सिग्नल अभी पी 1 पर पहुंचाया जाएगा या पी 1 के बाद इसे किसी कारण से सीपीयू छोड़ने के बाद वितरित किया जाएगा और फिर कुछ समय बाद कर्नेल द्वारा फिर से निर्धारित किया जाएगा और फिर यह सिग्नल पी 1 को संसाधित करने के लिए वितरित किया जाएगा।

जहां तक ​​मुझे पता है कि पिछले लिनक्स कर्नेल निष्पादन पर पी 1 को रोका जा सकता है जब पी 2 उत्सर्जक सिग्नल और सिग्नल तुरंत वितरित किया जाएगा। वास्तविक समय संकेतों के लिए यह सच हो सकता है

0

यदि मुझे सही याद है, तो 8085 निर्देश की अंतिम टी स्थिति के दौरान बाधा आगमन बिट की जांच की जाती है। तो सिग्नल आगमन पर वास्तविक बाधा उत्पन्न करने का कोई तरीका होना चाहिए, या सिग्नल बिट की जांच होने से पहले एक (निरंतर?) कोड टुकड़ा होना चाहिए।

दुर्भाग्य से, ऐसा लगता है कि कुछ कर्नेल व्यवहार संबंधी प्रश्नों का उत्तर देने का एकमात्र तरीका स्रोत कोड से गुजरना है, क्योंकि वे "कार्यान्वयन निर्भर" हैं। कंप्यूटर प्रोग्रामिंग वास्तव में उत्पीड़न से कम नहीं है - क्या पेशे का चयन करना है!

बस सही होने का प्रयास करें, और आशा है कि यह वेबसाइट मदद करेगी।

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

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