Para los usuarios ocasionales y los fanáticos que no son tan expertos, 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 tiene curiosidad por saber qué es el kernel de Linux, respondamos esa pregunta con un ojo al nuevo usuario.
Modos
Antes de explicar qué es un kernel, es importante entender los términos "modo de usuario" y "modo de kernel". El modo de usuario es cuando la ejecución del código no tiene capacidad para acceder directamente al hardware o la memoria de referencia. Para obtener acceso al hardware y la memoria, el código que se ejecuta en modo de usuario debe delegar las instrucciones en las interfaces de programación de aplicaciones (API) del sistema. El modo Kernel se produce cuando el código de ejecución tiene acceso ilimitado a todo el hardware y está reservado para las funciones más confiables de un sistema operativo.
¿Qué es un kernel?
Cada sistema operativo tiene un kernel. 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 de la computadora. Sin el kernel, ninguna de sus aplicaciones podría hacer uso de la computadora física; aplicaciones como Firefox, Chrome, LibreOffice, MS Office o Outlook no funcionarán. El kernel también es responsable de permitir que los procesos intercambien información utilizando lo que se denomina comunicación entre procesos (IPC).
Hay (en general) tres tipos de núcleos:
- Núcleos monolíticos: estos núcleos abarcan la CPU, la memoria, la IPC, los controladores de dispositivos, la administración del sistema de archivos y las llamadas al servidor del sistema. También es responsable de entregar la memoria del sistema libre a las aplicaciones. Estos tipos de kernels suelen ser mejores para acceder al hardware y realizar tareas múltiples.
- Microkernels: Los microkernels adoptan un enfoque minimalista y solo administran la CPU, la memoria y el IPC.
- Kernels hibridos: Los kernels híbridos tienen la capacidad de decidir qué quieren ejecutar en modo de usuario o de kernel. Aunque esto proporciona lo mejor de ambos mundos, requiere mucho más de los fabricantes de hardware para crear controladores que sirvan para la interfaz entre el código en ejecución y el hardware.
Linux usa un código abierto, Kernel monolítico, mientras que macOS y Windows usan 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 kernel de Linux, mientras que los desarrolladores de todo el mundo contribuyen al kernel de Linux. De hecho, se estima que cerca de 10,000 desarrolladores, de más de 1,000 compañías, han contribuido al kernel de Linux (desde que comenzó el rastreo en 2005).
¿Dónde está el núcleo?
Si abres una ventana de terminal y ejecutas el comando ls / boot, verás un archivo llamado VMlinuz-VERSION (Donde VERSION es el nombre o número de publicación). El archivo vmlinuz es el núcleo de arranque real de Linux, y la "z" indica que el núcleo está comprimido; Así que en lugar de vmlinux tenemos vmlinuz.
Dentro de ese directorio / boot hay otros archivos importantes del kernel, 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:
- inicial: se utiliza como un pequeño RAMdisk que extrae y ejecuta el archivo del kernel real.
- system.map: utilizado para la gestión de memoria, previo a la carga del kernel.
- configuración: instruye al kernel sobre qué opciones y módulos cargar.
Módulos
Sin módulos, el núcleo no sería de mucha utilidad. Los módulos activan de forma efectiva los controladores necesarios para comunicarse con el hardware sin consumir toda la memoria del sistema. Los módulos también agregan funcionalidad al kernel, como comunicarse con periféricos, administrar sistemas de archivos, seguridad, etc. Es posible enumerar, agregar y eliminar módulos al kernel con los siguientes comandos:
- lsmod listará todos los módulos del kernel cargados actualmente.
- insmod cargará un módulo del kernel en el kernel en ejecución.
- mmm descargará un módulo del kernel en ejecución.
Como puede ver, con la ayuda de algunos comandos simples, el kernel de Linux puede ser bastante flexible.
El kernel actual
En el momento de escribir este artículo, el kernel estable de Linux es 4.18.5, pero no todas las distribuciones de Linux incluirán el último kernel. De hecho, la distribución de escritorio de Elementary OS actualizada 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 menor
- 0-30 es la revisión
También es posible descargar diferentes versiones del kernel de Linux desde kernel.org y compilarlo usted mismo. La compilación del kernel de Linux es una tarea mejor para 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 difícil tarea de compilar código en este nivel, use el kernel predeterminado que se envía y actualiza la distribución de su elección.