Foros de Software LibreChat #SoftwareLibreSociosSiguiente web/blog»

Proceso de arranque en GNU/Linux

La secuencia de arranque, (boot o booting en inglés) es el proceso que inicia el sistema operativo cuando el usuario enciende un computador. Se encarga de la inicialización del sistema y de los dispositivos.

En este manual, veremos los conceptos básicos de un arranque en el sistema operativo GNU/Linux, el cual no ayudara a comprender un poco mas al sistema operativo del pingüino.

Conceptos Previos

Runlevel.- O nivel de ejecución se refiere al modo de operación en los sistemas operativos que implementan el estilo de sistema de arranque de iniciación tipo UNIX System V.

En términos prácticos, cuando el computador entra al runlevel 0, está apagado, y cuando entra al runlevel 6, se reinicia. Los runlevels intermedios (1 a 5) difieren en relación a qué unidades de disco se montan, y qué servicios de red son iniciados. Los niveles más bajos se utilizan para el mantenimiento o la recuperación de emergencia, ya que por lo general no ofrecen ningún servicio de red. Los detalles particulares de configuración del runlevel varía bastante entre sistemas operativos, y ligeramente entre los administradores de sistema.

Init.-En sistemas GNU/Linux y otras versiones de sistemas derivados de Unix, init es el programa encargado de llevar a la estación de trabajo al nivel de ejecución en que se desea que opere. Init es el primer proceso en ejecución después de la carga del Kernel, e implementa dos sistemas de inicio: System V y uno derivado BSD, éstos sistemas especifican los scripts de arranque para inicializar los diferentes servicios, programas o registros que sean necesarios para que el sistema funcione como el usuario quiere o como el administrador estableció.

RAID.- El acrónimo RAID (Redundant Array of Independent Disks, ‘conjunto redundante de discos independientes’) hace referencia a un sistema de almacenamiento que usa múltiples discos duros entre los que distribuye o replica los datos. Dependiendo de su configuración (a la que suele llamarse «nivel»), los beneficios de un RAID respecto a un único disco son uno o varios de los siguientes: mayor integridad, mayor tolerancia a fallos, mayor throughput (rendimiento) y mayor capacidad. En el nivel más simple, un RAID combina varios discos duros en una sola unidad lógica. Así, en lugar de ver varios discos duros diferentes, el sistema operativo ve uno solo.

LVM.- Es una implementación de un administrador de volúmenes lógicos para el kernel Linux. Se escribió originalmente en 1998 por Heinz Mauelshagen, que se basó en el administrador de volúmenes de Veritas usado en sistemas HP-UX.

BIOS.- El sistema Básico de entrada/salida Basic Input-Output System (BIOS) es un código de interfaz que localiza y carga el sistema operativo en la RAM; es un software muy básico instalado en la placa base que permite que ésta cumpla su cometido. Proporciona la comunicación de bajo nivel, el funcionamiento y configuración del hardware del sistema que, como mínimo, maneja el teclado y proporciona salida básica (emitiendo pitidos normalizados por el altavoz de la computadora si se producen fallos) durante el arranque. El BIOS usualmente está escrito en lenguaje ensamblador.

MBR.- Un master boot record (MBR) es el primer sector ("sector cero") de un dispositivo de almacenamiento de datos, como un disco duro. A veces, se emplea para el arranque del sistema operativo con cargador de arranque, otras veces es usado para almacenar una tabla de particiones y, en ocasiones, se usa sólo para identificar un dispositivo de disco individual, aunque en algunas máquinas esto último no se usa y es ignorado. En la práctica, el MBR casi siempre se refiere al sector de arranque de 512 bytes.

PROCESO DE ARRANQUE EN LINUX

El proceso de arranque en Linux es la forma en la cual los sistemas operativos basados en Linux se inicializan. Es similar a la forma en que arranca BSD y otros sistemas Unix.

Todo el proceso de arranque, se lleva a cabo en 4 etapas reconocidas por el código que en ese momento tiene control sobre la CPU; al inicio solo el BIOS tiene control, después será el cargador de arranque quien tenga en control, más adelante el control pasa al propio kernel Linux, y en la última etapa será cuando tengamos en memoria los programas de usuario conviviendo junto con el propio sistema operativo y serán ellos quienes tengan el control del CPU.

La etapa del cargador de arranque no es totalmente necesaria, un determinado BIOS puede cargar y pasar el control a Linux sin hacer uso del cargador de arranque, mas sin embargo, usar un cargador de arranque facilita al usuario la forma en que el kernel será cargado.

