मैक ओएस एक्स बूट प्रक्रिया में क्या होता है?

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


नोट: एक पाठक के रूप में इंगित किया गया है, पीपीसी का उपयोग करता है, i386 ईएफआई का उपयोग करता है

आप अपना मैक चालू करते हैं, और यही होता है:

  • पावर चालू है।
  • OF या EFI कोड निष्पादित किया गया है।
  • हार्डवेयर जानकारी एकत्र की जाती है और हार्डवेयर प्रारंभ होता है।
  • कुछ (आमतौर पर ओएस, लेकिन ऐप्पल हार्डवेयर टेस्ट इत्यादि जैसी चीजें) को बूट करने के लिए चुना जाता है। उपयोगकर्ता को बूट करने के लिए चुनने के लिए कहा जा सकता है।
  • नियंत्रण /System/Library/CoreServices/BootX, बूट लोडर को पास करता है। BootX कर्नेल लोड करता है और ओएस बैज भी खींचता है, यदि कोई हो।
  • /usr/sbin/kextcache डिवाइस ड्राइवरों की पहले कैश की गई सूची को लोड करने का प्रयास करता है ( /usr/sbin/kextcache द्वारा निर्मित / अपडेट किया गया)। इस तरह का कैश प्रकार mkext और इसमें एकाधिक कर्नेल एक्सटेंशन के लिए जानकारी शब्दकोश और बाइनरी फ़ाइलें शामिल हैं। ध्यान दें कि यदि mkext कैश भ्रष्ट या अनुपलब्ध है, तो BootX मौजूदा परिदृश्य में आवश्यक /System/Library/Extensions लिए /System/Library/Extensions में OSBundleRequired (जैसा कि OSBundleRequired की आवश्यकता के आधार पर निर्धारित किया गया है, विस्तार की बंडल की Info.plist फ़ाइल में ।
  • कर्नेल की init दिनचर्या निष्पादित की जाती है। बूटिंग सिस्टम की रूट डिवाइस निर्धारित है। इस बिंदु पर, फर्मवेयर अब और अधिक सुलभ नहीं है।
  • कर्नेल द्वारा विभिन्न मैच / बीएसडी डेटा संरचनाएं शुरू की जाती हैं।
  • आई / ओ किट शुरू किया गया है।
  • कर्नेल प्रारंभ /sbin/mach_init, मैक सेवा नामकरण (बूटस्ट्रैप) /sbin/mach_init शुरू होता है। mach_init सेवा नामों और मैक बंदरगाहों के बीच मैपिंग बनाए रखता है जो उन सेवाओं तक पहुंच प्रदान करता है।

यहां से, स्टार्टअप उपयोगकर्ता स्तर बन जाता है:

  • mach_init शुरू होता है /sbin/init, पारंपरिक बीएसडी init प्रक्रिया। init रनलेवल निर्धारित करता है, और चलाता है /etc/rc.boot, जो सिंगल-उपयोगकर्ता चलाने के लिए पर्याप्त मशीन सेट करता है।

इसके निष्पादन के दौरान, rc.boot और अन्य rc.boot स्क्रिप्ट स्रोत /etc/rc.common, एक शेल स्क्रिप्ट जिसमें उपयोगिता फ़ंक्शंस शामिल हैं, जैसे GetPID() नेटवर्क ऊपर है या नहीं), GetPID(), purgedir() ( purgedir() केवल निर्देशिका सामग्री, संरचना नहीं), आदि

  • rc.boot बूट के प्रकार (बहु-उपयोगकर्ता, सुरक्षित, सीडी-रोम, नेटवर्क इत्यादि) के आंकड़े बताते हैं। नेटवर्क बूट के मामले में ( sysctl variable kern.netboot को उस स्थिति में 1 सेट किया जाएगा), यह start तर्क के साथ /etc/rc.netboot चलाता है।

