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

Anonim

תהיתם פעם מה קורה במהלך תהליך האתחול וההפעלה של 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 וכו'). במקרה של אתחול ברשת (המשתנה sysctl kern.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.d
  • portmap ו-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/StartupItems StartupItem היא תוכנית, בדרך כלל סקריפט מעטפת, ששמה תואם לשם התיקיה. התיקיה מכילה קובץ רשימת מאפיינים המכיל צמדי מפתח-ערך כגון 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, שתפו בתגובות!

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