Página principal » cómo » ¿Qué es el kernel de Linux y qué hace?

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


    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 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 las 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 sí mediante la comunicación entre procesos (IPC).

    Diferentes tipos de núcleos

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


    Imagen por palomitas de maíz en la parte alta

    Microkernel
    Un microkernel adopta el enfoque de administrar solo lo que tiene: 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, ya que no tienen que preocuparse si cambia 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 se ejecutan procesos específicos en modo de usuario que no tienen los permisos altos como modo supervisor.

    Pros

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

    Contras

    • El hardware es más abstracto a través de drivers
    • El hardware puede reaccionar más lento 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 kernels monolíticos son lo opuesto a los microkernels porque abarcan no solo la CPU, la memoria y la IPC, sino que también incluyen elementos como controladores de dispositivos, administración de sistemas de archivos y llamadas al servidor del sistema. Los kernels monolíticos tienden a ser mejores para acceder al hardware y realizar tareas múltiples porque si un programa necesita obtener información de la memoria u otro proceso que se ejecuta, tiene una línea más directa para acceder y no tiene que esperar en una cola para hacer las cosas. Sin embargo, esto puede causar problemas debido a que mientras más cosas se ejecutan en modo supervisor, más cosas pueden derribar su sistema si uno no se comporta correctamente..

    Pros

    • Más acceso directo al hardware para programas.
    • Facilita la comunicación entre procesos.
    • 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 huella de instalación
    • Huella de memoria grande
    • Menos seguro porque todo funciona en modo supervisor


    Imagen vía schoschie en flickr

    Kernel hibrido
    Los kernels híbridos tienen la capacidad de seleccionar y elegir qué quieren ejecutar en modo usuario y qué quieren ejecutar en modo supervisor. Muchas veces, cosas como los controladores de dispositivos y la E / S del sistema de archivos se ejecutarán en modo de usuario, mientras que las llamadas de IPC y de servidor se mantendrán en modo de supervisor. Esto da 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..

    Pros

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

    Contras

    • Puede sufrir el mismo proceso que el microkernel.
    • Los controladores de dispositivos deben ser gestionados por el usuario (normalmente)

    ¿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-versión. El nombre vmlinuz proviene del mundo 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 facilitar las tareas de multitarea, se colocó "vm" al frente del archivo para mostrar que el kernel es compatible con 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 que la imagen del kernel se comprimió y la x final se cambió a una z para mostrar que estaba comprimida con la compresión zlib. Esta misma compresión no siempre se usa, a menudo se reemplaza con LZMA o BZIP2, y algunos kernels se llaman simplemente zImage.

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

    Arquitectura del núcleo de Linux

    Debido a que el kernel de Linux es monolítico, tiene la huella más grande y la mayor complejidad en comparación con los otros tipos de kernels. Esta fue una característica de diseño que estuvo bajo un poco de debate 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 los desarrolladores del kernel de Linux hicieron para solucionar estos defectos fue crear módulos del 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 todo el kernel sea reemplazado 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 de Kernel

    ¿Qué pasaría si Windows tuviera todos los controladores disponibles ya instalados y solo tenía que encender los controladores que necesitaba? Eso es esencialmente lo que hacen los módulos del kernel para Linux. Los módulos del kernel, también conocidos como módulos de kernel cargables (LKM), son esenciales para mantener el kernel funcionando con todo su hardware sin consumir toda la 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 normalmente 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 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 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 lo son tanto como en el habla y, por lo tanto, no están incluidos en algunas distribuciones porque los mantenedores sienten que "corrompe" el núcleo al proporcionar software no libre..

    Un kernel no es mágico, pero es completamente esencial para cualquier computadora que funcione correctamente. El kernel de Linux es diferente a OS X y Windows porque incluye controladores en el nivel del kernel y hace que muchas cosas sean compatibles "listas para usar". Esperamos que sepa un poco más sobre cómo funcionan juntos su software y hardware y qué archivos necesita para iniciar su computadora.

    Kernel.org
    Imagen por ingridtaylar