Proceso de Arranque de un Ordenador

Revisión del 09:16 16 abr 2014 de Reynier idict (discusión | contribuciones)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Proceso de Arranque de un Ordenador
Información sobre la plantilla
LinuxBoot.jpg
IdiomaEspañol

Proceso de Arranque de un Ordenador. El proceso de arranque inicia desde que se pulsa el interruptor de encendido hasta que se carga el sistema operativo,el ordenador realiza una serie de tareas para verificar el buen funcionamiento del hardware instalado. El chequeo inicial que lleva a cabo se denomina post (power on self test) y consiste en una prueba para comprobar que el equipo físico esté bien. Este chequeo se realiza con unos programas que están en la bios.

Secuencia de arranque

Como se observo el BIOS de sistema es el programa que se corre cuando usted energiza la PC. La secuencia de los pasos de dicho programa son en general similares si bien varia del tipo de fabricante que diseña el BIOS, muy ligado al tipo de tarjeta madre y finalmente a los periféricos que usted tienen enganchado a la PC. Dichos pasos se pudieran resumir.

  • La alimentación de la fuente llega a la tarjeta madre y con ella al sistema completo. Es de destacar que las fuentes de alimentación demoran un tiempo en generar voltajes estables y dentro de los parámetros de operación permisibles, por lo que típicamente se valen de una señal llamad Power Good indicándole a los circuitos lógicos asociados al procesador central que de un reset al mismo para iniciar su operación.
  • Cuando el procesador sale del modo reset el mismo inicia una búsqueda de instrucciones en una direcciónalta de memoria, típicamente los últimos 16 bytes del arreglo de memoria ROM. Los fabricantes obligan al procesador a iniciar su ciclo de trabajo en esa zona con vistas a compatibilizar el trabajo de la PC y permitir que el programa almacenado en la ROM pueda variar de tamaño. En esa zona lo único que se coloca es un “salto” instruyendo al procesador a ir a la dirección de inicio del programa BIOS.
  • La primera subrutina grabada en el BIOS de una PC recibe el nombre de POST que viene del ingles Power On Self Test ( o test de autochequeo). El mismo no es mas que un conjunto de instrucciones que posibilitan la inicialización, programación y chequeo de todos los subconjuntos que componen una PC, como lo son los controladores de DMA, de interrupciones, de memoria, etc. Si el POST encuentra un error automáticamente detiene el proceso. En ocasiones brindando un código de error que se traduce en una secuencia de O y 1 por algunos puertos específicos o/ y un conjunto de beeps por la bocina. Los técnicos de computadoras utilizan dichos códigos para diagnosticar posibles fallas en la circuiteria de la tarjeta madre.
  • Una vez concluido el POST el BIOS busca la presencia de la tarjeta de vídeo, busca el programa propio que esta tiene grabada en su ROM y le cede el control temporalmente. Este a su vez inicializa la tarjeta de vídeo y es entonces cuando por primera vez aparece información en la pantalla del monitor. Aunque muchas veces fugazmente el fabricante de la tarjeta de vídeo informa de la marca de la misma, cantidad de memoria y versión del BIOS almacenado en ella.
  • Luego, retomando el control el BIOS de la PC busca por la presencia de otros dispositivos en la computadora que requieran de programas específicos de inicialización. Por ejemplo los discos duros IDE/ATA ubican el programa de inicialización del disco de manera general en la dirección C8000h.
  • El BIOS “imprime” en pantalla la información sobre su versión, fabricante, etc.
  • El programa inicia chequeos más generales del sistema, como lo es el conteo completo de la memoria. En caso de encontrar algún error este generará en pantalla el correspondiente mensaje. Acto seguido se realiza un inventario total del sistema, donde se inspecciona que tipo de hardware lleva la computadora. Los BIOS modernos poseen muchos parámetros que configuran de manera automática como lo son las cartas de tiempo de los accesos a memoria, los parámetros de los disco duros, características de los puertos de entrada / salida, COM y LPT, tipo de procesador, etc.
  • Si el BIOS es PNP compatible, detectara, inicializara y configurara los dispositivos con esta característica, mostrando en pantalla los mensajes correspondientes.
  • Generación de un sumario de la configuración de su PC. Este es útil para conocer que recursos posee disponibles y si alguno de ellos falló o no está presente. Desgraciadamente esta información es barrida en un abrir y cerrar de ojos.
  • Finalmente el BIOS pasa el control al dispositivo de booteo. Los BIOS modernos permiten escoger cual es el dispositivo que iniciara el boot del sistema, ya sea el floppy (ya hoy poco probable), el disco duro o el CDROM. Si el BIOS no encuentra a quien ceder el control del boot generalmente se detiene, mostrando el mensaje correspondiente.

