martes, 27 de septiembre de 2011

III Secuencia de arranque en linux

la 3º entrega de las secuencias de arranque de los principales sistemas operativos actuales.



1-Arranque del hardware.

2-El cargador del sistema operativo.

3-Inicio del kernel
.
4-init y inittab.

5-Scripts de arranque.


Arranque del hardware:

Después de pulsar el botón de arranque un programa (PROM) contenido en la ROM (Read Only Memory, memoria de solo lectura), en los PCs se le suele llamar al programa BIOS.
La BIOS hace un test a la maquina y accede una memoria no volátil (se la suele llamar CMOS o nvram) en busca de mas parámetros, esta memoria no volátil esta alimentada continuamente por una pequeña batería.
Los parámetros almacenados en la nvram difieren según sistemas, pero como mínimo, el PROM debe conocer cual es el dispositivo de arranque (un disco duro normalmente).
El PROM accede al dispositivo de arranque, carga el lanzador del sistema operativo, que esta localizado en una pequeña parte del dispositivo de arranque, y le transfiere el control.

El cargador del sistema operativo:

En los PCs el cargador del sistema operativo (OS Loader a partir de ahora) esta localizado en el primer sector del dispositivo de arranque, también conocido como MBR (Master Boot Record).
El MBR esta muy limitado en cuanto a espacio (512 bytes para el OS Loader y la tabla de particiones) por lo que es prácticamente imposible almacenar un OS Loader completo
.
Por eso la mayoría de los SO hacen que un primer cargador localizado en la MBR llame a un segundo mas grande localizado en una partición.

El cargador de Linux suele ser lilo o grub, los dos son instalados como segundos cargadores o como un lanzador de dos partes.
El principal trabajo de un cargador es localizar el kernel en el disco, cargarlo y ejecutarlo. La mayoría de los cargadores permiten un uso alternativo para poder cargar mas de un kernel y poder pasarle argumentos.


Inicio del kernel:

Cuando el kernel termina de cargarse inicia los dispositivos mediante los drivers, inicia el swapper (un proceso que se encarga de manejar la memoria) y monta el sistema de archivos del root (/).
Solo entonces el kernel crea el proceso numero 1 llamado init (/sbin/init) y le pasa todos los argumentos que le han pasado a el.

init:

init es el padre de todos los procesos, su primera acción es lanzar los procesos que están en /etc/inittab, este archivo contiene las instrucciones para que init cree las 'getty':
Para que los usuarios puedan logearse, getty abre un puerto tty, pregunta un nombre de usuario y lanza /bin/login.

Login se usa para establecer una nueva sesión con el sistema, login suele ser lanzado por getty.
Login debe ser 'especial' para la shell y no debe ser lanzado como un sub-proceso, si esto ocurre mostrara un mensaje de error.

Cuando login es ejecutado por la shell pide el nombre del usuario y su contraseña (esta ultima no sera mostrada según se escribe), después de abrir sesión se mostraran todos los mensajes sobre el correo o lo que estén definidos en .bash_profile o .bashrc.


El archivo inittab también describe que procesos que deben ser lanzados al arrancar y durante las operaciones normales.

inittab distingue varios niveles de funcionamiento, cada uno de los cuales tiene su propia gama de procesos.

Esto proporciona al administrador un fácil esquema en donde cada nivel se corresponde con una gama de servicios.
Si /etc/inittab no existe o no hay ninguna entrada sobre cual es el nivel de funcionamiento por defecto, este debe ser introducido mediante la consola.


Niveles de funcionamiento (runlevels):

Un nivel de funcionamiento es una configuración del software del sistema que permite que solo existan un grupo de procesos creados por init por cada nivel definido en /etc/inittab.
init puede estar en 8 niveles: 0-8 y S/s..

El nivel puede ser cambiado por el root mediante telinit que manda la señal a init para que cambie al nivel deseado.
Los niveles 0,1 y 6 están 'reservados'.

El nivel 0 es usado para parar el sistema, el nivel 6 para re-arrancar el equipo y el 1 es usado para el modo monousuario. El nivel 'S' no esta realmente pensado para ser usado directamente excepto para los scripts que son ejecutados cuando se entra en el nivel 1.


Los niveles del 7 al 9 son también validos pero no suelen incluirse.


Scripts de arranque:

Por cada uno de los servicios del sistema (main, nfs, cron...) hay un script de arranque localizado en /etc/init.d. Cada uno de estos scripts deben aceptar como argumento la palabra 'start' para iniciar el servicio, también pueden aceptar otras como 'restart', 'status', etc...

Para hacer posible que cada nivel funcionamiento se corresponda con unos servicios existen un directorio para cada nivel, que están en /etc/rc[0-6].d, en cada uno de esos directorios hay enlaces simbólicos a los scripts que están en /etc/init.d.
Un primer script (/etc/rc o /etc/init.d/rc) es lanzado desde inittab y lanza los scripts (mediante los enlaces), todos los links que empiecen por 'S' serán lanzados con el argumento 'start' y los que empiecen con 'K' serán 'matados' con el argumento 'stop'.
Para poder lanzar unos scripts después de otros (por ejemplo puede que algún script necesite de otro para funcionar) después de 'S' o 'K' hay un numero de dos cifras que indica el orden, cuando menos sea el valor del numero antes sera lanzado o matado.
Para controlar el orden de arranque y de los niveles de funcionamiento hay que cambiar los enlaces, aunque en muchas distribuciones de Linux existen programas que lo hacen mas fácil (véase chkconfig).

No hay comentarios:

Publicar un comentario

Deja tus opiniones y/o comentarios, nos sirven para mejorar nuestro blog, gracias