¿Qué es el kernel de Linux y qué hace?

Entonces, ¿qué es el núcleo? Un núcleo 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 hasta el hardware físico, y permitir que los procesos, conocidos como servidores, obtengan información entre ellos mediante la comunicación entre procesos (IPC).


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é se utiliza?

Entonces, ¿qué es el núcleo?

Un núcleo 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» hasta el hardware físico, y permitir que los procesos, conocidos como servidores, obtengan información entre ellos mediante la comunicación entre procesos (IPC).

Diferentes tipos de granos

Por supuesto, hay diferentes formas de construir un núcleo y consideraciones arquitectónicas cuando se construye uno desde cero. En general, la mayoría de los granos se dividen en uno de tres tipos: monolíticos, microkernel e híbridos. Linux es un núcleo monolítico, mientras que OS X (XNU) y Windows 7 utilizan núcleos 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 la parte alta

Microkernel
Un microkernel adopta el enfoque de administrar solo lo que tiene que hacer: CPU, memoria e IPC. Casi todo lo demás en una computadora se puede ver como un accesorio y se puede manejar en modo de usuario. Los microkernels tienen la ventaja de la portabilidad porque no tienen que preocuparse si cambian su tarjeta de video o incluso su sistema operativo, siempre y cuando el sistema operativo aún intente acceder al hardware de la misma manera. Los microkernels también tienen una huella muy pequeña, tanto para la memoria como para el espacio de instalación, y tienden a ser más seguros porque solo los procesos específicos se ejecutan en modo de usuario que no tiene los permisos altos como modo de supervisor.

Profesionales

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

Contras

  • El hardware se abstrae más a través de los controladores
  • El hardware puede reaccionar más lentamente porque los controladores están en modo de usuario
  • Los procesos tienen que esperar en una cola para obtener información
  • Los procesos no pueden acceder a otros procesos sin esperar

Kernel monolítico
Los núcleos monolíticos son lo opuesto a los microkernel porque abarcan no solo la CPU, la memoria y el IPC, sino que también incluyen elementos como los controladores de dispositivos, la administración del sistema de archivos y las llamadas al servidor del sistema. Los núcleos monolíticos tienden a ser mejores para acceder 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 hacer las cosas. Sin embargo, esto puede causar problemas porque mientras más cosas se ejecutan en modo supervisor, más cosas pueden dañar su sistema si uno no se comporta correctamente.

Profesionales

  • Más acceso directo al hardware para los programas.
  • Más fácil para que los procesos se comuniquen entre sí
  • Si su dispositivo es compatible, debería funcionar sin instalaciones adicionales
  • Los procesos reaccionan más rápido porque no hay una cola para el tiempo de procesador

Contras

  • Gran espacio de instalación
  • Gran huella de memoria
  • Menos seguro porque todo se ejecuta en modo supervisor


Imagen vía schoschie en Flickr

Kernel híbrido
Los núcleos híbridos tienen la capacidad de elegir qué quieren ejecutar en modo de usuario y qué quieren ejecutar en modo de supervisor. Muchas veces, cosas como controladores de dispositivos y E/S del sistema de archivos se ejecutarán en modo de usuario, mientras que las llamadas de IPC y del servidor se mantendrán en modo de supervisor. Esto brinda lo mejor de ambos mundos, pero a menudo requerirá más trabajo del fabricante del hardware porque toda la responsabilidad del conductor depende de ellos. También puede tener algunos de los problemas de latencia inherentes a los microkernels.

Profesionales

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

Contras

  • Puede sufrir el mismo retraso del proceso que el microkernel
  • Los controladores de dispositivo deben ser administrados por el usuario (normalmente)

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

El archivo del núcleo, en Ubuntu, se almacena en su carpeta/boot y se llama vmlinuz- version . El nombre vmlinuz proviene del mundo de Unix, donde solían llamar 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 capacidades de multitarea más fáciles, se puso «vm» al frente del archivo para mostrar que el núcleo es compatible con la memoria virtual. Durante un tiempo, el núcleo de Linux se llamó vmlinux, pero el núcleo creció demasiado para caber en la memoria de arranque disponible, por lo que la imagen del núcleo se comprimió y la x final se cambió a una z para mostrar que se comprimió con compresión zlib. Esta misma compresión no siempre se usa, a menudo se reemplaza con LZMA o BZIP2, y algunos núcleos simplemente se denominan zImage.

La numeración de la versión tendrá el formato A.B.C.D donde A.B probablemente será 2.6, C será su versión y D indicará sus parches 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 núcleo real. El archivo system.map se usa para administrar la memoria antes de que el kernel se cargue por completo, y el archivo de configuración le dice al kernel qué opciones y módulos cargar en la imagen del kernel cuando se está compilando.

Arquitectura del kernel de Linux

Debido a que el kernel de Linux es monolítico, tiene la mayor huella y la mayor complejidad sobre los otros tipos de kernel. Esta fue una característica de diseño que se debatió bastante en los primeros días 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 estos defectos fue crear módulos de kernel que pudieran cargarse y descargarse en tiempo de ejecución, lo que significa que puede agregar o eliminar características de su kernel sobre la marcha. Esto puede ir más allá de simplemente agregar funcionalidad de hardware al kernel, al incluir módulos que ejecutan procesos del servidor, como la virtualización de bajo nivel, pero también puede permitir que se reemplace todo el kernel sin necesidad de reiniciar su computadora en algunos casos.

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

Módulos Kernel

¿Qué pasaría si Windows tuviera todos los controladores disponibles ya instalados y solo tuviera que encender los controladores que necesitaba? Eso 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 mantener el kernel funcionando con todo su hardware sin consumir toda su memoria disponible.

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

Los módulos de fuente cerrada y de terceros están disponibles en algunas distribuciones, como Ubuntu, y es posible que no se instalen de manera predeterminada porque el código fuente de los módulos no está disponible. El desarrollador del software (es decir, nVidia, ATI, entre otros) no proporciona el código fuente, sino que construye sus propios módulos y compila los archivos .ko necesarios para su distribución. Si bien estos módulos son gratuitos como en la cerveza, no son gratuitos como en el habla y, por lo tanto, no están incluidos en algunas distribuciones porque los mantenedores sienten que «contamina» el núcleo al proporcionar software no libre.

Un núcleo no es mágico, pero es completamente esencial para que cualquier computadora funcione correctamente. El kernel de Linux es diferente de OS X y Windows porque incluye controladores a nivel de kernel y hace que muchas cosas sean compatibles «fuera de la caja». Esperemos que sepa un poco más sobre cómo funcionan juntos su software y hardware y qué archivos necesita para arrancar su computadora.

Kernel.org
Imagen de ingridtaylar

Rate article
labsfabs.com
Add a comment