Arranque de un UNIX tipo System V

El arranque de un UNIX tipo System V (en general de cualquier UNIX clásico) se puede dividir en dos etapas principales: el arranque del núcleo del sistema operativo (SO), y la inicialización que lleva acabo el programa "init".

Nada más encender la máquina, normalmente toma el control algún tipo de ROM que se encarga de verificar la integridad del hardware. En las PC es la BIOS, y el las "Sun" es la PROM. Una vez que la ROM haya terminado su testeo cede el control al sistema operativo. Este mecanismo depende de cada arquitectura en particular, en los PC se carga el primer sector del disco rígido primario (o disquete), que es el MBR (Master Boot Record), en las Sun, la PROM ofrece la posibilidad de elegir el dispositivo de desde donde se cargará el SO, esto puede ser tan atípico como un lector de cinta magnética o una red local. En las modernas placas madres la BIOS permite la carga del SO desde un CD-ROM.

El gestor de arranque, que suele estar en los primeros clusters del dispositivo elegido, se encarga de cargar y ejecutar el núcleo UNIX, llamado normalmente vmunix, en Linux vmlinuz. Para cargar dicho archivo, o bien la información sobre los clusters donde se halla en el mismo gestor, como es el caso del LILO, o bien el gestor es tan inteligente de entender un sistema de archivos UNIX, como es el caso de las Estaciones de Trabajo. Una vez cargado en un segmento de memoria reservada para tal fin, el gestor lo interpreta y cede el control al SO.

El núcleo se ejecuta en modo supervisor del procesador, inicia las tablas de interrupciones, excepciones, etc, (en el caso de Linux ver
/usr/src/linux/arch/i386/kernel/head.S, esta rutina se encarga de ser la antesala a la rutina main()) la gestión de la memoria paginada MMU (Memory Management Unit) y finalmente el planificador de procesos o "scheduler". Despues reconoce uno por uno los dispositivos para los que fue configurado, e inicia los controladores correpondientes (device drivers). Una vez terminada esta operación monta el "directorio raíz", una vez más el dispositivo donde se encuentra debe estar definido en el propio ejecutable encargado. Si no lo encuentra el SO genera un error especial llamado "pánico" (panic). Este tipo de error es bloqueante para el SO, y no continúa hasta que sea corregido (en el caso de las PC apagando la máquina, en los sitemas MainFrame lanza un "prompt" y un intérprete propio de comandos para corregirlo).

Cuando ha conseguido montar el directorio raíz, el núcleo busca en /etc un programa llamado "init" (el Linux está en /sbin/init) que se encargará de continuar la iniciación del SO. El proceso original (PID 0) ejecuta una llamada "fork()", se clona en el proceso PID 1 que hace otra llamada "exec()" al "init" que sustituye en memoria al clonado. El proceso PID 0 pasa a realizar tareas que depende de los SO, en Linux pasa a ser el "swapper", en BSD el "kernel memory manager", etc. Previamente a la ejecución del init el PID 1 pasa a modo usuario y la única forma de acceder al modo supervisor es por una llamada al sistema (system call). El programa init lee su configuración del archivo ubicado en /etc/inittab. Con el programa "init" el Sistema V introduce el concepto de niveles de ejecución o "runlevels". Estos son estados del SO en función de los serviciós que puede ofrecer. Hay niveles diferentes para arrancar la máquina en modo mantenimiento (single user), multiusuario, o para arrancar el sistema de ventanas XWindow.

Las entradas que encontramos en el fichero inittab son los guiones (script) que contiene los comandos de inicialización del sistema. También hay líneas que contienen comandos a ejecutarse en caso de sucesos excepcionales, como ser un corte de energía. Los indicadores del proceso tienen ciertas instrucciones especiales como ser: "wait",para esperar a que termine antes de continuar, "respawn", para ejecutar otra copia cuando termina, o "once", para ejecutar por única vez.

En el Sistema V normalmente hay un guión que debe ejecutarse siempre y que contiene los mecanismos especiales de ejecución independientes del nivel. Éste posee la entrada 'si' en general el guión se llama rc.sysinit. Luego le pasa el control a los guiones ubicados en /etc/rc.d/rc... que según el nivel lanzan los procesos en segundo plano supervisados por el init (demonios). Estos demonios se encargan de gestionar el transporte del correo (sendmail), impresión (lpd), etc.

Una vez lanzado estos servicios se lanzan los procesos que permiten la entrada de los usuarios al sistema con previa autenticación. Estos son los encargados de llamar los intérpretes de comandos especificados en /etc/passwd.

Jorge Villalonga Espana

Lic. Horacio Castellini - hcaste@lugro.org.ar

www.lugro.org.ar

Distribuir contenido

Office OpenXML (OOXML) no debe ser ISO 29500