📝 kernel_windows_linux
← Volver

Kernel: Windows, Linux y Tipos


Modos de Funcionamiento del Sistema (UNIX/Linux)

Los sistemas operativos operan en dos modos de ejecución diferenciados por el nivel de privilegio:

┌─────────────────────────────────────────────┐
│              ESPACIO DE USUARIO             │  ← Modo Usuario
│   Aplicaciones, procesos, shell, libs...    │
├─────────────────────────────────────────────┤
│         INTERFAZ (Llamadas al sistema)      │  ← syscalls
├─────────────────────────────────────────────┤
│              ESPACIO DE KERNEL              │  ← Modo Kernel
│  Gestión memoria, CPU, E/S, planificador... │
└─────────────────────────────────────────────┘
             HARDWARE FÍSICO
Modo Nivel de privilegio Acceso al hardware Ejemplos
Modo Usuario Bajo (Ring 3) ❌ No directo Shell, aplicaciones, servicios
Modo Kernel Alto (Ring 0) ✅ Total Drivers, planificador, memoria

Las aplicaciones pasan de modo usuario a modo kernel mediante llamadas al sistema (syscalls).


Tipos de Kernel

Tipo Características Ventajas Desventajas Ejemplos
Monolítico Todo en el kernel Muy rápido Menos modular Linux, Android
Monolítico modular Permite módulos dinámicos Flexible + rápido Complejidad media Linux
Microkernel Solo lo esencial en kernel Muy seguro y estable Más lento Minix
Híbrido Mezcla de ambos Equilibrio Complejo Windows, macOS
Exokernel Muy minimalista Máximo control Poco usado Experimental

Representación visual por tamaño del núcleo

MICROKERNEL    │▓│           → Solo: IPC, scheduling, memoria básica
MONOLÍTICO     │▓▓▓▓▓▓▓▓▓│  → Todo: drivers, FS, red, memoria...
HÍBRIDO        │▓▓▓▓▓▓│     → Núcleo + servicios externos selectivos
MODULAR        │▓▓▓▓▓[mod]│ → Núcleo + módulos cargables en caliente

Kernel Windows

Característica Descripción
Tipo de kernel Híbrido (mezcla monolítico + microkernel)
Planificación Preventiva (preemptive)
Planificador Distribuido (no centralizado)
Multitarea Multitarea real
Multiprocesamiento Soporte SMP (varias CPUs)
Prioridades Basadas en niveles de prioridad
Hilos (threads) Unidad básica de ejecución
Cambio de contexto Rápido y eficiente

Planificador Distribuido de Windows ⚠️

Windows no usa un planificador centralizado. Su modelo es distribuido:

CPU 0 → [Planificador propio] → Cola de hilos local
CPU 1 → [Planificador propio] → Cola de hilos local
CPU 2 → [Planificador propio] → Cola de hilos local
CPU N → [Planificador propio] → Cola de hilos local

Kernel Linux

Característica Descripción
Tipo de kernel Monolítico (modular)
Arquitectura Núcleo grande con módulos cargables
Planificación Preventiva (preemptive)
Planificador Centralizado (CFS - Completely Fair Scheduler)
Multitarea Multitarea real
Multiprocesamiento SMP (soporte multi-CPU)
Gestión de memoria Avanzada (paginación, swapping)
Drivers En el kernel o como módulos
Código Open source
Portabilidad Muy alta

Planificador CFS (Completely Fair Scheduler) ⚠️

      [CFS - Planificador centralizado]
              ↓         ↓         ↓
           CPU 0      CPU 1      CPU 2

Comparativa Windows vs Linux vs otros SO

Sistema operativo Tipo de kernel Detalles
Windows Híbrido Mezcla monolítico + microkernel
Linux Monolítico (modular) Kernel grande con módulos
macOS Híbrido (XNU) Basado en Mach + BSD
iOS Híbrido (XNU) Igual que macOS
Android Monolítico (Linux) Kernel Linux modificado

Windows vs Linux — Diferencias clave

Aspecto Windows Linux
Tipo kernel Híbrido Monolítico modular
Planificador Distribuido (por CPU) Centralizado (CFS)
Código fuente Propietario (cerrado) Open source
Drivers En espacio kernel/usuario En kernel o módulos .ko
Portabilidad Media (x86/ARM) Muy alta (múltiples arquitecturas)
Módulos dinámicos Limitado Sí (insmod, modprobe)

Resumen en 3 puntos

1. Modos de ejecución: Todo SO con base UNIX/Linux opera en dos modos: modo usuario (privilegio bajo, sin acceso directo al hardware) y modo kernel (privilegio total). El paso entre ambos se realiza mediante llamadas al sistema (syscalls).

2. Tipos de kernel: Existen cinco tipos principales — monolítico (todo integrado, muy rápido), monolítico modular (flexible con módulos cargables, usado en Linux), microkernel (solo lo esencial, más seguro pero lento), híbrido (equilibrio entre ambos, usado en Windows y macOS) y exokernel (experimental). Linux es monolítico modular; Windows es híbrido.

