Arquitectura del sistema Linux

Este módulo explica cómo funciona Linux internamente, desde que enciendes la máquina hasta que tienes un sistema operativo completamente funcional.

Entender esto es clave para hacer troubleshooting.


Visión general

Un sistema Linux se divide en dos grandes partes:

Kernel space

  • Núcleo del sistema
  • Acceso directo al hardware
  • Máximo privilegio

User space

  • Programas y procesos del usuario
  • Shell, servicios, aplicaciones

Ambos se comunican mediante syscalls (system calls)


Componentes principales

Kernel

El núcleo del sistema operativo. Se encarga de:

  • Gestión de CPU (scheduler)
  • Gestión de memoria
  • Control de dispositivos (drivers)
  • Sistema de archivos
  • Red

User space

Incluye todo lo que ejecutas:

  • Shell (bash)
  • Comandos (ls, cp, etc.)
  • Servicios (nginx, ssh)
  • Aplicaciones

System calls

Son la interfaz entre user space y kernel.

Ejemplo:

  • Cuando haces ls, el sistema usa syscalls para leer el filesystem

Proceso de arranque (Boot process)

El arranque de Linux sigue esta secuencia:


1. BIOS / UEFI

  • Inicializa el hardware
  • Busca un dispositivo de arranque

2. Bootloader (GRUB)

  • Carga el kernel en memoria
  • Permite elegir sistema operativo
  • Puede pasar parámetros al kernel

Archivo clave:

/boot/grub/grub.cfg

3. Kernel

  • Se descomprime
  • Inicializa hardware
  • Monta el sistema de archivos raíz (/)
  • Lanza el primer proceso

4. Init system (systemd)

El primer proceso del sistema:

PID 1

Responsabilidades:

  • Arrancar servicios
  • Gestionar dependencias
  • Mantener el sistema funcionando

Hoy en día, el estándar es systemd


Init systems

sysvinit (antiguo)

  • Scripts en /etc/init.d
  • Arranque secuencial

systemd (actual)

  • Arranque paralelo
  • Más rápido y controlable
  • Usa unidades (units)

systemd (conceptos básicos)

Tipos de unidades:

  • .service → servicios
  • .target → estados del sistema
  • .mount → montajes
  • .timer → tareas programadas

Comandos clave:

systemctl start nginx
systemctl stop nginx
systemctl status nginx
systemctl enable nginx

Procesos y jerarquía

Todos los procesos en Linux forman un árbol:

init (PID 1)
 ├─ sshd
 ├─ nginx
 ├─ bash
 │   └─ vim

Cada proceso tiene:

  • PID (Process ID)
  • PPID (Parent Process ID)

Gestión de CPU (scheduler)

El kernel decide:

  • Qué proceso se ejecuta
  • Durante cuánto tiempo

Conceptos clave:

  • Prioridad
  • nice / renice
  • multitarea

Gestión de memoria

Linux gestiona:

  • RAM
  • Swap (memoria en disco)

Conceptos:

  • Memoria virtual
  • Paginación
  • OOM Killer (mata procesos si falta memoria)

Sistema de archivos

El kernel:

  • Gestiona lectura/escritura
  • Usa drivers de filesystem (ext4, xfs, etc.)

Todo se monta en:

/

Stack de red

El kernel también maneja:

  • Interfaces de red
  • TCP/IP
  • Sockets

Herramientas como ping o ssh usan esto


Niveles de privilegio

  • root (UID 0) → control total
  • Usuarios normales → acceso limitado

El kernel impone seguridad entre procesos


Puntos críticos para sysadmins

Si falla el bootloader

→ el sistema no arranca

Si falla el kernel

→ kernel panic

Si falla systemd

→ servicios no arrancan

Si falla PID 1

→ sistema inutilizable


Ejercicios prácticos

Ver procesos en árbol

ps aux --forest

Ver PID 1

ps -p 1 -o pid,comm,args

Ver kernel

uname -a

Ver tiempo de arranque

systemd-analyze

Mentalidad

Cuando algo falla, piensa:

  • ¿Es hardware?
  • ¿Es kernel?
  • ¿Es systemd?
  • ¿Es un servicio?

Diagnosticar = entender la arquitectura


Resumen

  • Linux se divide en kernel space y user space
  • El kernel controla todo el sistema
  • systemd gestiona servicios
  • El boot sigue una secuencia clara
  • Todo está interconectado

Siguiente paso

En el siguiente módulo entrarás en:

Sistema de archivos (filesystem.md)

Donde verás:

  • Cómo está organizado Linux
  • Qué significa cada directorio
  • Cómo navegar el sistema correctamente