बोर्ड लगाना मुश्किल है
बूटिंग ... अच्छी तरह से ... यह वास्तव में सबसे कठिन हिस्सा है। हर बार जब कंप्यूटर बूट करता है तो यह मूल रूप से खुद को नए सिरे से देखता है। यह अपने विभिन्न हिस्सों के साथ खुद को परिचित करता है, और प्रत्येक के लिए यह इसे प्राप्त करता है लाभ क्षमता। लेकिन इसे अपने बूटस्ट्रैप्स द्वारा खुद को ऊपर खींचना पड़ता है, इसलिए हर बार वर्ग एक से बोलना पड़ता है।
बूट प्रक्रिया को डिजाइन करते समय मशीन को चरणों में लाने के लिए चाल है। आपका बूट तेज़ और विश्वसनीय होना चाहिए, और यह हर बार पूरी तरह से अज्ञात वातावरण में दोनों चीजें होना चाहिए । मैं रियल / प्रोटेक्टेड मोड वार्तालाप (जो यह कहना भी नहीं है कि मैं भी कर सकता था) में वेंचर नहीं करूंगा , लेकिन बूट पर बहुत कुछ हो रहा है। जैसा कि कंप्यूटर अपने विभिन्न घटकों को हर बार स्नातक चरणों में ऐसा करने के लिए आत्मसात करता है। संभवतः इनमें से सबसे महत्वपूर्ण है ऑन-बोर्ड कोड को निष्पादित करने से लेकर डिस्क कोड को निष्पादित करना, या, दूसरे शब्दों में - कर्नेल निष्पादन। यह तब होता है जब फर्मवेयर (ओस्टेंसिक रूप से) ऑपरेटिंग सिस्टम को आत्मसमर्पण करता है।
कई साल पहले ऐसा नहीं था। यह वास्तव में बेसिक इन / आउट था BIOS का उपयोग किया जाता था - नियमित कार्यक्रम स्क्रीन को ड्राइंग करने और डिस्क तक पहुंचने जैसी चीजों के लिए फर्मवेयर को कॉल करेंगे। इन्हें इंटरप्ट कहा जाता था - पुरानी टोपियाँ उन्हें उनके नए डॉट-मैट्रिक्स या यूएसआर के लिए आईआरक्यू को असाइन करने में मिली खुशी के रोमांच के लिए सबसे अच्छी तरह से याद कर सकती हैं।
INT13h
यह रुकावट ( या INT
असेंबली लिंगो में ) 13H फ़ंक्शंस है जो BIOS डिस्क एक्सेस के लिए सेवाओं के रूप में प्रदान करता है। फर्मवेयर से डिस्क पर छलांग लगाने के लिए बूट प्रक्रिया में BIOS सिस्टम के लिए आज भी इनका उपयोग किया जाता है।
एक BIOS सिस्टम प्रत्येक डिस्क के पहले कुछ बाइट्स की जांच करेगा और एक पैटर्न की तलाश करेगा जिसे वह मास्टर बूट रिकॉर्ड ( याMBR
) के रूप में पहचानता है । यह एक दशकों पुराना डी-फैक्टो मानक है और इसमें थोड़ा कच्चा, निष्पादन योग्य बाइनरी शामिल है जो डिस्क के प्रमुख को लिखा जाता है। MBR बूट करने योग्य के रूप में एक BIOS डिस्क को चिह्नित करता है। यह जांचना बंद कर देगा जब यह एक पाता है, और इसलिए व्यावहारिक रूप से एक आप सभी को कुछ चतुर चाल के बिना मिलता है। जब यह एक खोज करता है तो यह इसे मेमोरी में मैप करता है और इसे निष्पादित करता है (रियल मोड में, लेकिन मैं अभी भी वहां नहीं जा रहा हूं) ।
निष्पादित एमबीआर लगभग निश्चित रूप से आपके सिस्टम कर्नेल नहीं है - 512 बाइट्स (देना या लेना) उस विभाग में बहुत बेकार होगा। यह शायद एक है बूटलोडर विशेष रूप से डिजाइन पर काबू पाने के लिए एक कार्यक्रम - एक BIOS के कई संबोधित कर सीमाओं की - विशेष रूप से है कि यह बिल्कुल भी फाइल सिस्टम के किसी भी प्रकार को नहीं समझता।
जब बूटलोडर वास्तविक कर्नेल में पढ़ता है और इसे मेमोरी में निष्पादित करता है (जैसा कि हम सभी प्रार्थना करते हैं यह हर बार होगा) , यह संभवतः एक INT13H
बाधा कॉल के माध्यम से BIOS से पूछकर ऐसा करेगा । और अगर ऐसा नहीं होता है - कई कट्टरपंथी बूटलोडर्स पारंपरिक अर्थों में फ़ाइल सिस्टम को माउंट करेंगे और कोड को दूसरे तरीके से निष्पादित करेंगे - तो यह बहुत कम संभावना है कि बूटलोडर को एक INT13H
या दो के बिना इतना फैंसी मिल गया है । अक्सर बूटलोडर्स को खुद को या खुद के विभिन्न चरणों को चेनलोड करना चाहिए - क्योंकि पहले से आवंटित 512 बाइट्स उनकी आवश्यकताओं के अनुरूप नहीं होते हैं।
चिकन और ईजीजी
यह सब डिस्क पर चर्चा करने का एक राउंडअबाउट तरीका है, मुझे पता है, लेकिन इस बिंदु से यह स्पष्ट रूप से स्पष्ट होना चाहिए कि प्राथमिक समस्या - कोई इसे चिकन-एंड-एग प्रकार कह सकता है - उस डिस्क तक पहुंच रहा है जिसमें प्रोग्राम निर्देश शामिल हैं के बारे में कैसे पहुँच डिस्क के लिए । इस समस्या की कुंजी फर्मवेयर है - और EFI सिस्टम पर भी बहुत अलग तरीके से जारी है - और, सबसे कमजोर या नहीं, फर्मवेयर बूट श्रृंखला की सबसे महत्वपूर्ण कड़ी है।
आप देखते हैं, एक बार कर्नेल निष्पादित हो जाता है, और हार्डवेयर आरंभ करने और नियंत्रित करने के लिए इसके सभी असंख्य मार्ग, ये सभी समस्याएं गायब हो जाती हैं (या, कम से कम, कुछ हद तक बदल जाती हैं) , क्योंकि आधुनिक ओएस सिस्टम का पूर्ण नियंत्रण लेते हैं। लेकिन जब तक वे सिस्टम की सीमा का विस्तार केवल तब तक करते हैं जब तक फर्मवेयर अनुमति देगा। यह बहुत कुछ कह रहा है - INT13H
8086 के बाद से BIOS बहुत नहीं बदला है। कॉल 8086 मूल है। हां, (असंख्य) एक्सटेंशन और निश्चित रूप से हैक हुए हैं, लेकिन नवाचार ...?
बेहतर और बेहतर
BIOS में अधिकांश परिवर्तन सर्वोत्तम रूप से केवल पट्टियाँ हैं। इसकी के विभिन्न और विशिष्ट पहलुओं - यह एक कठिन डिस्क शारीरिक रूप से मैप किया जा सकता था हुआ करता था ज्यामिति जब डेटा इसे करने के लिए जमा हो गया था या यह से लिया गया करने के लिए भेजा गया था। आखिरकार पारंपरिक हार्ड डिस्क एक ऐसे आकार में बढ़ गई जिसने इसे निषिद्ध कर दिया। यहां तक कि सिर्फ सार नक्शा एक BIOS को संभालने के लिए बहुत अधिक जानकारी थी । चूंकि यह केवल रियल मोड में काम कर सकता है, BIOS 1 एमबी प्रति मेमोरी रजिस्टर तक सीमित है। सिलेंडर मैप को उस से बड़ा करें, या उसके किसी भी गुण को बड़े बिट्स से संबोधित कर सकते हैं, और BIOS सचमुच खो गया है - सीमा से बाहर।
यह अवरोध कई बार मिल चुका है और टूट गया है। हर बार नक्शा कुछ नया, चतुर और कम सटीक तरीके से अमूर्त और एन्कोडेड होता है। और इसलिए इन दिनों BIOS के लिए ड्राइव को सटीक रूप से मैप करना वास्तव में असंभव है। लॉजिकल ब्लॉक एड्रेसिंग अब वास्तविक मानक है, हालांकि कुछ सिलेंडर / हेड / सेक्टर (या CHS) अनुवाद अभी भी आवश्यक हैं। मेनबोर्ड फर्मवेयर ने सटीकता / जिम्मेदारी में क्या खो दिया है, इस तरह के विस्तार को समाप्त कर दिया है और अंतराल को भरने के लिए डिस्क फर्मवेयर जिम्मेदारियों में जोड़ा गया है।
यह बिल्ली और चूहे का खेल है जिसे आपके प्रश्न में संदर्भित किया गया है। जब BIOS अपने सरासर आकार के कारण एक निश्चित बिंदु से परे एक डिस्क को समझने में विफल रहता है, तो कोई भी डेटा जिसे आप इसे बूट के लिए प्राप्त करना चाहते हैं - जैसे कि बूटलोडर या कर्नेल - शायद बेहतर था कि उस बिंदु से परे स्थित न हो। यहीं से /boot
आया है।
MAYBE ACTUALLY बेहतर
इन दिनों ऐसी चीजें हैं, शुक्र है, BIOS के निधन से अप्रासंगिक हो गया। यह आने में 30 साल था, लेकिन इसे पिछले कुछ वर्षों में बड़े पैमाने पर यूईएफआई (या ईएफआई 2.0) मानक द्वारा बदल दिया गया है । UEFI मिनट एक से एक माउंट प्रदान करता है , यह संरक्षित मोड में आरंभीकृत करता है, यह अपने स्वयं के बूटलोडर को शामिल करता है, यह रिबूट-लगातार फ्लैश-मेमोरी वेरिएबल स्टोरेज प्रदान करता है, यह कुछ umpteen zetabytes या किसी भी डिस्क को संभालने का अनुमान है ... और बहुत कुछ अन्य। यह एकदम सही है, लेकिन यह अपने पूर्ववर्ती पर एक बड़ा सुधार है।
यहां तक कि डिस्क-एन्क्रिप्शन या स्तरित फ़ाइल सिस्टम से जुड़े विशेष बूट लोडर के लिए तर्क तब गिरते हैं जब आप समझते हैं कि इन सभी को वैसे भी ओएस कर्नेल द्वारा नियंत्रित किया जाना चाहिए, और यदि आपको बूट पर माउंट प्रदान किया जाता है, तो आपको हमेशा एक स्पष्ट मिल जाता है- इसे निष्पादित करने के लिए शॉट (विशेष रूप से यह देखते हुए कि लिनक्स कर्नेल, अपने डिफ़ॉल्ट कॉन्फ़िगरेशन में, एक ईएफआई-निष्पादन योग्य है) ।
और इसलिए एक अलग /boot
विभाजन को शायद आपको अधिक चिंता नहीं करनी चाहिए, और यदि आप ईएफआई प्रणाली पर हैं, तो आपको शायद पहले से ही ईएफआई-सिस्टम विभाजन में एक एनालॉग मिल गया है, क्योंकि यह ईएफआई मोड को बूट करने के लिए एक आवश्यकता है।