3. Planificación: La diferencia clave entre Windows y Linux reside en el planificador — Windows usa un modelo distribuido (cada CPU tiene el suyo), mientras que Linux usa CFS centralizado (Completely Fair Scheduler) que garantiza equidad en el reparto de CPU entre todos los procesos.

Módulos del kernel en Linux: insmod y modprobe

Los módulos del kernel son fragmentos de código que se pueden cargar y descargar del kernel de Linux bajo demanda, sin necesidad de reiniciar el sistema. Permiten añadir funcionalidad (drivers, sistemas de archivos, protocolos de red, etc.) de forma dinámica.

Para gestionarlos, las dos herramientas más comunes son insmod y modprobe.


1. insmod (Insert Module)

insmod es la herramienta más básica para insertar un módulo en el kernel. Carga el archivo .ko (kernel object) que se le indique, tal cual, sin resolver dependencias.

Sintaxis

insmod <ruta_al_modulo.ko> [parametros]

Ejemplos

Cargar un módulo indicando la ruta completa:

sudo insmod /lib/modules/$(uname -r)/kernel/drivers/net/dummy.ko

Cargar un módulo pasándole parámetros:

sudo insmod ./mi_modulo.ko debug=1 nombre="prueba"

Características

Limitaciones

insmod: ERROR: could not insert module foo.ko: Unknown symbol in module

Este error típico aparece cuando el módulo depende de otros que no están cargados. En ese caso, hay que usar modprobe.


2. modprobe (Module Probe)

modprobe es la herramienta recomendada y de alto nivel para cargar y descargar módulos. Internamente usa insmod, pero añade inteligencia: resuelve dependencias, consulta configuración y trabaja por nombre de módulo.

Sintaxis

modprobe [opciones] <nombre_modulo> [parametros]

Ejemplos

Cargar un módulo por nombre (sin extensión ni ruta):

sudo modprobe dummy

Descargar un módulo:

sudo modprobe -r dummy

Cargar pasando parámetros:

sudo modprobe usbcore autosuspend=2

Ver qué haría sin ejecutarlo realmente (modo simulación):

modprobe --dry-run --verbose dummy

Mostrar las dependencias de un módulo:

modprobe --show-depends ext4

Características

Opciones útiles

Opción Descripción
-r, --remove Descarga el módulo (y dependencias huérfanas).
-v, --verbose Muestra información detallada.
-n, --dry-run Simula la operación sin ejecutarla.
-f, --force Fuerza la carga aunque haya conflictos de versión.
--show-depends Lista las dependencias del módulo.
-c, --showconfig Muestra la configuración efectiva de modprobe.

3. Diferencias clave entre insmod y modprobe

Característica insmod modprobe
Argumento de entrada Ruta al archivo .ko Nombre del módulo
Resuelve dependencias ❌ No ✅ Sí
Usa /etc/modprobe.d/ ❌ No ✅ Sí
Permite descargar módulos ❌ No (se usa rmmod) ✅ Sí (modprobe -r)
Nivel Bajo Alto
Uso típico Desarrollo / pruebas Administración del sistema

4. Comandos relacionados

lsmod
cat /proc/modules   # misma información, formato crudo
sudo rmmod dummy
modinfo ext4
sudo depmod -a

5. ¿De dónde saca cada comando la información?

El kernel mantiene en memoria la lista de módulos cargados. El espacio de usuario accede a esos datos a través de archivos virtuales expuestos por procfs y sysfs, además de archivos en disco para metadatos y configuración.

Resumen por comando

Comando Fuente de datos principal Tipo
lsmod /proc/modules Virtual (procfs)
insmod El archivo .ko que le pasas + syscall finit_module() Disco + kernel
modprobe /lib/modules/$(uname -r)/modules.dep, /etc/modprobe.d/, /proc/modules Disco + virtual
rmmod /proc/modules (comprobación) + syscall delete_module() Virtual + kernel
modinfo El archivo .ko en /lib/modules/$(uname -r)/ Disco
depmod Escanea /lib/modules/$(uname -r)/ y genera modules.dep y modules.* Disco

Archivos virtuales del kernel

$ cat /proc/modules
ext4 933888 1 - Live 0xffffffffc0a00000
mbcache 16384 1 ext4, Live 0xffffffffc09f0000
...
ls /sys/module/
cat /sys/module/usbcore/parameters/autosuspend

Archivos en disco usados por modprobe

Idea clave


6. Configuración persistente

Para que los módulos se carguen automáticamente al arrancar, se pueden añadir a:

Ejemplo: cargar dummy al inicio

/etc/modules-load.d/dummy.conf:

dummy

Ejemplo: bloquear un módulo (blacklist)

/etc/modprobe.d/blacklist-nouveau.conf:

blacklist nouveau
options nouveau modeset=0

Ejemplo: opciones por defecto para un módulo

/etc/modprobe.d/usbcore.conf:

options usbcore autosuspend=2

7. Flujo típico de trabajo

  1. Ver qué módulos están cargados:
lsmod
  1. Buscar información de un módulo:
modinfo nombre_modulo
  1. Cargarlo:
sudo modprobe nombre_modulo
  1. Descargarlo si ya no se necesita:
sudo modprobe -r nombre_modulo

8. Conclusión