कंप्यूटिंग के स्तर को समझना


9

क्षमा करें, मेरे भ्रमित प्रश्न के लिए। मैं कुछ संकेत की तलाश कर रहा हूं।

अब तक मैं ज्यादातर Java और Python के साथ एप्लीकेशन लेयर पर काम कर रहा हूं और मुझे ऑपरेटिंग सिस्टम और हार्डवेयर की केवल एक अस्पष्ट समझ है। मैं कंप्यूटिंग के निचले स्तरों के बारे में बहुत कुछ समझना चाहता हूं, लेकिन यह वास्तव में किसी भी तरह भारी हो जाता है। विश्वविद्यालय में मैंने माइक्रोप्रोग्रामिंग के बारे में एक क्लास ली, यानी कैसे प्रोसेसर ASM कोड को लागू करने के लिए हार्ड-वायर्ड हो जाते हैं। अब तक मैं हमेशा सोचता था कि अगर मैं "निम्न स्तर" के बारे में अधिक सीखा तो मैं अधिक काम नहीं करूंगा।

एक प्रश्न मेरे पास है: यह कैसे संभव है कि हार्डवेयर डेवलपर से लगभग पूरी तरह से छिपा हुआ हो? क्या यह कहना सही है कि ऑपरेटिंग सिस्टम हार्डवेयर के लिए एक सॉफ्टवेयर परत है? एक छोटा उदाहरण: प्रोग्रामिंग में मुझे यह समझने की आवश्यकता कभी नहीं हुई कि L2 या L3 कैश क्या है। विशिष्ट व्यावसायिक अनुप्रयोग वातावरण के लिए, लगभग किसी को भी कोडांतरक और कंप्यूटिंग के निचले स्तरों को समझने की आवश्यकता नहीं है, क्योंकि आजकल लगभग कुछ भी के लिए एक प्रौद्योगिकी स्टैक है। मुझे लगता है कि इन निचले स्तरों का पूरा बिंदु उच्चतर स्तरों के लिए एक इंटरफ़ेस प्रदान करना है। दूसरी ओर मुझे आश्चर्य है कि निचले स्तरों पर कितना प्रभाव हो सकता है, उदाहरण के लिए यह पूरी ग्राफिक्स कंप्यूटिंग चीज।

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

पिछले कुछ हफ्तों से मैं सुरक्षा मुद्दों के बारे में पढ़ रहा हूं। यहाँ किसी भी तरह, अलग-अलग परतों के बहुत सारे एक साथ आते हैं। हमलों और शोषण लगभग हमेशा निचले स्तर पर होते हैं, इसलिए इस मामले में ओएसआई परतों के विवरण, एक ओएस के आंतरिक कामकाज, आदि के बारे में सीखना आवश्यक है।


1
इसका एक बड़ा जवाब है (प्रश्न के पहले) प्रोग्रामर.स्टैकएक्सचेंज.
com

हमले और शोषण सभी स्तरों पर हो सकते हैं। अगर मैं एक कमजोर PHP स्क्रिप्ट लिखता हूं, तो इसका अंतर्निहित ओएस की परवाह किए बिना शोषण किया जा सकता है, अकेले हार्डवेयर दें।
tdammers

1
इस विषय पर एक शानदार पुस्तक मिली: एलिमेंट्स ऑफ़ कम्प्यूटिंग सिस्टम्स: फर्स्ट प्रिंसिपल्स नोम निसान, शिमोन गोकेन से एक आधुनिक कंप्यूटर का निर्माण। इस दृष्टिकोण पर श्री
शॉकेन

डॉस के दिनों में वापस, वीजीए ग्राफिक्स रूटीन के लिए असेंबली भाषा का उपयोग किसी भी प्रदर्शन को प्राप्त करने का एकमात्र तरीका था, लेकिन मुझे लगता है कि मुझे नहीं पता था कि मैं क्या कर रहा था! लेकिन पिछले 10 वर्षों में या मेरे करियर में मुझे इतने कम कुछ नहीं देखना पड़ा। और मैं अब उन स्तरों पर जो कुछ होता है उससे ज्यादातर अनभिज्ञ हूं। शायद ही कभी मुझे अपनी स्मृति को आवंटित करने या सफाई करने की आवश्यकता होती है। मुझे संदेह है कि मेरी टीम में कई लोग नहीं जानते कि स्टैक क्या है! कई मायनों में यह इस तरह के स्तर पर कोड करने के लिए उत्पादक नहीं है, बोलने के लिए पहिया को सुदृढ़ करना। बल्कि हम दिग्गजों के कंधे पर खड़े हैं।
गैविन हॉवेन

जवाबों:


19

इन चीजों के बारे में सोचने का कीवर्ड अमूर्त है

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

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

सुरक्षा का मुद्दा एक दिलचस्प है, क्योंकि सिस्टम की अखंडता का उल्लंघन करने के लिए अमूर्तता में खामियों और 'लीक' का फायदा उठाया जा सकता है। जब कोई API पोस्ट करता है कि आप A, B, और C विधियों को कॉल कर सकते हैं, लेकिन केवल अगर X स्थिति रखता है, तो स्थिति को भूलना आसान है और उस स्थिति के लिए अनपार्ट किया जा सकता है जब स्थिति का उल्लंघन होता है। उदाहरण के लिए, शास्त्रीय बफ़र अतिप्रवाह इस तथ्य का फायदा उठाता है कि मेमोरी सेल्स में लिखने से अपरिभाषित व्यवहार होता है जब तक कि आपने मेमोरी के इस विशेष ब्लॉक को आवंटित नहीं किया हो। एपीआई केवल गारंटी देता है कि कुछएक परिणाम के रूप में होगा, लेकिन व्यवहार में परिणाम अगले निचले स्तर पर सिस्टम के विवरण द्वारा परिभाषित किया जाता है - जिसे हम जानबूझकर भूल गए हैं! जब तक हम स्थिति को पूरा करते हैं, तब तक इसका कोई महत्व नहीं है, लेकिन यदि नहीं, तो एक हमलावर जो दोनों स्तरों को अंतरंग रूप से समझता है, आमतौर पर पूरे सिस्टम के व्यवहार को वांछित के रूप में निर्देशित कर सकता है और खराब चीजों का कारण बन सकता है।

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

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


1
बहुत धन्यवाद। इसलिए, कचरा संग्रहण / स्मृति प्रबंधन का उदाहरण संभवतः इस बातचीत का सबसे प्रसिद्ध उदाहरण है। नील गेर्शेनफेल्ड ने कुछ दिलचस्प चीजें लिखी हैं, हालांकि मैं केवल इसके कुछ हिस्सों को समझता हूं।
आरपाराडॉक्स

... जटिलता के बारे में बहुत अच्छी बात। यदि केवल मशीनें ही हमारी मशीनों को डिजाइन कर सकती हैं, तो यह कहां जाता है? यदि AI लोग AI को स्मार्ट AI बनाने की बात कर रहे हैं, तो हम लगभग वहीं हैं, शायद। ;)
आरपाराडॉक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.