ट्रैप और इंटरप्ट में क्या अंतर है?


159

ट्रैप और इंटरप्ट में क्या अंतर है?

यदि विभिन्न प्रणालियों के लिए शब्दावली अलग है, तो x86 पर उनका क्या अर्थ है?

जवाबों:


203

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

एक बाधा कुछ हार्डवेयर द्वारा उत्पन्न होती है (हार्ड डिस्क, ग्राफिक्स कार्ड, I / O पोर्ट आदि जैसे उपकरण)। ये अतुल्यकालिक हैं (यानी वे उपयोगकर्ता कोड में अनुमानित स्थानों पर नहीं होते हैं) या "निष्क्रिय" क्योंकि अंत में बाधा हैंडलर को उनके होने का इंतजार करना पड़ता है।

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


5
यह दिलचस्प है कि lxr.free-electrons.com/source/arch/x86/kernel/… द्वारा शून्य को विभाजित करना एक हार्डवेयर रुकावट के रूप में आरंभ किया गया है, ऐसा क्यों है?
एलेक्स क्रेमर

8
क्योंकि यह वास्तव में एक बाधा है जो सीपीयू भेजता है जब ALU को यह समस्या मिलती है। बस एक विभाजन दोष की तरह। हालांकि सभी गणित की त्रुटियां व्यवधान उत्पन्न नहीं करती हैं (अतिप्रवाह नहीं होता है), हालांकि।
एरोन दिगुल्ला

4
यह समझ आता है। लेकिन फिर, क्या थोड़ा भ्रमित है कि क्यों पहले लिनक्स कर्नेल में इसे एक सॉफ्टवेयर जाल के रूप में आरंभीकृत किया गया था: set_trap_gate (0, और divide_error);
एलेक्स क्रिमेर

11
आपका क्या मतलब है, " थोड़ा भ्रमित"? यह बहुत भ्रामक है :-) यहाँ समस्या यह है कि शून्य से विभाजित करना एक हार्डवेयर व्यवधान (IRQ / वेक्टर 0) है, लेकिन कर्नेल डेवलपर्स के पास इसे चुनने के तरीके के कई विकल्प हैं। तो एक उपयोगकर्ता प्रक्रिया से, यह एक जाल है लेकिन सीपीयू की ओर से, यह एक बाधा है। कौन सही है? कोई नहीं? दोनों?
एरोन दिगुल्ला

3
बेशक, यह x86 सीपीयू के लिए ही सही है। अन्य CPU अलग तरीके से काम करते हैं।
एरोन दिगुल्ला

110

जाल और व्यवधान निकट से संबंधित हैं। जाल एक प्रकार का अपवाद हैं , और अपवाद व्यवधान के समान हैं।

इंटेल x86 दो अतिव्यापी श्रेणियों, वक्टर्ड घटनाओं ( बनाम अपवादों को बाधित करता है ), और अपवाद वर्गों ( दोष बनाम जाल बनाम गर्भपात ) को परिभाषित करता है ।

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

सदिश घटनाएँ

वेक्टर की गई घटनाएँ ( व्यवधान और अपवाद ) प्रोसेसर के प्रोसेसर की अधिकांश स्थिति को बचाने के बाद एक बाधा हैंडलर में कूदने का कारण बनती हैं (पर्याप्त रूप से ऐसा करना कि निष्पादन बाद में उस बिंदु से जारी रह सकता है)।

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

बीच में आता है

हार्डवेयर से संकेतों के जवाब में, एक कार्यक्रम के निष्पादन के दौरान यादृच्छिक समय पर व्यवधान उत्पन्न होते हैं। सिस्टम हार्डवेयर प्रोसेसर में बाहरी घटनाओं को संभालने के लिए इंटरप्ट का उपयोग करता है, जैसे कि परिधीय उपकरणों के लिए अनुरोध। सॉफ़्टवेयर INT n निर्देश को निष्पादित करके भी व्यवधान उत्पन्न कर सकता है।

अपवाद

अपवाद तब होते हैं जब प्रोसेसर किसी निर्देश को निष्पादित करते समय एक त्रुटि स्थिति का पता लगाता है, जैसे कि शून्य द्वारा विभाजन। प्रोसेसर विभिन्न प्रकार की त्रुटि स्थितियों का पता लगाता है जिसमें सुरक्षा उल्लंघन, पृष्ठ दोष और आंतरिक मशीन दोष शामिल हैं।

