מה קורה בתהליך האתחול של Mac OS X?

תהיתם פעם מה קורה במהלך תהליך האתחול וההפעלה של Mac OS X? עם Mac OS X זה קצת יותר מסובך ממה שהדברים היו פעם, וחלפו מזמן הימים של קלאסיק Mac OS (מערכת 9, 8, 7, 6), שם צפייה במחשבי ה-Mac שלנו מאתחלים עם סדרה של הרחבות ולוחות בקרה תמיד יכולנו לזהות לפי הסמל שלהם בלבד, ואז ללכת לחפור בתיקיית ההרחבות כדי להתאים בקלות את מה שנטען ומתרחש באתחול של Mac.כיום עם בסיס ה-Unix של Mac OS X, משתמשים רבים אינם מודעים לחלוטין למה שקורה מאחורי הקלעים.
אז מה בדיוק קורה במהלך תהליך האתחול של Mac OS X? אתה תמיד יכול לקבל מראה טוב יותר על ידי אתחול Mac במצב Verbose, אבל זה לא בהכרח מסביר את כל מה שאתה רואה. למרבה המזל, הסבר מצוין זמין באמצעות קטע ב- KernelThread, המפרט בקפידה את רצף אירועי האתחול של Mac OS X, מתחילתו ועד סופו. זה די יסודי ושווה קריאה, חוזר על עצמו להלן עבור משתמשי ה-Mac הסקרנים שם בחוץ.
הערה: כפי שציין קורא, PPC משתמש ב-OF (Openfirmware), i386 משתמש ב-EFI (ממשק קושחה הרחבה)
אז מה קורה במהלך תהליך האתחול של Mac OS X? אתה מפעיל את ה-Mac שלך וזה מה שקורה:
- הכוח מופעל.
- OF או קוד EFI מבוצע.
- נאסף מידע על החומרה והחומרה מאוחלת.
- משהו (בדרך כלל מערכת ההפעלה, אבל גם דברים כמו מבחן החומרה של אפל וכו') נבחר לאתחל. ייתכן שהמשתמש יתבקש לבחור מה לאתחל.
- השליטה עוברת ל-
/System/Library/CoreServices/BootX, טוען האתחול. BootX טוען את הליבה וגם מצייר את תגי מערכת ההפעלה, אם יש. - BootX מנסה לטעון רשימה שנשמרה בעבר במטמון של מנהלי התקנים (נוצר/עודכן על ידי
/usr/sbin/kextcache). מטמון כזה הוא מהסוגmkextומכיל את מילוני המידע והקבצים הבינאריים עבור סיומות ליבה מרובות. שים לב שאם מטמון mkext פגום או חסר, BootX יחפש ב-/System/Library/Extensionsעבור הרחבות הדרושות בתרחיש הנוכחי (כפי שנקבע על ידי הערך של המאפייןOSBundleRequiredבקובץInfo.plist של החבילה של התוסף. - שגרת
init של הליבה מבוצעת. התקן השורש של מערכת האתחול נקבע. בשלב זה, קושחה אינה נגישה יותר. - מבני נתונים שונים של Mach/BSD מאותחלים על ידי הקרנל.
- ערכת הקלט/פלט מאותחלת.
- הליבה מתחילה
/sbin/mach_init, הדמון למתן שמות של שירות Mach (bootstrap).mach_init מנהל מיפויים בין שמות השירותים ויציאות ה-Mach המספקות גישה לשירותים אלה.
מכאן ואילך, ההפעלה הופכת לרמת משתמש:
mach_initמתחיל/sbin/init, ה-BSD המסורתי להתחיל תהליך. init קובע את רמת הריצה, ומפעיל את/etc/rc.boot, אשר מגדיר את המחשב מספיק כדי להפעיל משתמש יחיד.
במהלך ביצועו, rc.boot והשני rc מקור סקריפטים /etc/rc.common , סקריפט מעטפת המכיל פונקציות שירות, כגון CheckForNetwork() (בודק אם הרשת פועלת), GetPID (), purgedir() (מוחק את תוכן הספרייה בלבד, לא את המבנה), וכו'
rc.bootמגלה את סוג האתחול (Multi-User, Safe, CD-ROM, Network וכו'). במקרה של אתחול ברשת (המשתנהsysctlkern.netbootיוגדר ל-1במקרה כזה), הוא מריץ/etc/rc.netbootעםstart ארגומנט.
/etc/rc.netboot מטפל בהיבטים שונים של אתחול הרשת. לדוגמה, הוא מבצע חיבורי רשת (אם יש) מקומיים. זה גם קורא ל-/usr/bin/nbst כדי לשייך קובץ צל לתמונת הדיסק המשמשת כהתקן השורש.הרעיון הוא להפנות מחדש כתיבה לקובץ הצללים, שבתקווה נמצא באחסון מקומי.
rc.bootמגלה אם נדרשת בדיקת עקביות של מערכת הקבצים. אתחולי משתמש יחיד ותקליטורים אינם פועלים fsck. SafeBoot מפעיל תמיד fsck.rc.boot מטפל גם בסטטוס ההחזרה של fsck.- אם
rc.bootיוצא בהצלחה,/etc/rc, לאחר מכן מופעל סקריפט ההפעלה מרובה משתמשים. אם אתחול מתקליטור, הסקריפט עובר ל-/etc/rc.cdrom (התקנה). /etc/rcמעלה מערכות קבצים מקומיות (HFS+, HFS, UFS,/dev/ fd,/.vol), מבטיח שהספרייה/private/var/tmpקיים, ומפעיל את/etc/rc.installer_cleanup, אם קיים (הושאר על ידי מתקין לפני אתחול מחדש)./etc/rc.cleanup מופעל. הוא "מנקה" מספר ספריות/קבצים ספציפיים ל-Unix ו-Mac.- BootCache מופעל.
- משתנים
sysctlמוגדרים (כגון עבור מספר מקסימלי של vnodes, System V IPC וכו'). אם/etc/sysctl.confקיים (בתוספת/etc/sysctl-macosxserver.confב-Mac OS X Server), הוא נקרא ו-sysctl משתנים הכלולים בו מוגדרים. syslogd הופעל.- קובץ סמל מאך נוצר.
/etc/rcמתחילkextd, תהליך הדמון שטוענת סיומת ליבה לפי דרישה מתהליכי ליבה או לקוח./usr/libexec/register_mach_bootstrap_serversמופעל כדי לטעון שירותים שונים מבוססי Mach אתחול הכלולים ב-/ etc/mach_init.dportmapו-netinfo מופעלים.- If
/System/Library/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מבצע את/etc/rc.cleanupלניקוי ואיפוס קבצים והתקנים./etc/rcמשיק סוף סוף את/sbin/SystemStarterכדי לטפל בפריטי הפעלה ממיקומים כגון/System/Library/StartupItemsו-/Library/StartupItemsStartupItem היא תוכנית, בדרך כלל סקריפט מעטפת, ששמה תואם לשם התיקיה. התיקיה מכילה קובץ רשימת מאפיינים המכיל צמדי מפתח-ערך כגוןDescription,Provides,Requires,OrderPreference, הודעות התחלה/עצירה וכו'. ניתן להפעילSystemStarter -n -D כשורש כדי שהתוכנית תדפיס מידע על ניפוי באגים ותלות (בלי להפעיל שום דבר).- פריט האתחול
CoreGraphicsמפעיל את דמון Apple Type Services (ATSServer) וכן שרת החלונות (WindowServer).
ואז ה-Mac שלך מופעל!
תוכל לראות מעט מהפעילות הזו בעצמך עם מצב Verbose (שאותו אתה יכול לאתחל למצב Verbose בכל אתחול, או שאתה יכול אפילו להגדיר את Mac לאתחל תמיד במצב Verbose אם אתה רוצה לראות תמיד אתחול בסגנון יוניקס), אבל זה הסבר די יסודי.
לאפל יש גם תיעוד זמין על תהליך האתחול של Mac זמין כאן בספריית המסמכים למפתחים שלהם כאן.
שים לב שכתובת האתר המקורית המספקת את המידע לעיל אינה פעילה עוד, ולכן הפוסט הזה נכלל לעיל לדורות הבאים דרך המטמון. המקור המקורי היה שרשור ב-KernelThread בכתובת האתר הבאה: http://www.kernelthread.com/mac/osx/arch_startup.html שנמצא כרגע במצב לא מקוון ואינו מפנה למיקום חדש.
אם יש לכם טיפים או תוספות אחרות להוסיף לרצף האתחול של Mac OS X, שתפו בתגובות!