/etc/rc.netboot नेटवर्क बूटिंग के विभिन्न पहलुओं को संभालता है। उदाहरण के लिए, यह नेटवर्क और (यदि कोई है) स्थानीय माउंट करता है। यह रूट छवि के रूप में उपयोग की जा रही डिस्क छवि के साथ एक छाया फ़ाइल को /usr/bin/nbst लिए /usr/bin/nbst भी कॉल करता है। विचार छाया फ़ाइल में लिखने को रीडायरेक्ट करना है, जो उम्मीद है कि स्थानीय भंडारण पर है।

  • यदि फ़ाइल सिस्टम स्थिरता जांच की आवश्यकता है तो rc.boot आंकड़े बाहर हैं। एकल उपयोगकर्ता और सीडी-रोम बूट fsck नहीं चलाते हैं। सेफबूट हमेशा fsck चलाता है। rc.boot fsck की वापसी स्थिति को भी संभालता है।
  • यदि rc.boot सफलतापूर्वक बाहर निकलता है, /etc/rc, तो बहु-उपयोगकर्ता स्टार्टअप स्क्रिप्ट चलाया जाता है। यदि सीडी-रोम से बूटिंग हो, तो स्क्रिप्ट /etc/rc.cdrom (स्थापना) पर स्विच हो जाती है।
  • /etc/rc स्थानीय फाइल सिस्टम ( /.vol +, /.vol, यूएफएस, /dev/fd, /.vol ) /.vol करता है, यह सुनिश्चित करता है कि निर्देशिका /private/var/tmp मौजूद है, और /etc/rc.installer_cleanup चलाता है, यदि कोई मौजूद है ( रीबूट से पहले एक इंस्टॉलर द्वारा छोड़ा गया)।
  • /etc/rc.cleanup चलाया जाता है। यह कई यूनिक्स और मैक विशिष्ट निर्देशिकाओं / फ़ाइलों को "साफ़" करता है।
  • बूटकैच शुरू हो गया है।
  • विभिन्न sysctl चर सेट हैं (जैसे अधिकतम संख्या में vnodes, सिस्टम वी आईपीसी, आदि)। यदि /etc/sysctl.conf मौजूद है (मैक ओएस एक्स सर्वर पर प्लस /etc/sysctl-macosxserver.conf ), तो इसे पढ़ा जाता है और इसमें निहित sysctl चर सेट होते हैं।
  • syslogd शुरू किया गया है।
  • मैक प्रतीक फ़ाइल बनाई गई है।
  • /etc/rc kextd शुरू होता है, kextd प्रक्रिया जो कर्नेल या क्लाइंट प्रक्रियाओं से मांग पर कर्नेल एक्सटेंशन लोड करती है।
  • /usr/libexec/register_mach_bootstrap_servers /etc/mach_init.d में निहित विभिन्न मैक बूटस्ट्रैप आधारित सेवाओं को लोड करने के लिए चलाया जाता है
  • portmap और netinfo शुरू हो गए हैं।
  • यदि /System/Library/Extensions /Extensions.mkext /System/Library/Extensions से पुराना है, /etc/rc मौजूदा mkext को हटा देता है और एक नया बनाता है। यदि कोई अस्तित्व में नहीं है तो यह भी एक बनाता है।
  • /etc/rc शुरू होता है /usr/sbin/update, डिमन जो डिस्क पर आंतरिक फ़ाइल सिस्टम कैश को अक्सर फ़्लश करता है।
  • /etc/rc वर्चुअल मेमोरी सिस्टम शुरू करता है। /private/var/vm स्वैप निर्देशिका के रूप में स्थापित किया गया है। /sbin/dynamic_pager उचित तर्कों के साथ शुरू किया गया है (स्वैप फ़ाइल नाम पथ टेम्पलेट, बनाई गई स्वैप फ़ाइलों का आकार, उच्च स्वैप फ़ाइलों को बनाने या मौजूदा को हटाने के लिए निर्दिष्ट उच्च और निम्न जल चेतावनी ट्रिगर्स)।
  • गलत तरीके से प्रीबाउंड बाइनरी को ठीक करने के लिए /etc/rc /usr/libexec/fix_prebinding
  • फ़ाइलों और उपकरणों को साफ करने और रीसेट करने के लिए /etc/rc executes /etc/rc.cleanup निष्पादित करता है।
  • /etc/rc अंततः /System/Library/StartupItems और /Library/StartupItems जैसे स्टार्टअप आइटम को संभालने के लिए लॉन्च /sbin/SystemStarter लॉन्च /Library/StartupItems । स्टार्टअपइटम एक प्रोग्राम है, आमतौर पर एक शेल स्क्रिप्ट, जिसका नाम फ़ोल्डर नाम से मेल खाता है। फ़ोल्डर में एक प्रॉपर्टी लिस्ट फ़ाइल होती है जिसमें कुंजी-वैल्यू जोड़े होते हैं जैसे Description, Provides, Requires, OrderPreference, संदेश प्रारंभ / बंद करें आदि। आप प्रोग्राम्स प्रिंट डिबगिंग और निर्भरता जानकारी के लिए SystemStarter -n -D को रूट के रूप में चला सकते हैं (वास्तव में बिना कुछ भी चल रहा है)।
  • CoreGraphics स्टार्टअप आइटम ऐप्पल टाइप सर्विसेज ATSServer ( ATSServer ) के साथ-साथ विंडो सर्वर ( ATSServer ) शुरू करता है।

स्रोत: कर्नेल थ्रेड