Какво се случва в процеса на стартиране на Mac OS X?

Чудили ли сте се някога какво се случва по време на процеса на зареждане и стартиране на Mac OS X? С Mac OS X е малко по-сложно, отколкото някога бяха нещата, и отдавна отминаха дните на класическата Mac OS (система 9, 8, 7, 6), когато гледахме как нашите Mac компютри се зареждат със серия от разширения и контролни панели, които винаги бихме могли да идентифицираме само по тяхната икона и след това да се разровим в папката Extensions, за да коригираме лесно какво се зарежда и случва при стартиране на Mac.Днес с Unix основите на Mac OS X, много потребители изобщо не знаят какво се случва зад кулисите.
И така, какво точно се случва по време на процеса на стартиране на Mac OS X? Винаги можете да видите по-добре, като стартирате Mac в подробен режим, но това не обяснява непременно всичко, което виждате. За щастие е достъпно отлично обяснение чрез сегмент в KernelThread, който внимателно изброява последователността от събития за зареждане на Mac OS X, от началото до края. Той е доста задълбочен и си заслужава да бъде прочетен, повторен по-долу за любознателните потребители на Mac.
бележка: Както посочи читател, PPC използва OF (Openfirmware), i386 използва EFI (Extensible Firmware Interface)
И така, какво се случва по време на процеса на зареждане на Mac OS X? Включвате своя Mac и ето какво се случва:
- Захранването е включено.
- Кодът OF или EFI се изпълнява.
- Информацията за хардуера се събира и хардуерът се инициализира.
- Нещо (обикновено операционната система, но също и неща като Apple Hardware Test и др.) е избрано за зареждане. Потребителят може да бъде подканен да избере какво да стартира.
- Контролът преминава към
/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определя типа зареждане (Многопотребителско, Безопасно, CD-ROM, Мрежово и т.н.). В случай на мрежово стартиране (променливатаsysctlkern.netbootще бъде настроена на1в този случай), той изпълнява/etc/rc.netbootсначало аргумент.
/etc/rc.netboot управлява различни аспекти на мрежовото зареждане. Например, той извършва мрежово и (ако има) локално монтиране. Той също така извиква /usr/bin/nbst, за да асоциира shadow файл с изображението на диска, което се използва като основно устройство.Идеята е да пренасочите записите към shadow файла, който се надяваме да е на локално хранилище.
rc.bootопределя дали е необходима проверка на последователността на файловата система. Зареждането за един потребител и CD-ROM не изпълнява fsck. SafeBoot винаги изпълнява fsck.rc.boot обработва също състоянието на връщане на fsck.- Ако
rc.bootизлезе успешно,/etc/rc, след това се изпълнява скриптът за стартиране на много потребители. Ако стартирате от CD-ROM, скриптът превключва към/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 bootstrap, съдържащи се в/ etc/mach_init.dportmapиnetinfo се стартират.- Ако
/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 е програма, обикновено shell скрипт, чието име съвпада с името на папката. Папката съдържа файл със списък със свойства, съдържащ двойки ключ-стойност, катоОписание,Предоставя,Requires,OrderPreference, съобщения за стартиране/стоп и т.н. Можете да стартиратеSystemStarter -n -D като root, за да накара програмата да отпечата информация за отстраняване на грешки и зависимости (без реално да стартира нищо).- Стартовият елемент
CoreGraphicsстартира демона на Apple Type Services (ATSServer), както и Window Server (WindowServer).
И тогава вашият Mac се зарежда!
Можете сами да видите малко от тази дейност с Verbose Mode (който можете да стартирате в Verbose Mode при всяко зареждане или дори можете да настроите Mac винаги да стартира в Verbose Mode, ако искате винаги да виждате зареждане в стил unix), но това е доста подробно обяснение.
Apple също има налична документация за процеса на зареждане на Mac, налична тук в тяхната библиотека с документи за разработчици тук.
Обърнете внимание, че оригиналният URL адрес, предоставящ горната информация, вече не е активен, поради което тази публикация е включена по-горе за бъдещите чрез кеша. Първоначалният източник беше нишка на KernelThread на следния url: http://www.kernelthread.com/mac/osx/arch_startup.html, която в момента е офлайн и не пренасочва към ново местоположение.
Ако имате някакви лакомства или други добавки, които да добавите към последователността за зареждане на Mac OS X, споделете в коментарите!






