¿Qué es el kernel de Linux y para qué sirve?

¿Qué es el kernel de Linux y para qué sirve?


Con más de 13 millones de líneas de código, el kernel de Linux es uno de los proyectos de código abierto más grandes del mundo, pero ¿qué es un kernel y para qué sirve?

Entonces, ¿qué es el kernel?

Un kernel es el nivel más bajo de software fácilmente reemplazable que interactúa con el hardware de su computadora. Es responsable de interconectar todas sus aplicaciones que se ejecutan en «modo de usuario» con el hardware físico, y permite que los procesos, llamados servidores, obtengan información entre sí mediante la comunicación entre procesos (IPC).

Diferentes tipos de núcleos

Por supuesto, existen diferentes formas de construir un kernel y consideraciones arquitectónicas cuando se construye un kernel desde cero. En general, la mayoría de los núcleos pertenecen a uno de estos tres tipos: monolítico, micronúcleo e híbrido. Linux es un kernel monolítico, mientras que OS X (XNU) y Windows 7 usan kernels híbridos. Hagamos un recorrido rápido por las tres categorías para que podamos entrar en más detalles más adelante.


Imagen de palomitas de maíz de lujo

Micronúcleo
El enfoque de un microkernel es administrar solo lo que necesita: CPU, memoria e IPC. Casi todo lo demás en una computadora se puede considerar como un accesorio y se puede administrar en modo de usuario. Los microkernels tienen la ventaja de la portabilidad, ya que no tienen que preocuparse por cambiar las tarjetas de video o incluso los sistemas operativos, siempre que el sistema operativo siga intentando acceder al hardware de la misma manera. Los microkernels también tienen una huella muy pequeña, tanto en memoria como en espacio de instalación, y tienden a ser más seguros porque solo se ejecutan procesos específicos en modo de usuario que no tienen permisos elevados en modo supervisor.

Ventajas

  • Portabilidad
  • Huella de instalación pequeña
  • Pequeña huella de memoria
  • Seguridad

Los inconvenientes

  • El hardware es más abstracto a través de los controladores.
  • El hardware puede reaccionar más lentamente porque los controladores están en modo de usuario
  • Los procesos deben esperar en cola para recibir información
  • Los procesos no pueden acceder a otros procesos sin esperar

Núcleo monolítico
Los kernels monolíticos son lo opuesto a los microkernels porque no solo abarcan CPU, memoria e IPC, sino que también incluyen cosas como controladores de dispositivos, administración del sistema de archivos y llamadas al servidor del sistema. Los núcleos monolíticos tienden a tener un mejor acceso al hardware y a la multitarea, porque si un programa necesita obtener información de la memoria u otro proceso en ejecución, tiene una línea más directa para acceder a él y no tiene que esperar en una cola para obtener las cosas. hecho. Sin embargo, esto puede causar problemas porque cuantas más cosas se ejecuten en modo supervisor, más cosas pueden hacer que su sistema se caiga si una de ellas no se comporta correctamente.

Ventajas

  • Acceso más directo al material de los programas
  • Es más fácil para los procesos comunicarse entre sí
  • Si su dispositivo es compatible, debería funcionar sin instalaciones adicionales
  • Los procesos responden más rápido porque no hay cola para el tiempo del procesador

Los inconvenientes

  • Gran huella de instalación
  • Gran huella de memoria
  • Menos seguro porque todo funciona en modo supervisor


Imagen vía schoschie en Flickr

Núcleo híbrido
Los núcleos híbridos tienen la flexibilidad de elegir qué quieren ejecutar en modo de usuario y qué quieren ejecutar en modo supervisor. A menudo, cosas como controladores de dispositivos y E / S del sistema de archivos se realizarán en modo de usuario, mientras que las llamadas de IPC y del servidor se mantendrán en modo de supervisor. Esto ofrece lo mejor de ambos mundos, pero a menudo requerirá más trabajo por parte del fabricante del hardware, ya que toda la responsabilidad del controlador recae en ellos. También puede presentar algunos de los problemas de latencia inherentes a los micronúcleos.

Ventajas

  • El desarrollador puede elegir qué se ejecuta en el modo de usuario y qué se ejecuta en el modo de supervisor
  • Huella de instalación más pequeña que el núcleo monolítico
  • Más flexible que otros modelos

Los inconvenientes

  • Puede sufrir el mismo retraso del proceso que el micronúcleo.
  • Los controladores de dispositivo deben ser administrados por el usuario (generalmente)

