En el post anterior mencionamos que el kernel es el componente de software del sistema operativo que permite a las aplicaciones (y a los usuarios) comunicarse con el hardware. Más en detalle, podemos decir que la función del kernel consiste en administrar el uso del microprocesador, de la memoria, y de los demás dispositivos de hardware a través de los controladores o drivers necesarios para el funcionamiento de cada uno. Además, cuando inicia el sistema el kernel es cargado en la memoria RAM y posibilita la ejecución de tareas críticas para el correcto arranque del sistema operativo.
¿Cómo se cumple la función del kernel?
El kernel Linux sigue un modelo de desarrollo monolítico: se trata de un núcleo robusto donde se concentran la mayoría de las funciones del sistema, pero permitiendo la integración bajo demanda de controladores adicionales en forma de módulos. A su vez, dichos módulos pueden deshabilitarse fácilmente cuando no se utilizan, y volverse a cargar cuando son requeridos nuevamente (en el próximo post hablaremos sobre las herramientas disponibles para realizar estas tareas). La posibilidad de utilizar módulos del kernel para habilitar o deshabilitar ciertas funciones del hardware permite el uso más eficiente de los recursos del sistema.
En este contexto a menudo escuchamos los términos espacio del kernel y espacio de usuario. Estos se refieren al código que se ejecuta dentro del kernel mismo por una parte, y del área de la memoria del sistema donde corren las aplicaciones y los drivers, respectivamente. En el primer caso se trata de acceso directo al hardware del equipo, mientras que en el segundo esto no es posible, y es precisamente esta separación que protege el hardware del equipo de un posible comportamiento errático del software corriendo en el mismo.
Cuando un programa necesita acceder a un recurso de hardware (por ejemplo, cuando el servicio de impresión se comunica con una impresora), lo comunica al kernel en primer lugar, quien interactúa por un lado con dicho programa y por el otro con el hardware mismo, haciendo de interfaz entre ambos y logrando la separación de la que hablamos hace instantes.
Hasta el próximo post, les recomiendo leer el apartado Basic Operating System Concepts del libro Understanding the Linux Kernel, 3era edición, una de las fuentes bibliográficas en las que está basado este artículo.
¡Nos leemos en breve!