एक प्रणाली अनुत्तरदायी क्यों बन सकती है?


12

मैंने dotएक इनपुट फ़ाइल के साथ बस (निर्देशित रेखांकन के लिए एक कार्यक्रम) निष्पादित किया जो इतना बड़ा था कि इसे उचित समय में प्रदान नहीं किया जा सकता था।

मेरा पूरा सिस्टम जम गया। मैं मुश्किल से इसे मारने के लिए Ctrl+ Alt+ के साथ एक पाठ कंसोल पर बना सकता था , लेकिन इसमें कई मिनट लगे।F1dot

सिस्टम कुछ इस तरह की अनुमति क्यों देता है? यह dot99% प्रणाली जैसे गैर-महत्वपूर्ण कार्यक्रम क्यों देता है और उत्तरदायी रहने के लिए शेष 1% का उपयोग करता है?


हेवी डिस्क I / O unix.stackexchange.com/questions/5565/… की संभावित डुप्लिकेट और unix.stackexchange.com/questions/11/…
जॉर्ज M

जवाबों:


15

जिस तरह से GNU / Linux और अन्य मल्टीटास्किंग सिस्टम काम करते हैं, वे प्रोसेसर को चल रही प्रक्रियाओं के बीच साझा करते हैं, dot99% नहीं होगा, लेकिन 99% समय के दौरान 100% होगा। प्रत्येक प्रक्रिया समय की एक निश्चित अवधि के लिए प्रोसेसर पर हावी होती है।

यह शेड्यूलर्स द्वारा नियंत्रित किया जाता है (लिनक्स में कई शेड्यूलर होते हैं, कुछ सामान्य रणनीति को नियोजित करते हैं, कुछ उपयोगकर्ता इंटरफेस को और अधिक समय देने की कोशिश करते हैं)।

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

यहां तक ​​कि अगर dotकेवल 99% CPU समय ले रहा था, तो संभावना है कि टेक्स्ट टर्मिनल में बदलना लगभग तत्काल होगा, क्या होता है कि कर्नेल को dotमेमोरी से सामान बाहर ले जाना पड़ता है ताकि यह Xमेमोरी में वापस डाल सके ताकि Xचाबियाँ देख सकें आप सिर्फ टेक्स्ट टर्मिनल पर हिट और मूव करते हैं, फिर कर्नेल को Xमेमोरी से बाहर जाना पड़ता है , dotजिसके लिए वह अभी भी चल रहा है, और फिर dotटेक्स्ट टर्मिनल प्रोसेस (शायद सिर्फ login?) को वापस मेमोरी में ले जाने के लिए बाहर निकलता है । (यदि यह गन्दा दिखता है, तो यह सिर्फ इसलिए नहीं है क्योंकि उदाहरण गन्दा है - वास्तविकता यह है यह गन्दा है।)

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


हम्म, इसलिए एक बेहतर उपयोगकर्ता अनुभव का रास्ता कुछ कार्यक्रमों को " चिपचिपा " के रूप में निर्दिष्ट करना होगा और इस तरह उन लोगों को बाहर निकलने से रोकना होगा।
क्रिस्टोफ वर्म

स्टिकीनेस 70 के दशक और 'चिपचिपा' बिट के मूल शब्दार्थ के बाद से उस तरह काम नहीं किया है। आप कर सकते हैं , हालांकि, स्मृति में (भाग) कार्यक्रमों ताला तो वे बदली नहीं जा सकता है। मुख्य स्मृति हालांकि एक महंगी लक्जरी है, इसलिए यह सब कुछ के लिए नहीं किया जा सकता है।
एलेक्सियो

@njsg, अच्छी व्याख्या के लिए धन्यवाद। एक अनुवर्ती प्रश्न: क्या थ्रशिंग को रोकने का कोई तरीका नहीं है? मैं समझता हूं कि स्वैपिंग स्मृति उपयोग को पूरी तरह से अधिक प्रभावी बनाता है, लेकिन सीमाएं होनी चाहिए। IMHO एक प्रक्रिया जितना आवश्यक हो उतना एक्स को कभी भी मेमोरी से बाहर नहीं ले जाना चाहिए। क्या एक यूनिक्स जैसी प्रणाली को कॉन्फ़िगर करने का एक तरीका है जैसे कि आवश्यक प्रक्रियाओं को बाहर ले जाने से संरक्षित किया जाता है? एक सर्वर पर इसकी एक अलग बात है, लेकिन एक डेस्कटॉप पर मुझे अपने डेस्कटॉप को मुझसे बात करने से रोकने के बजाय एक मेमोरी-हंगामा प्रक्रिया को क्रैश करना होगा।
ए। डोंडा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.