Что происходит в процессе загрузки 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, сетевой и т. д.). В случае сетевой загрузки (переменная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 запущен.- Файл символов Mach создан.
/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 от имени пользователя 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, поделитесь ими в комментариях!






