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

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

imagen

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 deSoftware reemplazable que interactúa con el hardware de su computadora. Es responsable de la interfaz de todas sus aplicaciones que se ejecutan en "modo de usuario" hasta el hardware físico, y permite 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 maneras de construir unConsideraciones de kernel y arquitectónicas al construir uno desde cero. En general, la mayoría de los granos se dividen en 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 por palomitas de maíz

Microkernel
Un microkernel toma el enfoque de solo administrarlo 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 se ejecutan procesos específicos en modo de usuario que no tiene los permisos altos como modo supervisor.

Pros

  • 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 granos monolíticos son lo contrario demicrokernels porque abarcan no solo la CPU, la memoria y el IPC, sino que también incluyen elementos como controladores de dispositivos, administración del sistema de archivos y 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 y no tiene que esperar en la 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.

Pros

  • Más acceso directo al hardware para 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 recoger yelija lo que quiere ejecutar en modo de usuario y lo que quiere ejecutar en modo de 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 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.

Pros

  • El desarrollador puede elegir qué se ejecuta en modo de usuario y qué se ejecuta en modo 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 (generalmente)

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

imagen

El archivo del núcleo, en Ubuntu, se almacena en su carpeta / boot y se llama vmlinuz-versión. 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 facilitarcapacidades multitarea, "vm" se colocó 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 muyarchivos 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 la administración de memoria antes de que el núcleo se cargue por completo, y el archivo de configuración le dice al núcleo qué opciones y módulos debe cargar en la imagen del núcleo cuando se está compilando.

Arquitectura del kernel de Linux

Debido a que el kernel de Linux es monolítico, tienela mayor huella y la mayor complejidad sobre los otros tipos de núcleos. Esta fue una característica de diseño que se debatió bastante en los primeros días de Linux y aún 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 paraevitar estos defectos era 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 núcleo, al incluir módulos que ejecutan procesos del servidor, como la virtualización de bajo nivel, pero también puede permitir que todo el núcleo 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 Kernel

imagen

¿Qué pasaría si Windows tuviera todos los controladores disponibles?¿Ya está instalado 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 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 a la basekernel 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 terceros y de código cerrado sondisponible en algunas distribuciones, como Ubuntu, y puede que no se instale 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 completamenteesencial para cualquier computadora que funcione correctamente. El kernel de Linux es diferente de OS X y Windows porque incluye controladores a nivel del 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 iniciar su computadora.

Kernel.org
Imagen por ingridtaylar