¿Qué sucede en el proceso de arranque de Mac OS X?

Anonim

¿Alguna vez se preguntó qué sucede durante el proceso de inicio y arranque de Mac OS X? Con Mac OS X es un poco más complicado de lo que solía ser, y hace mucho que quedaron atrás los días del Mac OS clásico (Sistema 9, 8, 7, 6), en los que veíamos arrancar nuestras Mac con una serie de extensiones y paneles de control que siempre podríamos identificar solo por su ícono, y luego buscar en la carpeta Extensiones para ajustar fácilmente lo que se está cargando y ocurriendo en el arranque de Mac.Hoy en día, con los fundamentos de Unix de Mac OS X, muchos usuarios desconocen por completo lo que sucede detrás de escena.

Entonces, ¿qué sucede exactamente durante el proceso de arranque de Mac OS X? Siempre puede ver mejor iniciando una Mac en modo detallado, pero eso no necesariamente explica todo lo que ve. Afortunadamente, una excelente explicación está disponible a través del segmento en KernelThread, que enumera cuidadosamente la secuencia de eventos de arranque de Mac OS X, de principio a fin. Es bastante completo y vale la pena leerlo, se repite a continuación para los usuarios curiosos de Mac.

nota: como señaló un lector, PPC usa OF (Openfirmware), i386 usa EFI (Extensible Firmware Interface)