Fase del cargador de arranque en Linux

A partir de ese momento, el proceso de arranque continúa de la siguiente manera. La primera etapa del cargador de arranque carga el resto del gestor de arranque, que normalmente da un mensaje que pregunta que sistema operativo (o tipo de sesión) el usuario desea inicializar. Bajo LILO, esto se hace a través del mapa instalado que lee el archivo de configuración /etc/lilo.conf para identificar los sistemas disponibles. Incluye datos como la partición de arranque y la localización del kernel para cada uno, así como las opciones personalizadas en su caso. El sistema operativo seleccionado es cargado en la memoria RAM, un sistema de archivos mínimo inicial se establece en la memoria RAM desde un archivo de imagen (" initrd "), y junto con los parámetros adecuados, el control se pasa al sistema operativo activado recientemente.

LILO no entiende los sistemas de archivos, por lo que utiliza desplazamientos de disco sin procesar y el BIOS para cargar los datos. Se carga el código del menú y, a continuación, en función de la respuesta, carga, o el sector MBR del disco de 512 bytes como en Microsoft Windows, o la imagen del kernel de Linux. GRUB por el contrario comprende los sistemas de archivos comunes ext2 , ext3 y ext4. Debido a que GRUB almacena sus datos en un archivo de configuración en vez de en el MBR y a que contiene un interfaz de línea de comandos, a menudo es más fácil rectificar o modificar GRUB si está mal configurado o corrupto.

GRUB

GRUB se carga y se ejecuta en 4 etapas.

  • La primera etapa del cargador la lee el BIOS desde el MBR.
  • La primera etapa carga el resto del gestor de arranque (segunda etapa). Si la segunda etapa está en una unidad grande, en ocasiones se carga una fase intermedia 1.5, que contiene código adicional para permitir que los cilindros por encima de 1024, o unidades tipo LBA, puedan leerse. El gestor de arranque 1.5 es almacenado (si es necesario) en el MBR o en la partición de arranque.
  • La segunda etapa del gestor de arranque ejecuta y muestra el menú de inicio de GRUB que permite al usuario elegir un sistema operativo y examinar y modificar los parámetros de inicio.
  • Después de elegir un sistema operativo, se carga y se le pasa el control.

GRUB soporta métodos de arranque directo, arranque chain-loading, LBA, ext2, ext3, ext4 y hasta "un pre-sistema operativo en máquinas x86 totalmente basado en comandos". Contiene tres interfaces: un menú de selección, un editor de configuración, y una consola de línea de comandos.

LILO

LILO es más antiguo. Es casi idéntico a GRUB en su proceso, excepto que no contiene una interfaz de línea de comandos. Por lo tanto todos los cambios en su configuración deben ser escritos en el MBR y luego reiniciar el sistema. Un error en la configuración puede dejar el disco inservible para el proceso de arranque hasta tal grado, que sea necesario usar otro dispositivo (disquete, etc) que contenga un programa capaz de arreglar el error. Además, no entiende el sistema de archivos. En su lugar, la ubicación de los archivos de imagen se almacenan directamente en el MBR y el BIOS se utiliza para acceder a ellos directamente.

Loadlin

Otra forma de cargar Linux es desde DOS o Windows 9x, donde el núcleo de Linux reemplaza completamente la copia de funcionamiento de estos sistemas operativos. Esto puede ser útil en el caso de hardware que necesita ser conectado a través del software y la configuración de estos programas sólo está disponible para DOS y no para Linux, debido a cuestiones de secretos industriales y código propietario. Sin embargo, esta tediosa forma de arranque ya no es necesaria en la actualidad ya que Linux tiene drivers para multitud de dispositivos hardware. Aun así, esto era muy útil en el pasado. Otro caso es cuando Linux se encuentra en un dispositivo que el BIOS no lo tiene disponible para el arranque. Entonces, DOS o Windows pueden cargar el driver apropiado para el dispositivo superando dicha limitación del BIOS, y cargar Linux desde allí.

Fase del kernel

