Что происходит в процессе загрузки Mac OS X?

Вы когда-нибудь задумывались, что происходит в процессе загрузки и запуска Mac OS X? С Mac OS X все немного сложнее, чем когда-то, и давно прошли времена классической Mac OS (System 9, 8, 7, 6), когда наши Mac загружались с рядом расширений и панелей управления, которые мы всегда могли определить только по их значку, а затем покопаться в папке «Расширения», чтобы легко настроить то, что загружается и происходит при загрузке Mac.Сегодня, когда Mac OS X основана на Unix, многие пользователи совершенно не подозревают о том, что происходит за кулисами.
Так что же именно происходит в процессе загрузки 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 (начальная загрузка).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с- 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 запущен.
- Файл символов Mach создан.
- /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/StartupItemsStartupItem — это программа, обычно сценарий оболочки, имя которой совпадает с именем папки. Папка содержит файл списка свойств, содержащий пары ключ-значение, такие как- Description,- Provides,- Requires,- OrderPreference, сообщения запуска/остановки и т. д. Вы можете запустить- SystemStarter -n -D от имени пользователя root, чтобы программа печатала отладочную информацию и информацию о зависимостях (фактически ничего не запуская).
- Элемент запуска CoreGraphicsзапускает демон Apple Type Services (ATSServer), а также сервер Windows (WindowServer).
И тогда ваш Mac загрузится!
Вы можете увидеть некоторые из этих действий самостоятельно в подробном режиме (который вы можете загрузить в подробном режиме при каждой загрузке, или вы даже можете настроить Mac на постоянную загрузку в подробном режиме, если вы хотите всегда видеть загрузку в стиле unix), но это довольно подробное объяснение.
У Apple также есть некоторая документация по процессу загрузки Mac, доступная здесь, в их библиотеке документации для разработчиков здесь.
Обратите внимание, что исходный URL-адрес, предоставляющий вышеуказанную информацию, больше не активен, поэтому это сообщение было включено выше для потомков через кеш. Исходным источником был поток на KernelThread по следующему адресу: http://www.kernelthread.com/mac/osx/arch_startup.html, который в настоящее время отключен и не перенаправляется на новое место.
Если у вас есть какие-либо лакомые кусочки или другие дополнения к последовательности загрузки Mac OS X, поделитесь ими в комментариях!
 