¿Dónde están los archivos del kernel de Linux?

El archivo del kernel, en Ubuntu, se almacena en su carpeta / boot y se llama vmlinuz-version. El nombre vmlinuz proviene del mundo de Unix, donde llamaban a sus núcleos simplemente «unix» en los años 60, por lo que Linux comenzó a llamar a su núcleo «linux» cuando se desarrolló por primera vez en los años 90.

Cuando se desarrolló la memoria virtual para facilitar la multitarea, se colocó «vm» al principio del archivo para mostrar que el kernel admite la memoria virtual. Durante un tiempo, el kernel de Linux se llamó vmlinux, pero el kernel creció demasiado para caber en la memoria de arranque disponible. Por lo tanto, la imagen del kernel se comprimió y el final x se cambió a az para mostrar que se comprimió con la compresión zlib. Esta misma compresión no siempre se usa, a menudo se reemplaza por LZMA o BZIP2, y algunos núcleos se denominan simplemente zImage.

La numeración de la versión estará en formato ABCD, donde AB probablemente será 2.6, C será su versión y D indica sus correcciones o correcciones.

En la carpeta / boot también habrá otros archivos muy importantes llamados initrd.img-version, system.map-version y config-version. El archivo initrd se usa como un pequeño Disco RAM que extrae y ejecuta el archivo del kernel real. El archivo system.map se usa para la administración de la memoria antes de que el kernel esté completamente cargado, y el archivo de configuración le dice al kernel qué opciones y módulos debe cargar en la imagen del kernel cuando se compila.

Arquitectura del kernel de Linux

Debido a que el kernel de Linux es monolítico, tiene la mayor huella y complejidad en comparación con otros tipos de kernel. Esta fue una característica de diseño que estaba bajo muchos debates al comienzo de Linux y todavía tiene algunos de los mismos defectos de diseño que los núcleos monolíticos son inherentes a tener.

Una cosa que hicieron los desarrolladores del kernel de Linux para solucionar estas fallas fue crear módulos de kernel que pudieran cargarse y descargarse en tiempo de ejecución, lo que significa que puede agregar o eliminar funciones de su kernel al núcleo. Cela peut aller au-delà du simple ajout de fonctionnalités matérielles au noyau, en incluant des modules qui exécutent des processus serveur, comme la virtualisation de bas niveau, mais cela peut également permettre de remplacer l’intégralité du noyau sans avoir à redémarrer votre ordinateur en algunos casos.

Imagínese si pudiera actualizar a un paquete de servicio de Windows sin tener que reiniciar …

Módulos de kernel

¿Qué pasaría si Windows ya hubiera instalado todos los controladores disponibles y solo tuviera que activar los controladores que necesita? Esto es esencialmente lo que hacen los módulos del kernel para Linux. Los módulos de kernel, también conocidos como módulo de kernel cargable (LKM), son esenciales para que el kernel continúe ejecutándose con todo su hardware sin consumir toda la memoria disponible.

Un módulo generalmente agrega funcionalidad al kernel base para cosas como dispositivos, sistemas de archivos y llamadas al sistema. Los LKM tienen la extensión de archivo .ko y normalmente se almacenan en el directorio / lib / modules. Debido a su naturaleza modular, puede personalizar fácilmente su kernel configurando los módulos para que se carguen o no al arrancar con el comando menuconfig o editando su archivo / boot / config, o puede cargar y descargar los módulos sobre la marcha con el comandante modprobe.

Los módulos de terceros y de código cerrado están disponibles en algunas distribuciones, como Ubuntu, y es posible que no se instalen de forma predeterminada porque el código fuente de los módulos no está disponible. El desarrollador de software (es decir, nVidia, ATI, entre otros) no proporciona el código fuente, pero crea sus propios módulos y compila los archivos .ko necesarios para la distribución. Aunque estos módulos son gratuitos como en cerveza, no son libres como en voz y por lo tanto no están incluidos en algunas distribuciones porque los mantenedores creen que están «manipulando» el kernel al proporcionar software que no es libre.

Un kernel no es mágico, pero es absolutamente esencial para cualquier computadora que funcione correctamente. El kernel de Linux es diferente de OS X y Windows en que incluye controladores a nivel de kernel y admite muchas cosas «listas para usar». Espero que aprenda un poco más sobre cómo funcionan juntos su software y hardware, y qué archivos necesita para iniciar su computadora.

Kernel.org
Imagen de ingridtaylar

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Experto Geek - Tu Guía en Tendencias Tecnológicas