एक विभाजन दोष क्या है?


27

उबंटू में मुझे कई बार विभाजन की गलती का सामना करना पड़ा है। एक विभाजन दोष क्या है और यह कब होता है?


1
बस इसे कवर करने के लिए: मुझे एक समान समस्या थी, जबकि मेरे सेगफुल्स मज़बूती से पुन: प्रयोज्य नहीं थे और वे (लगभग) यादृच्छिक अनुप्रयोगों से आए थे। पता चला कि सबसे अधिक संभावना है कि मेरी स्मृति टूट गई है। इसलिए यदि कोई भी प्रोग्राम segfaults का कारण बनता है, तो RAM पर किसी की नज़दीकी नज़र हो सकती है।

जवाबों:


25

कोई त्रुटि कह विभाजन गलती (या segfault , या SIGSEGV ) Ubuntu और अन्य यूनिक्स की तरह ऑपरेटिंग सिस्टम, या कह सामान्य संरक्षण गलती Windows में, जब एक कार्यक्रम के प्रयास स्मृति का एक हिस्सा है कि पहुँचा नहीं जा सकता है, या जो कार्यक्रम का उपयोग करने के लिए है तक पहुँचने से निषिद्ध है। एक विभाजन दोष प्रोग्राम क्रैश का एक प्रकार है, जो एक प्रोग्राम की असामान्य समाप्ति है। अधिक जानकारी के लिए क्रैश , स्मृति सुरक्षा , विभाजन दोष , सामान्य सुरक्षा दोष और SIGSEGV पर विकिपीडिया लेख देखें (और विषय की अधिक बनावट समझ यहां प्रस्तुत की गई है)।

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

आपके लिए यह जानकारी प्रदान करने का सबसे अच्छा तरीका यह है कि आप इसे शामिल करने के लिए अपने प्रश्न को संपादित करें । वैकल्पिक रूप से, यदि आप चाहते हैं कि यह प्रश्न सामान्य रूप से विभाजन दोषों के बारे में हो, तो आप यह पूछने के लिए एक नया प्रश्न पोस्ट कर सकते हैं कि विशेष रूप से आपके विभाजन दोष क्या हो रहे हैं (यदि आप ऐसा करते हैं, तो अपने नए प्रश्न में इन सभी विवरणों को प्रदान करना सुनिश्चित करें) ।


सौभाग्य से सभी विभाजन दोष ओएस :) को अपग्रेड करके तय किए गए हैं। मेरा प्रश्न सामान्य रूप से विभाजन दोष के बारे में है। किसी विशेष ऐप के लिए नहीं।
टैकियन्स

@ Inotthisperson मैंने अपने उत्तर को तदनुसार संपादित किया है। (मैं अधिक जानकारी प्रदान करने के लिए दिशा-निर्देश बनाए रख रहा हूं, अन्य उपयोगकर्ताओं के लाभ के लिए, जो कि विभाजन दोषों का सामना कर रहे हैं, हालांकि मुझे पता है कि आपको उनके साथ अभी विशिष्ट सहायता की आवश्यकता नहीं है।)
एलिया कगन

वैसे यह एक ऐप में एक विभाजन दोष के बारे में है। मैं इसे C ++ प्रोग्राम में होने के बारे में पूछना चाहता था, जहां विंडोज या टर्बो सी ++ (वाइन में) (मैं लिनक्स में अंजुता का उपयोग करता हूं) के रूप में एक ही प्रोग्राम पूरी तरह से ठीक चलता है। और अच्छी तरह से ये केवल मूल प्रोग्राम हैं और एप्लिकेशन नहीं हैं (प्रोग्राम जैसे प्रोग्राम। ,
GRAPHS

धन्यवाद। लेकिन मैं ज्यादातर मामलों में डरता हूं कि ऐप में विभाजन दोष के बारे में सवाल पूछ रहा है। :)
१12

@ निर्मिक: शायद यह स्टैकओवरफ्लो के लिए विषय है :)
टैचियन्स

4

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


0

वे दिन गए जब लोग असेंबली कोड के माध्यम से ट्रेस करते थे और एक समस्या को डीबग करते थे। एबेंड्स, डॉ। वाटसन, सेगमेंटेशन दोष। वो हरे दिन गए।

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

इसे डिबग करें और इसे ठीक करें यदि आप इसे अक्सर पुन: पेश कर सकते हैं। यदि आप इसे पुन: पेश नहीं कर सकते हैं, तो बस अपने हाथों को मिलाएं, घुटने टेकें और नरक की तरह प्रार्थना करें कि आप इसे "नियमित रूप से" न देखें।


Segfaults को ऐसी भाषा में लिखे गए किसी भी प्रोग्राम में ट्रिगर किया जा सकता है जो सीधे मेमोरी एक्सेस की अनुमति देता है। वे आम तौर पर कर्नेल को क्रैश नहीं करेंगे।
एलेक्स एल।

@AlexL। यह सही है। मैं अपना उत्तर संपादित करूँगा।
सिद्धार्थ

मुझे आशा है कि मैंने अपने विचारों का सही ढंग से प्रतिनिधित्व किया है।
सिद्धार्थ

@AlexL। क्या आप इसकी समीक्षा एक बार कर सकते हैं। अगर यह अभी भी सटीक नहीं है तो मैं इसे हटा दूंगा।
सिद्धार्थ

यह बेहतर है। फिर भी, (1) हालांकि यह संभव है कि प्रोग्रामर के लिए SIGSEGVहैंडलर को किसी अन्य चीज के लिए सेट करना बेहद दुर्लभ है SIG_DFL(जो कि डंप है और कोर से बाहर निकलें SIGSEGV) क्योंकि अगर आप मेमोरी एक्सेस कर रहे हैं तो आपको ऐसा नहीं करना चाहिए, तो कुछ बहुत हो गया है गलत और वसूली शायद असंभव है। (2) एक कोर को प्रक्रिया बंद कर दिए जाने के बाद ही डंप किया जाएगा। (3) कोर डंप में केवल उस प्रक्रिया की मेमोरी और रजिस्टर शामिल हैं जिन्हें डंप किया गया था। (4) अन्य प्रक्रियाएँ, सीपीयू और कर्नेल अन्य प्रक्रिया के सेगफॉल्ट से प्रभावित नहीं होते हैं।
एलेक्स एल।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.