BIOS

Al encender la computadora las primeras operaciones las realiza el BIOS. En esta etapa se realizan operaciones básicas de hardware. El proceso de arranque será diferente dependiendo de la arquitectura del procesador y el BIOS.

Una vez que el hardware se reconoce y se deja listo, el BIOS carga en memoria el código ejecutable del cargador de arranque y le pasa el control.

Hay variedad de BIOS que permiten al usuario definir en qué dispositivo/partición se encuentra dicho cargador de arranque.

Cargador de arranque

Un cargador de arranque (boot loader en inglés) es un programa diseñado exclusivamente para cargar un sistema operativo en memoria. La etapa del cargador de arranque es diferente de una plataforma a otra.

Como en la mayoría de arquitecturas este programa se encuentra en la MBR, la cual es de 512 bytes, no es suficiente para cargar en totalidad un sistema operativo. Por eso, el cargador de arranque consta de varias etapas.

Para las plataformas x86, el BIOS carga la primera etapa del cargador de arranque (típicamente una parte de LILO o GRUB). El código de esta primera etapa se encuentra en el sector de arranque (o MBR). La primera etapa del cargador de arranque carga el resto del cargador de arranque.

Los cargadores de arranque modernos típicamente preguntan al usuario cual sistema operativo (o tipo de sesión) desea inicializar.

Kernel

El kernel Linux se encarga de lo principal del sistema operativo, como el manejo de memoria, planificador de tareas, entradas y salidas, comunicación interprocesos, y demás sistemas de control.

El proceso del kernel se lleva en dos etapas; la etapa de carga y la etapa de ejecución.

El kernel generalmente se almacena en un archivo comprimido con zlib. Este archivo comprimido se carga y se descomprime en memoria, también se cargan los drivers necesarios por medio de un disco RAM (initrd). El disco RAM es un sistema de archivos temporal usado en la fase de ejecución del kernel.

Una vez que el kernel se ha cargado en memoria y está listo, se lleva a cabo su ejecución. Esto se realiza llamando la función startup del kernel (en los procesadores x86, se encuentra en la función startup_32() del archivo /arch/i386/boot/head), esta función establece el manejo de memoria (tablas de paginación y paginación de memoria), detecta el tipo del CPU y funcionalidad adicional como capacidades de punto flotante. Después cambia a funcionalidades que no dependen del hardware por medio de la llamada a la función start_kernel().

El proceso de arranque en Linux monta el disco RAM que fue cargado anteriormente como un sistema de archivos temporal. Esto permite que los módulos que contienen drivers puedan ser cargados sin depender de otros drivers de dispositivos físicos, y además mantiene el kernel más pequeño.
Se inicializan dispositivos virtuales con la intención de ser usados para crear sistemas de archivos, como LVM o software RAID antes de desmontar la imagen initrd. El sistema de archivos es cambiado por medio de la función pivot_root() la cual desmonta el sistema de archivos temporal y lo reemplaza con el real, el cual más tarde estará totalmente disponible liberando la memoria que ocupada el temporal.

Una vez listo el manejador de excepciones, el planificador de tareas y demás, por fin el sistema se considera totalmente operacional a nivel de procesos, por lo tanto se ejecuta el proceso init (el primer proceso en espacio de usuario), y luego inicia una tarea de inactividad por medio de cpu_idle().

Proceso init

El proceso init establece el ambiente del usuario. Verifica y monta los sistemas de archivos, inicia servicios de usuario necesarios y cambia a un ambiente basado en usuario cuando el proceso de inicio termina.

Es similar a los procesos init de Unix y BSD del cual deriva, pero en algunos casos tiene diferencias y personalizaciones. En un sistema Linux estándar, init se ejecuta con un parámetro, conocido como runlevel, que toma un valor desde 1 hasta 6, y que determina cuales subsistemas serán operacionales.

Cada runlevel tiene sus propios scripts los cuales involucran un conjunto de programas. Estos scripts se guardan en directorios con nombres como "/etc/rc...". El archivo de configuración de init es /etc/inittab.

Cuando el sistema se arranca, se verifica si existe un runlevel predeterminado en el archivo /etc/inittab, si no, se debe introducir por medio de la consola del sistema. Después se procede a correr todos los scripts relativos al runlevel especificado.

Descargar Proceso de arranque en GNU/Linux

Firma,
División M, ForjandoCodigo.

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.