¿Qué es?
El núcleo o kernel es la parte central de un sistema operativo y es el que se encarga
de realizar toda la comunicación segura entre el software y el hardware del ordenador
mediante las llamadas al sistema, además de proveer de una API y otras funciones
esenciales. Por ese motivo es la parte más importante de cualquier sistema operativo.
¿Cuáles son sus funciones?
Control de procesos o planificador (scheduler)
Gestor de E/S.
Sistema de archivos y controladores.
Sistema de comunicación.
Gestor de errores.
Gestor de recursos de hardware o memoria.
Seguridad.
Controladores de dispositivos de hardware.
¿Qué versiones existen? ¿Cómo se las diferencian?
Monolítico: este tipo de kernel tiene una estructura única donde todos los
subsistemas se encuentran en un único módulo lógico. Carece de unas interfaces bien
definidas entre subsistemas y permite trabajar en un solo espacio de direcciones
cuando se carga el código en la memoria RAM, lo que reduce la complejidad.
Además, trabajará en su totalidad en modo supervisor. Algunos ejemplos de sistemas
con kernel monolítico son DOS, MacOS, OpenVMS, Multics, otros Unix, y Linux
(antes, después pasó a ser un kernel más reducido con carga dinámica de módulos).
Microkernel: es un micronúcleo que tiene una estructura modular, es decir, los
subsistemas no se encuentran en un único módulo lógico, sino que cada uno está en
un módulo propio. Esto hace que resulten más fáciles de desarrollar, pero su
rendimiento puede ser inferior. Algunos ejemplos de este tipo de kernel lo tienes en
AIX, Hurd, L4, Minix, SymbianOS, etc.
Híbrido: es una mezcla de los dos conceptos anteriores, con una estructura básica
como un microkernel y otras partes de código no esenciales como módulos.
Ejemplos de este tipo de núcleo son Windows NT, XNU (macOS), ReactOS, etc.
Nanokernel: este tipo de kernel es muy recudido, aún más pequeño que un
microkernel. Son usados para sistemas embebidos porque aporta mucha fiabilidad.
Exokernel: está estructurado de forma vertical, con una estructura bastante
novedosa. Son núcleos pequeños y se crearon con fines de investigación. En este
caso, los programas son los encargados de tomar decisiones sobre la gestión de
recursos de hardware haciendo uso de ciertas bibliotecas. El kernel solo se encargará
de evitar errores de permisos de hardware y eludir conflictos.
Unikernel: es un concepto diferente y reducido que permite simplificar al máximo y
eliminar capas intermedias entre las aplicaciones y el hardware. Es usado también en
sistemas embebidos o dispositivos de bajo consumo como los de IoT.
Anykernel: es otro concepto novedoso y radical cuya finalidad es conservar las
ventajas de un kernel monolítico y al mismo tiempo facilitar el desarrollo de
controladores, además de conseguir mayor seguridad a nivel de usuario.
¿Es posible tener más de un kernel de Linux?
También podemos tener en un sistema Linux por ejemplo,
dos kernels instalados cada uno de una versión distinta. Eso sí, solo
ejecutaríamos uno a la vez, el otro quedaría instalado y almacenado en el
disco.
También podríamos emular varios kernels a partir de un mismo sistema
operativo base (Linux podría por ejemplo) y ejecutarlos a la vez, aunque
serían kernels virtuales y no estarían funcionando realmente a nivel sistema.
¿Dónde se encuentran ubicados dentro del File System?
Se encuentra justo en el medio y se trata del software que reside en la memoria e
indica qué debe hacer la CPU. Procesos del usuario: son los programas en
funcionamiento que gestiona el kernel y, en conjunto, conforman el espacio del usuario.