अपवाद वर्गीकरण

अपवादों को दोष , जाल , या गर्भपात के रूप में वर्गीकृत किया जाता है , जिस तरह से उन्हें सूचित किया जाता है और क्या यह निर्देश कि अपवाद के कारण कार्यक्रम या कार्य निरंतरता के नुकसान के बिना फिर से शुरू किया जा सकता है।

सारांश: जाल अनुदेश सूचक को बढ़ा देते, दोष नहीं करते हैं, और रोकता 'विस्फोट'।

जाल

एक जाल एक अपवाद है जो फँसाने वाले अनुदेश के निष्पादन के तुरंत बाद रिपोर्ट किया जाता है। जाल कार्यक्रम की निरंतरता के नुकसान के बिना एक कार्यक्रम या कार्य के निष्पादन की अनुमति देते हैं। ट्रैप हैंडलर के लिए रिटर्न पता ट्रैपिंग इंस्ट्रक्शन के बाद निष्पादित किए जाने वाले निर्देश को इंगित करता है।

दोष

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

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

बीच में बंद करें

एक गर्भपात एक अपवाद है जो हमेशा अपवाद के कारण निर्देश के सटीक स्थान की रिपोर्ट नहीं करता है और अपवाद के कारण प्रोग्राम या कार्य को पुनरारंभ करने की अनुमति नहीं देता है। एब्स का उपयोग गंभीर त्रुटियों, जैसे हार्डवेयर त्रुटियों और सिस्टम तालिकाओं में असंगत या अवैध मूल्यों की रिपोर्ट करने के लिए किया जाता है।

एज केस

सॉफ्टवेयर को बाधित किया गया (INT निर्देश द्वारा ट्रिगर) एक जाल की तरह व्यवहार करता है। प्रोसेसर द्वारा अपने राज्य को बचाने से पहले निर्देश पूरा हो जाता है और बाधा हैंडलर से कूद जाता है।


6
यह एक ऐसा अच्छा जवाब है जो मैं सकारात्मक था "एक नए उपयोगकर्ता से देर से जवाब" समीक्षा कतार मुझे यह सुनिश्चित करने के लिए एक परीक्षण दे रही थी कि मैं ध्यान दे रहा हूं।
नौमेनन

1
धन्यवाद! यह मेरे लिए बहुत
मायने रखता है

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

1
PPC a RGBecture पुस्तक स्किम्ड , और ऐसा लगता है कि उनकी परिभाषाएं काफी हद तक ओवरलैप हो रही हैं। उनके पास किनारे के मामलों के लिए नए नाम हैं, और एक अलग श्रेणी के हिस्से के बजाय, व्यवधान के एक उपप्रकार जैसे अपवादों का इलाज करते हैं।
रूतफजॉर्ड

1
मुझे लगता है कि यह उत्तर इसका सबसे अच्छा वर्णन करता है। यह धुंधली रेखा पर चर्चा करता है जो दोनों के बीच मौजूद हो सकती है। और उल्लेख है कि पृष्ठ दोष सीपीयू reattempting एक अनुदेश में एक जाल अनुदेश पर फिर से चलता है और आगे बढ़ता है।
in70x

9

सामान्यतया, अपवाद, दोष, गर्भपात जैसे शब्द, जाल , और व्यवधान सभी समान अर्थ होता है और उन्हें "व्यवधान" कहा जाता है।

ट्रैप और इंटरप्ट के बीच अंतर करने के लिए आ रहा है:

ट्रैप: क्या एक प्रोग्रामर ने पहल की है और एक विशेष हैंडलर रूटीन पर नियंत्रण का अपेक्षित हस्तांतरण किया है। (पूर्व के लिए: 80x86 INT निर्देश एक अच्छा उदाहरण है)

जहाँ तक

इंटरप्ट (हार्डवेयर): क्या CPU के लिए बाहरी हार्डवेयर घटना पर आधारित एक प्रोग्राम कंट्रोल रुकावट है (उदाहरण के लिए: कीबोर्ड पर एक कुंजी दबाकर या टाइमर चिप पर एक समय बाहर)


