¿Qué es el kernel?: Introducción al kernel de Linux

Este breve artículo se centra en el Kernel de Linux, que es un kernel monolítico basado en Unix. Otros kernels podrían ser MicroKernels que delegan funciones a otros programas como drivers externos.

¿Qué es el kernel de un sistema operativo?

El kernel de un sistema operativo es el programa núcleo que compatibiliza al hardware con el software permitiéndoles interactuar. Con la ayuda de drivers, el kernel (núcleo) de Linux actúa como un traductor que permite la comunicación entre el software, la interfaz de usuario y el hardware.

Un kernel monolítico en cambio, como el de Linux, es un kernel que monopoliza el hardware y las opciones de drivers como parte de sí mismo. Un ejemplo diferente son los microkernels que se ocupan de tareas básicas mientras dejan al resto de tareas como externas. Dada la falta de popularidad de los sistemas con microkernels, ignoraremos su existencia por ahora. Podemos pensar en un kernel como el primer nivel o más bajo nivel de comunicación entre nuestro sistema operativo y los dispositivos físicos.

Siendo un traductor entre el software y el hardware, la principal tarea del kernel es asignar recursos del hardware a los procesos del software, principalmente memoria y procesador. El kernel también limita la asignación de memoria a dispositivos fallidos para prevenir malfuncionamientos o averías.

El Kernel y el soporte de hardware:

Si instalamos un nuevo sistema Linux y algunos de nuestros dispositivos no funcionan apropiadamente, como una tarjeta de wifi que no fue detectada, tras algunos chequeos notaremos que el sistema operativo instalado no soporta nuestra tarjeta por defecto. Frente a este escenario deberemos editar la configuración de nuestro kernel, añadiendo soporte para la tarjeta wifi. En un artículo publicado en LinuxHint, se explica paso por paso cómo compilar el kernel de Linux Slackware para añadir soporte de hardware. También es posible eliminar soporte de hardware innecesario para hacer nuestro kernel más liviano, aunque en la actualidad sería una exageración.

Cuando modificamos la configuración de un kernel podemos editar el soporte de hardware como nativo o podemos añadir soporte mediante  módulos que se cargan según la necesidad. Por supuesto que cada usuario puede escribir sus propios módulos de ser necesario.

Los módulos del kernel tienen ventaja por sobre aplicaciones con la misma utilidad (como driver externos) porque funcionan de ser necesarios en contraste con las aplicaciones. Los módulos liberan los recursos de hardware cuando no son necesarios mientras que las aplicaciones pueden retener esos recursos. Por otro lado, la desventaja es que las aplicaciones externas son menos propensas a romper el sistema.

Ya que el kernel de Linux administra la interacción entre hardware y software, puede también regular funciones de nuestro sistema. Mediante la edición del kernel podemos eliminar o añadir soporte para protocolos como el IPv6, Iptables, etc.

Es crítico mantener el núcleo de nuestro sistema actualizado para prevenir vulnerabilidades de seguridad como la 2018-14634 que permite escalar privilegios dentro de un sistema. Versiones actualizadas de los kernels pueden ser descargadas en https://www.kernel.org/. La versión de kernel puede ser corroborada mediante los comandos uname -r o hostnamectl.

que es el kernel linux

Próximamente se publicará en este blog una tutorial sobre actualización de Kernel en Debian.