5Aug
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 kernel?
Un núcleo es el nivel más bajo de software fácilmente reemplazable que se conecta con el hardware de su computadora. Es responsable de conectar todas las aplicaciones que se ejecutan en el "modo de usuario" hasta el hardware físico, y de permitir que los procesos, conocidos como servidores, se obtengan información entre sí mediante la comunicación entre procesos( IPC).
Diferentes tipos de núcleos
Existen, por supuesto, diferentes maneras de construir un kernel y consideraciones arquitectónicas al construir uno desde cero. En general, la mayoría de los núcleos se dividen en uno de tres tipos: monolítico, microkernel 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 popcorn uptown
Microkernel
Un microkernel tiene 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 una ventaja de portabilidad porque 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 procesos específicos se ejecutan en modo de usuario que no tiene los permisos más altos como modo supervisor.
Pros
- Portabilidad
- Huella de instalación pequeña
- Huella de memoria pequeña
- Seguridad
Contras
- El hardware se abstrae mediante controladores
- El hardware puede reaccionar más lentamente porque los controladores están en modo de usuario
- Los procesos deben esperar en cola para obtener información
- Los procesos no puedenobtener acceso a otros procesos sin esperar
Kernel monolítico
Los kernels monolíticos son lo opuesto a microkernels porque abarcan no solo la CPU, memoria e IPC, sino que también incluyen cosas como controladores de dispositivos, administración de sistemas de archivos y llamadas al servidor del sistema. Los kernels monolíticos tienden a ser mejores en el acceso al hardware y en 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 cuanto más cosas se ejecutan en el modo de supervisor, más cosas pueden hacer que su sistema falle si no se comporta correctamente.
Pros
- Más acceso directo al hardware para programas
- Más fácil para los procesos para comunicarse 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 del procesador
Contras
- Grandehuella de instalación
- Huella de memoria grande
- Menos seguro porque todo se ejecuta en modo supervisor
Imagen mediante schoschie en Flickr
Núcleo híbrido
Los núcleos híbridos tienen la capacidad de escoger y elegir lo que quieren ejecutar en modo de usuario y lo que quieren ejecutar en supervisormodo. A menudo, elementos como los controladores de dispositivo y la E / S del sistema de archivos se ejecutarán en el modo de usuario, mientras que las llamadas IPC y del servidor se mantendrán en el modo de supervisor. Esto ofrece lo mejor de ambos mundos, pero a menudo requerirá más trabajo del fabricante del hardware porque toda la responsabilidad del controlador depende de ellos. También puede tener algunos de los problemas de latencia que son inherentes a los microkernels.
Pros
- El desarrollador puede seleccionar y elegir qué se ejecuta en modo de usuario y qué se ejecuta en modo supervisor
- Tamaño de instalación más pequeño que el núcleo monolítico
- Más flexible que otros modelos
Contras
- Puede sufrir el mismo retraso de proceso que microkernel
- Los controladores de dispositivo deben ser administrados por el usuario( normalmente)
¿Dónde están los archivos Kernel de Linux?
El archivo kernel, 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 kernels simplemente "unix" en los años 60, por lo que Linux comenzó a llamar a su kernel "linux" cuando se desarrolló por primera vez en los años 90.
Cuando se desarrolló la memoria virtual para facilitar las habilidades de multitarea, "vm" se colocó en la parte delantera 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 compresión zlib. Esta misma compresión no siempre se usa, a menudo se reemplaza con LZMA o BZIP2, y algunos núcleos se llaman simplemente 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 de kernel real. El archivo system.map se usa para la gestión de 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.
Linux Kernel Architecture
Debido a que el kernel de Linux es monolítico, tiene la mayor huella y la mayor complejidad con respecto a los otros tipos de kernels. Esta fue una característica de diseño que fue bastante debatida 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 evitar estos defectos fue crear módulos kernel que pudieran cargarse y descargarse en tiempo de ejecución, lo que significa que puede agregar o eliminar funciones de su kernel sobre la marcha. Esto puede ir más allá de solo agregar funcionalidad de hardware al kernel, al incluir módulos que ejecutan procesos de 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.
Imagine si puede actualizar a un paquete de servicio de Windows sin tener que reiniciar. ..
Kernel Modules
¿Qué pasa si Windows tiene todos los controladores disponibles y solo tiene que encender los controladores que necesita? Eso es esencialmente lo que hacen los módulos kernel para Linux. Los módulos Kernel, también conocidos como módulos de núcleo cargables( 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 de módulos /lib/.Debido a su naturaleza modular, puede personalizar fácilmente su kernel estableciendo módulos para cargar, o no cargar, durante el inicio con el comando menuconfig o editando su archivo de configuración /boot/, o puede cargar y descargar módulos sobre la marcha con el comando modprobe.
Los módulos de fuente cerrada y de terceros están disponibles en algunas distribuciones, como Ubuntu, y pueden no instalarse 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 "contaminan" el núcleo al proporcionar un 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 a nivel de kernel y hace que muchas cosas se admitan "de fábrica".Con suerte, sabrá un poco más sobre cómo su software y hardware funcionan juntos y qué archivos necesita para iniciar su computadora.
Kernel.org
Imagen de ingridtaylar