अच्छी परिभाषाएँ। स्रोत?
अलेक्सलोमा87

6

एक जाल एक विशेष प्रकार का व्यवधान है जिसे आमतौर पर सॉफ्टवेयर रुकावट के रूप में जाना जाता है । एक रुकावट एक अधिक सामान्य शब्द है जो दोनों हार्डवेयर इंटरप्ट को कवर करता है (हार्डवेयर डिवाइस से इंटरप्ट) और सॉफ्टवेयर इंटरप्ट ( सॉफ्टवेयर से इंटरप्ट ) जैसे जाल )।


4
यह और भी अधिक मायने रखता है कि कुछ लेखक (तेनबाम) "हार्डवेयर ट्रैप्स" का उल्लेख करते हैं। अगर हमारे पास हार्डवेयर ट्रैप और सॉफ्टवेयर में रुकावट हो सकती है, तो स्पष्ट रूप से परिभाषाएं काफी खराब हैं और किसी भी तरह से जा सकते हैं, हमेशा हार्डवेयर या सॉफ्टवेयर की आवश्यकता होती है।
११

3

एक जाल कार्यक्रमों की तरह कोड द्वारा कहा जाता है और उदाहरण के लिए ओएस दिनचर्या (यानी सामान्य रूप से तुल्यकालिक) को कॉल करने के लिए उपयोग किया जाता है। एक घटनाओं को इंटरप्ट कहा जाता है (कई बार हार्डवेयर, डेटा प्राप्त करने वाले नेटवर्क कार्ड, या सीपीयू टाइमर), और - जैसा कि नाम से पता चलता है - सामान्य नियंत्रण प्रवाह को बाधित करता है, क्योंकि सीपीयू को ड्राइवर रूटीन को संभालने के लिए स्विच करना पड़ता है। घटना।


2

एक बाधा प्रणाली के भीतर एक हार्डवेयर-जनित परिवर्तन-प्रवाह है। एक बाधा हैंडलर को रुकावट के कारण से निपटने के लिए बुलाया जाता है; नियंत्रण फिर बाधित संदर्भ और निर्देश पर वापस आ जाता है। एक जाल एक सॉफ्टवेयर जनित व्यवधान है। डिवाइस मतदान की आवश्यकता को कम करने के लिए I / O के पूरा होने के संकेत के लिए एक रुकावट का उपयोग किया जा सकता है। ऑपरेटिंग सिस्टम रूटीन को कॉल करने या अंकगणितीय त्रुटियों को पकड़ने के लिए एक जाल का उपयोग किया जा सकता है।


2

मुझे लगता है कि ट्रैप वर्तमान निर्देश के निष्पादन के कारण होते हैं और इस प्रकार उन्हें तुल्यकालिक घटनाओं के रूप में कहा जाता है। जहाँ अवरोधक एक स्वतंत्र निर्देश के कारण होता है जो प्रोसेसर में चल रहा होता है जो बाहरी घटनाओं से संबंधित होता है और इस प्रकार इसे अतुल्यकालिक के रूप में जाना जाता है।


2

इंटरप्ट्स हार्डवेयर इंटरप्ट होते हैं, जबकि ट्रैप सॉफ्टवेयर-इनवॉल्वड इंटरप्ट होते हैं। हार्डवेयर व्यवधान की घटनाएँ आमतौर पर अन्य हार्डवेयर व्यवधानों को निष्क्रिय कर देती हैं, लेकिन यह ट्रैप्स के लिए सही नहीं है। यदि आपको जाल बाधित होने तक हार्डवेयर को बाधित करने की आवश्यकता होती है, तो आपको बाधा ध्वज को स्पष्ट रूप से साफ़ करने की आवश्यकता है। और आमतौर पर कंप्यूटर पर इंटरप्ट फ्लैग को प्रभावित करता है (हार्डवेयर) जाल के विपरीत बाधित होता है। इसका मतलब है कि इस झंडे को साफ करने से जाल को रोका नहीं जा सकेगा। जाल के विपरीत, इंटरप्ट को सीपीयू की पिछली स्थिति को संरक्षित करना चाहिए।


1

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


1
क्या आप बता सकते हैं कि सिस्टम कॉल एक जाल कैसे है?
राधा गोगिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.