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

Anonim

Вы когда-нибудь задумывались, что происходит в процессе загрузки и запуска 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/StartupItems StartupItem — это программа, обычно сценарий оболочки, имя которой совпадает с именем папки. Папка содержит файл списка свойств, содержащий пары ключ-значение, такие как 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, поделитесь ими в комментариях!

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