Para los usuarios ocasionales y los aficionados menos que duros, Linux es un sistema operativo. Para los puristas, sin embargo, el título «Linux» está reservado para el núcleo que alimenta el sistema operativo. Si tienes curiosidad por saber qué es el núcleo de Linux, respondamos a esa pregunta con la vista puesta en el nuevo usuario.
Índice de contenidos
Modos
Antes de explicar qué es un kernel, es importante entender los términos «modo usuario» y «modo kernel». El modo de usuario es cuando el código de ejecución no tiene la capacidad de acceder directamente al hardware o a la memoria de referencia. Para acceder al hardware y a la memoria, el código que se ejecuta en el modo de usuario debe delegar instrucciones a las interfaces de programación de aplicaciones (API) del sistema. El modo kernel es cuando el código de ejecución tiene acceso ilimitado a todo el hardware y está reservado para las funciones más fiables de un sistema operativo.
¿Qué es un núcleo?
Cada sistema operativo tiene un núcleo. Windows, macOS, iOS, Android, Chrome OS y Linux tienen cada uno un sistema de bajo nivel que se encarga de interconectar todas las aplicaciones con el hardware físico del ordenador. Sin el núcleo, ninguna de sus aplicaciones podría hacer uso del ordenador físico; aplicaciones como Firefox, Chrome, LibreOffice, MS Office o Outlook no funcionarían. El núcleo también es responsable de permitir que los procesos intercambien información utilizando lo que se denomina Comunicación entre Procesos (IPC).
Hay (generalmente hablando) tres tipos de núcleos:
- Núcleos monolíticos : estos núcleos abarcan la CPU, la memoria, el IPC, los controladores de dispositivos, la gestión del sistema de archivos y las llamadas al servidor del sistema. También es responsable de transferir la memoria libre del sistema a las aplicaciones. Estos tipos de kernels son típicamente mejores para acceder al hardware y a la multitarea.
- Microkernels : Los microkernels adoptan un enfoque minimalista y sólo gestionan la CPU, la memoria y el IPC.
- Núcleos híbridos : Los núcleos híbridos tienen la capacidad de decidir qué quieren ejecutar en modo Usuario o en modo Kernel. Aunque esto proporciona lo mejor de ambos mundos, requiere mucho más de los fabricantes de hardware para crear controladores que sirvan de interfaz entre el código en ejecución y el hardware.
Linux utiliza un código abierto, el kernel monolítico, mientras que macOS y Windows utilizan kernels híbridos. El núcleo de Linux fue concebido en 1991 por Linus Torvalds. Hasta el día de hoy, el Sr. Torvalds sigue siendo el desarrollador líder en el núcleo de Linux, mientras que desarrolladores de todo el mundo contribuyen al núcleo de Linux. De hecho, se estima que casi 10.000 desarrolladores, de más de 1.000 empresas, han contribuido al núcleo de Linux (desde que se inició el seguimiento en 2005).
¿Dónde está el núcleo?
Si abre una ventana de terminal y ejecuta el comando ls /boot , verá un archivo llamado vmlinuz-VERSION (donde VERSION es el nombre o número de la versión). El archivo vmlinuz es el kernel de arranque de Linux, y la «z» indica que el kernel está comprimido; así que en lugar de vmlinux tenemos vmlinuz.
La lista del directorio /boot.
Dentro de ese directorio /boot hay otros archivos importantes del núcleo, como initrd.img-VERSION, system.map-VERSION, y config-VERSION (donde VERSION es un nombre o un número de versión). Estos otros archivos sirven para los siguientes propósitos:
- initrd : se usa como un pequeño disco RAM que extrae y ejecuta el archivo real del núcleo.
- system.map : se utiliza para la gestión de la memoria, antes de la carga del núcleo.
- config : indica al núcleo qué opciones y módulos cargar.
Módulos
Sin módulos, el núcleo no sería de mucha utilidad. Los módulos encienden eficazmente los controladores necesarios para comunicarse con el hardware sin consumir toda la memoria del sistema. Los módulos también añaden funcionalidad al kernel, como la comunicación con periféricos, la gestión de sistemas de ficheros, la seguridad, etc. Es posible listar, agregar y quitar módulos al kernel con los siguientes comandos:
- lsmod listará todos los módulos del núcleo actualmente cargados.
- insmod cargará un módulo del núcleo en el núcleo en ejecución.
- rmmod descargará un módulo del núcleo en ejecución.
Como puede ver, con la ayuda de algunos comandos simples, el kernel de Linux puede ser bastante flexible.
El núcleo actual
Al momento de escribir esto, el núcleo estable de Linux es 4.18.5, pero no todas las distribuciones de Linux incluirán el último núcleo. De hecho, la distribución de escritorio actualizada del SO Elementary ejecuta el kernel 4.15.0-30. ¿Qué significa ese número? En el caso del último kernel en Elementary OS, significa:
- 4 es la versión principal
- 15 es la versión Minor
- 0-30 es la revisión
También es posible descargar diferentes versiones del núcleo de Linux desde kernel.org y compilarlo usted mismo. La compilación del kernel de Linux es una tarea que es mejor dejar a aquellos que realmente saben lo que están haciendo. Un kernel mal compilado puede hacer que un sistema no arranque. Por lo tanto, a menos que esté listo para sumergirse en la desafiante tarea de compilar código en este nivel, utilice el kernel predeterminado que se envía y actualiza en la distribución de su elección.