Entonces, ¿qué sucede durante el proceso de arranque de Mac OS X? Enciendes tu Mac y esto es lo que sucede:

  • La alimentación está encendida.
  • Se ejecuta el código OF o EFI.
  • Se recopila la información del hardware y se inicializa el hardware.
  • Algo (generalmente el sistema operativo, pero también cosas como la prueba de hardware de Apple, etc.) está seleccionado para arrancar. Es posible que se solicite al usuario que seleccione qué iniciar.
  • El control pasa a /System/Library/CoreServices/BootX, el cargador de arranque. BootX carga el kernel y también extrae las insignias del sistema operativo, si las hay.
  • BootX intenta cargar una lista previamente almacenada en caché de controladores de dispositivos (creada/actualizada por /usr/sbin/kextcache). Tal caché es del tipo mkext y contiene los diccionarios de información y archivos binarios para múltiples extensiones del núcleo. Tenga en cuenta que si la memoria caché mkext está dañada o f alta, BootX buscará en /System/Library/Extensions las extensiones que se necesitan en el escenario actual (según lo determinado por el valor de la propiedad OSBundleRequired en el archivo Info.plist del paquete de la extensión.
  • Se ejecuta la rutina init del kernel. Se determina el dispositivo raíz del sistema de arranque. En este punto, ya no se puede acceder al firmware.
  • El núcleo inicializa varias estructuras de datos Mach/BSD.
  • El kit de E/S está inicializado.
  • El kernel se inicia /sbin/mach_init, el demonio de nombres de servicio de Mach (bootstrap). mach_init mantiene asignaciones entre los nombres de los servicios y los puertos Mach que brindan acceso a esos servicios.

A partir de aquí, el inicio pasa a ser a nivel de usuario:

  • mach_init comienza /sbin/init, el BSD tradicional proceso de inicio. init determina el nivel de ejecución y ejecuta /etc/rc.boot, que configura la máquina lo suficiente para ejecutar un solo usuario.

Durante su ejecución, rc.boot y el otro rc fuente de scripts /etc/rc.common , un script de shell que contiene funciones de utilidad, como CheckForNetwork() (verifica si la red está activa), GetPID (), purgedir() (borra solo el contenido del directorio, no la estructura), etc.

  • rc.boot determina el tipo de inicio (multiusuario, seguro, CD-ROM, red, etc.). En caso de un arranque de red (la variable sysctl kern.netboot se establecerá en1 en cuyo caso), se ejecuta /etc/rc.netboot con un inicio argumento.

/etc/rc.netboot maneja varios aspectos del arranque de red. Por ejemplo, realiza montajes de red y (si los hay) locales. También llama a /usr/bin/nbst para asociar un archivo shadow con la imagen de disco que se utiliza como dispositivo raíz.La idea es redirigir las escrituras al archivo shadow, que con suerte está en el almacenamiento local.

  • rc.boot determina si se requiere una verificación de coherencia del sistema de archivos. Los arranques de un solo usuario y de CD-ROM no ejecutan fsck. SafeBoot siempre ejecuta fsck. rc.boot también maneja el estado de retorno de fsck.
  • Si rc.boot sale correctamente, /etc/rc , luego se ejecuta el script de inicio multiusuario. Si arranca desde un CD-ROM, el script cambia a /etc/rc.cdrom (instalación).
  • /etc/rc monta sistemas de archivos locales (HFS+, HFS, UFS, /dev/ fd, /.vol), asegura que el directorio /private/var/tmp existe y ejecuta /etc/rc.installer_cleanup, si existe (lo dejó un instalador antes de reiniciar).
  • /etc/rc.cleanup se ejecuta. “Limpieza” una serie de directorios/archivos específicos de Unix y Mac.
  • BootCache se ha iniciado.
  • Se establecen
  • Varias sysctl variables (como el número máximo de vnodes, System V IPC, etc.). Si /etc/sysctl.conf existe (más /etc/sysctl-macosxserver.conf en Mac OS X Server), se lee y se configuran las sysctl variables contenidas en él.
  • syslogd se inicia.
  • Se crea el archivo de símbolos Mach.
  • /etc/rc inicia kextd, el proceso del demonio que carga la extensión del kernel a pedido de los procesos del kernel o del cliente.
  • /usr/libexec/register_mach_bootstrap_servers se ejecuta para cargar varios servicios basados ​​en arranque Mach contenidos en / etc/mach_init.d
  • portmap y netinfo se inician.
  • Si /System/Library/Extensions.mkext es anterior a /System/Library/Extensions , /etc/rc elimina el mkext existente y crea uno nuevo. También crea uno si no existe uno.
  • /etc/rc comienza /usr/sbin/update , el demonio que vacía las memorias caché internas del sistema de archivos en el disco con frecuencia.
  • /etc/rc inicia el sistema de memoria virtual. /private/var/vm está configurado como el directorio de intercambio. /sbin/dynamic_pager se inicia con los argumentos apropiados (plantilla de ruta de nombre de archivo de intercambio, tamaño de los archivos de intercambio creados, disparadores de alerta de agua alta y baja que especifican cuándo crear un intercambio adicional archivos o eliminar los existentes).
  • /etc/rc comienza /usr/libexec/fix_prebindingpara corregir archivos binarios enlazados incorrectamente.
  • /etc/rc ejecuta /etc/rc.cleanuppara limpiar y restablecer archivos y dispositivos.
  • /etc/rc finalmente lanza /sbin/SystemStarter para manejar elementos de inicio desde ubicaciones como /System/Library/StartupItems y /Library/StartupItems Un StartupItem es un programa, generalmente un script de shell, cuyo nombre coincide con el nombre de la carpeta. La carpeta contiene un archivo de lista de propiedades que contiene pares clave-valor como Description, Provides, Requiere, OrderPreference, iniciar/detener mensajes, etc. Puede ejecutar SystemStarter -n -D como raíz para que el programa imprima información de dependencia y depuración (sin ejecutar nada en realidad).
  • El elemento de inicio CoreGraphics inicia el daemon de Apple Type Services (ATSServer ), así como el servidor de Windows (WindowServer).

¡Y luego se inicia tu Mac!

Puedes ver un poco de esta actividad tú mismo con el modo detallado (que puedes iniciar en modo detallado por inicio, o incluso puedes configurar una Mac para que arranque siempre en modo detallado si quieres ver siempre el arranque estilo Unix), pero esta es una explicación bastante completa.

Apple también tiene alguna documentación disponible sobre el proceso de arranque de Mac disponible aquí en su biblioteca de documentación para desarrolladores aquí.

Tenga en cuenta que la URL original que proporciona la información anterior ya no está activa, por lo que esa publicación se ha incluido arriba para la posteridad a través de caché. La fuente original era un hilo en KernelThread en la siguiente URL: http://www.kernelthread.com/mac/osx/arch_startup.html que actualmente está fuera de línea y no redirige a una nueva ubicación.

Si tiene alguna cosita u otras adiciones para agregar a la secuencia de arranque de Mac OS X, ¡comparta en los comentarios!

¿Qué sucede en el proceso de arranque de Mac OS X?