El kernel de Linux se encarga de todos los procesos del sistema operativo, como la gestión de memoria, planificador de tareas, I/O, comunicación entre procesos, y el control general del sistema. Este se carga en dos etapa: en la primera etapa el kernel (como un archivo imagen comprimido) se carga y se descomprime en memoria, y algunas funciones fundamentales como la gestión de memoria de base se establecen. El control entonces se cambia a la etapa final para iniciar el kernel principal. Una vez que el núcleo está en pleno funcionamiento - y como parte de su puesta en marcha, después de ser cargado y ejecutado - el kernel busca un proceso de inicio para ejecutar, que (separadamente) fija un espacio de usuario y los procesos necesarios para un entorno de usuario y ultimar la entrada . Al núcleo en sí entonces se le permite pasar a inactivo, sujeto a las llamadas de otros procesos.

Fase de carga del kernel

El kernel es cargado normalmente como un archivo imagen, comprimido dentro de otro con zlib como zImage o bzImage. Contiene una cabecera de programa que hace una cantidad mínima de instalación del hardware, descomprime la imagen completamente en la memoria alta , teniendo en cuenta cualquier disco RAM si está configurado. A continuación, lleva a cabo su ejecución. Esto se realiza llamando la función startup del kernel (en los procesadores x86) a través de la función startup_32() del archivo /arch/i386/boot/head).

Fase de inicio del kernel

La función de arranque para el kernel (también llamado intercambiador o proceso 0) establece la gestión de memoria (tablas de paginación y paginación de memoria), detecta el tipo de CPU y cualquier funcionalidad adicional como capacidades de punto flotante, y después cambia a las funcionalidades del kernel para arquitectura no específicas de Linux, a través de una llamada a la función start_kernel(). start_kernel ejecuta una amplia gama de funciones de inicialización. Establece el manejo de interrupciones (IRQ), configura memoria adicional, comienza el proceso de inicialización (procesa el espacio del primer usuario), y luego comienza la tarea inactiva a través de cpu_idle(). En particular, el proceso de inicio del kernel también monta el disco RAM inicial ("initrd") que se ha cargado anteriormente como el sistema raíz temporal durante la fase de arranque. Esto permite que los módulos controladores se carguen sin depender de otros dispositivos físicos y drivers y mantiene el kernel más pequeño. El sistema de archivos raíz es cambiado más tarde a través de la llamada a pivot_root(), que desmonta el sistema de archivos temporal y lo reemplaza por el real una vez que éste sea accesible. La memoria utilizada por el sistema de archivos temporal es entonces recuperada. Por lo tanto, el núcleo inicializa los dispositivos, monta el sistema de archivos raíz especificado por el gestor de arranque como de sólo lectura , y se ejecuta Init (/sbin/init), que es designado como el primer proceso ejecutado por el sistema (PID=1). También puede ejecutar opcionalmente initrd para permitir instalar y cargar dispositivos relacionados (disco RAM o similar), para ser manipulados antes de que el sistema de archivos raíz está montado. En este punto, con las interrupciones habilitadas, el programador puede tomar el control de la gestión general del sistema, para proporcionar multitarea preventiva, e iniciar el proceso para continuar con la carga del entorno de usuario en el espacio de usuario.

El proceso de inicio

El trabajo de Init es "conseguir que todo funcione como debe ser" una vez que el kernel está totalmente en funcionamiento. En esencia, establece y opera todo el espacio de usuario. Esto incluye la comprobación y montaje de sistemas de archivos, la puesta en marcha los servicios de usuario necesarios y, en última instancia, cambiar al entorno de usuario cuando el inicio del sistema se ha completado. Es similar a los procesos Init de Unix y BSD, de la que deriva, pero en algunos casos se ha apartado o se hicieron a la medida. En un sistema Linux estándar, Init se ejecuta con un parámetro, conocido como nivel de ejecución, que tiene un valor entre 1 y 6, y que determina que subsistemas pueden ser operacionales. Cada nivel de ejecución tiene sus propios scripts que codifican los diferentes procesos involucrados en la creación o salida del nivel de ejecución determinado, y son estas secuencias de comandos los necesarios en el proceso de arranque. Los scripts de Init se localizan normalmente en directorios con nombres como "/etc/rc...". El archivo de configuración de más alto nivel para Init es /etc/inittab. Durante el arranque del sistema, se verifica si existe un nivel de ejecución predeterminado en el archivo /etc/inittab, si no, se debe introducir por medio de la consola del sistema. Después se procede a ejecutar todos los scripts relativos al nivel de ejecución especificado. Después de que se han dado lugar todos los procesos especificados, Init se aletarga, y espera a que uno de estos tres eventos sucedan:- que procesos comenzados finalicen o mueran; un fallo de la señal de potencia (energía); o una petición a través de /sbin/telinit para cambiar el nivel de ejecución.

Fuente

  • CD de la Carrera de Infirmática

Referencias