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

Anonim

Чудили ли сте се някога какво се случва по време на процеса на зареждане и стартиране на 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, Мрежово и т.н.). В случай на мрежово стартиране (променливата sysctl kern.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.d
  • portmap и 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/StartupItems StartupItem е програма, обикновено 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, споделете в коментарите!

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