Si ya has elegido e instalado tu distribución de Linux, podemos empezar a trabajar. Hoy veremos algunos de los conceptos básicos de Linux. En la anterior lección ya introdujimos algunos de ellos:
- Kernel.
- Distribución o “distro”.
- Boot Loader.
- Servicio.
- Filesystem.
- X Window System.
- Command Line Interface (CLI).
- Shell.
Hoy vamos a verlos en funcionamiento. Se trata de un tema técnico, por lo que puedes echarle un vistazo y pasar a las siguientes lecciones para volver más adelante si lo prefieres.
El proceso de arrancado en Linux (boot process)
El proceso de arrancado tiene lugar al encender la máquina, y comprende todas las operaciones realizadas hasta que el sistema operativo está activo y la interfaz de usuario es funcional. Comprende diferentes etapas:
- Encendido de la máquina.
- BIOS.
- Master Boot Record (MBR) o EFI Partition.
- Boot Loader (vg. GRUB o ISOLINUX).
- Kernel.
- Inicialización de la RAM.
- /sbin/init.
- Command Shell.
- GUI (vg. X Window)
Aunque se trata de un proceso técnico, que no es necesario dominar para poder utilizar Linux, lo cierto es que involucra algunos aspectos útiles para la personalización del SO y la resolución de problemas.
BIOS
Aunque puede diferir dependiendo del dispositivo, el BIOS (Basic Input/Output System) se encarga de inicializar el hardware. Comprobará la memoria principal y se conectará a periféricos como la pantalla o el teclado. De ahí que también se conozca al proceso como POST (Power On Self Test).
Realizados los tests, el software BIOS quedará registrado en un chip ROM (Read-Only Memory) de la placa base, pasando el control del arrancado al sistema operativo.
MBR/EFI
Tras el POST, el BIOS cederá el control del sistema al Boot Loader, que suele almacenarse en un disco de memoria (por ejemplo, el disco duro). La ubicación del Boot Loader será bien el Master Boot Record o bien la partición EFI, por lo que será a partir de este punto cuando el sistema podrá acceder al hardware de almacenamiento masivo.
El objetivo de separar el disco en particiones es agrupar y separar la información, de tal modo que si ocurriera cualquier accidente, solo se dañara la parte afectada, quedando el resto intacto.
Durante este proceso, además, obtendrá cierta información del CMOS (Complementary metal-oxide-semiconductor), un circuito de bajo consumo que permite al sistema mantenerse informado de la hora y la fecha incluso cuando la máquina está apagada.
El método BIOS/MBR
En este sistema, el Boot Loader busca en la tabla de particiones una partición arrancable. A continuación, busca la siguiente etapa del proceso de arranzado y la carga en la ram.
El método EFI
En el sistema EFI/UEFI, el firmware busca una aplicación UEFI desde la que se pueda lanzar el sistema, y posteriormente la ejecuta. Aunque es más complejo que BIOS/MBR, también es más versátil.
Boot Loader
Los Boot Loaders más comunes son:
- GRUB (GRand Unified Boot Loader).
- ISOLINUX. Diseñado para permitir el arrancado desde dispositivos extraíbles.
- DAS U-Boot. Diseñado para permitir el arrancado en dispositivos embebidos.
El boot loader suele ofrecer una interfaz básica para elegir diferentes opciones de arrancado, y se encarga de cargar la imagen del kernel, la RAM y el sistema de archivos.
Este software se encuentra en la carpeta /boot, como veremos más adelante. Recuerda que el filesystem organiza los diferentes archivos de configuración y ejecución en un sistema jerarquizado. Te sonará porque habrás utilizado sistemas de archivos ya en el sistema operativo que utilices habitualmente: es el sistema de carpetas y archivos.
Una vez inicializado aparecerá una pantalla splash que permitirá, en su caso, que el usuario elija sistema operativo y kernel en caso de haber varios arrancables. Posteriormente, se cargarán en la RAM y se pasará el control del sistema al propio kernel, que deberá descomprimirse y testear el hardware. Para ello, el kernel incorpora drivers que aseguren la operatividad de los dispositivos.
Inicialización de la RAM
La imagen initramfs contiene archivos binarios con las operaciones necesarias para montar el root filesystem, inicializar los drivers necesarios para acceder a discos de almacenamiento masivo y localizar y cargar los drivers necesarios para que funcionen los dispositivos del usuario.
El montaje del filesystem se hace por medio del programa mount, y una vez comprobado que el sistema de archivos se ha cargado correctamente, se eliminará el programa initramfs de la RAM y se ejecutará el programa init, hospedado en la ruta /sbin/init, que es el encargado de ceder el control al filesystem real.
En resumen, tenemos tres procesos en esta etapa posterior al POST:
- initramfs, que cargará en la RAM los archivos necesarios para montar el sistema de archivos y acceder a los discos de almacenamiento masivo, donde se encuentran el resto de programas.
- mount, que montará el filesystem y eliminará initramfs de la memoria RAM.
- init, que inicializará el filesystem donde se encuentra el resto de archivos necesarios para inicializar el sistema operativo.
El kernel
Simultáneamente a la carga de initramfs en la memoria, el Boot Loader también carga el kernel en la RAM. A continuación, el kernel inicializará el sistema y todo el hardware asociado al mismo (procesadores, sistemas de almacenamiento, sistemas de entrada y salida…).
Una vez cargado lanzará /sbin/init, del que ya hemos hablado, que se convertirá en el proceso inicial e iniciará otros procesos necesarios para levantar el sistema. init y kernel serán los encargados de lanzar todo el software necesario para arrancar el sistema operativo.
init también se encarga de gestionar todos aquellos procesos que no dependan del kernel, como los servicios de inicio de sesión o el apagado del equipo.
Existen varias alternativas para este proceso de arrancado, que incluyen:
- SysVinit. Estructura los procesos de arrancado como una serie de etapas secuenciales. Por tanto, no aprovecha el procesamiento paralelo como sí lo hacen los sistemas modernos, lo que implica tiempos de encendido y apagado superiores.
- systemd. Mediante el procesamiento en paralelo mitiga los tiempos de arranque, que resultan críticos en dispositivos como los smartphones o en servicios cloud. Sus procesos tienden a ser más sencillos.
systemd se aloja en la ruta /lib/systemd/systemd, y es quien recibe el control del proceso init. Se puede controlar a través de la CLI por medio del comando systemctl
En resumen:
- Al cargar el kernel en la ram, este lanzará el proceso init. Entre ambos se encargarán de inicializar todo el sistema operativo y conectarlo con el hardware.
- El proceso de arrancado puede ser secuencial o paralelo.
Filesystem
El filesystem no es más que el sistema de organización de datos del sistema operativo. En Linux se utilizan diferentes alternativas:
- Convencionales, como ext3, ext4, JFS, vfat, exfat…
- Flash, como ubifs, jffs2, yaffs…
- Basados en bases de datos.
- Para propósitos especiales, como procfs, sysfs, debugfs, fuse…
Sea cual sea el filesystem escogido, este se alberga en una partición del disco y organiza su contenido mediante una jerarquía. En Linux existe una jerarquía estandarizada que permite cambiar de distribución con mayor facilidad (Filesystem Hierarchy Standard o FHS).
Jerarquía estandarizada del filesystem
- / es la ruta raíz.
- /bin/ contiene los archivos binarios básicos.
- /boot/ contiene los archivos que forman parte del boot loader.
- /dev/ contiene archivos correspondientes a dispositivos (devices).
- /etc/ contiene la configuración específica del host del sistema, e incluye directorios como opt, x11, sgml y xml.
- /home/ contiene los directorios de los usuarios.
- /lib/ contiene librerías compartidas y módulos del kernel.
- /media/ es el punto de montaje para media extraíble.
- /mnt/ es el punto de montaje para filesystems temporales.
- /opt/ contiene paquetes y add-ons de aplicaciones.
- /sbin/ contiene los binarios del sistema.
- /srv/ contiene archivos relativos a los servicios del sistema.
- /tmp/ contiene archivos temporales,
- /usr/ contiene utilidades y aplicaciones del usuario. Requiere los directorios bin, include, lib, local, sbin y share, y se conoce como la jerarquía secundaria.
- /var/ contiene archivos de variable.
- /root/ es el directorio de inicio del usuario raíz.
- /proc/ contiene documentación de los estados del kernel y procesos.
Entraremos en más detalle cuando empecemos a trabajar con archivos en Linux.
Cómo funciona el Filesystem Hierarchy Standard
- Los fragmentos de las rutas se separan con una barra /
- Los nombres de directorios y archivos son sensibles a las mayúsculas.
- Podemos explorar el filesystem desde el file manager en la GUI o mediante comandos como ls en la CLI.
Siguientes pasos
Ahora que ya tenemos nuestra distribución de Linux instalada y hemos inicializado el sistema, podemos entrar a analizar su funcionamiento. Como este es un curso introductorio (razón por la cual elegimos Ubuntu como distribución de guía) empezaremos estudiando la interfaz gráfica y sus operaciones más básicas.