Tal vez esto no sea nada nuevo publicado aca, pero a varios de las personas que se inician en GNU/Linux (y otros SO) les pareceria interesante un informe detallado de que para que sirve el kernel y sus funciones y blah blah!!! en fin...
Aqui les va
Que es el kernel de Linux y cual es su tarea?
Con cerca de 13 millones de lineas de codigo, El Kernel Linux es uno de los mas grandes proyectos de código abierto en el mundo.
Que es el Kernel?
Al kernel o núcleo es el nivel más bajo de software fácilmente reemplazable que interactúa con el hardware de tu computadora. Se encarga de interconectar todas las aplicaciones que se ejecutan en el “modo usuario” hasta el hardware , y permitiendo a los procesos obtener información de unos a otros utilizando la comunicación entre procesos (IPC).
El kernel ó núcleo de linux se puede definir como el corazón de este sistema operativo.
Las funciones más importantes del mismo, aunque no las únicas, son:
*Administración de la memoria para todos los programas y procesos en ejecución.
*Administración del tiempo de procesador que los programas y procesos en ejecucion utilizan.
*Es el encargado de que podamos acceder a los periféricos/elementos de nuestra computadroa de una manera cómoda.
Hasta que empezó el desarrollo de la serie 2.6 del núcleo, existieron dos tipos de versiones del núcleo:
*Versión de produccion: La version de produccion, era la version estable hasta el momento. Esta version era el resultado final de las versiones de desarrollo o experimentales.Cuando el equipo de desarrollo del núcleo experimental, decidia que tenia un núcleo estable y con la suficiente calidad, se lanzaba una nueva versión de producción ó estable. Esta versión era la que se debia utilizar para un uso normal del sistema, ya que eran las versiones consideradas más estables y libres de fallos en el momento de su lanzamiento.
*Versión de desarrollo: Esta versión era experimental y era la que utilizaban los desarrolladores para programar, comprobar y verificar nuevas características, correcciones, etc. Estos núcleos solian ser inestables y no se debian usar sin saber lo que se hacia.
Los diferentes tipos de Kernel
Hay, por supuesto, diferentes maneras de construir un núcleo y consideraciones arquitectónicas, cuando se construye desde cero. En general, la mayoría de los núcleos se dividen en tres tipos: microkernel monolítica, e híbridos. Linux es un kernel monolítico, mientras que OS X (XNU) y Windows 7 núcleos usan híbridos. Echemos un rápido recorrido por las tres categorías para que podamos entrar en más detalle más adelante.
Microkernel
Un microkernel adopta el enfoque de sólo administrar lo que tiene : CPU, memoria, y el IPC. Casi todo lo demás en una computadora puede ser visto como un accesorio y se puede manejar en modo de usuario. Los Micronúcleos tienen una ventaja de la portabilidad, ya que no tienes que preocuparte si cambia la tarjeta de vídeo o incluso su sistema operativo, siempre y cuando el sistema operativo sigue tratando de acceder al hardware de la misma manera. Los Micronúcleos también tienen un tamaño muy pequeño, tanto para la memoria y el espacio de instalación, y tienden a ser más seguros.
Pros
* Portabilidad
* Huella de instalar pequeña
* Pequeña huella de la memoria
* Seguridad
Contras
* El hardware es más abstracto a través de controladores
* Hardware puede reaccionar más lento porque los controladores están en modo usuario
* Los procesos tienen que esperar en una cola para obtener información
* Los Procesos no pueden tener acceso a otros procesos sin tener que esperar
Kernel Monolitico
Estos sistemas tienen un núcleo grande y complejo, que engloba todos los servicios del sistema. Está programado de forma no modular, y tiene un rendimiento mayor que un micronúcleo. Sin embargo, cualquier cambio a realizar en cualquier servicio requiere la recompilación del núcleo y el reinicio del sistema para aplicar los nuevos cambios.
Hay diversas ramificaciones de este diseño, que se han ido amoldando a nuevas necesidades. Podemos citar el sistema de módulos ejecutables en tiempo de ejecución, que le brinda al modelo de núcleo monolítico algunas de las ventajas de un micronúcleo. Dichos módulos pueden ser compilados, modificados, cargados y descargados en tiempo de ejecución, de manera similar a los servicios de un micronúcleo, pero con la diferencia de que se ejecutan en el espacio de memoria del núcleo mismo (anillo 0). De esta forma, un bloqueo del módulo, es probable que bloquee todo el núcleo. Además, el módulo pasa a formar un todo con el núcleo, usando la API del mismo, y no se emplea un sistema de mensajes como en los micronúcleos. Este es el esquema usado por, entre otros, Linux, FreeBSD y varios derivados de UNIX. Cabe resaltar que el paso constante de mensajes entre los servicios del micronúcleo, es en parte responsable del pobre rendimiento de los micronúcleos.
Un sistema operativo con núcleo monolítico concentra todas las funcionalidades posibles (planificación, sistema de archivos, redes, controladores de dispositivos, gestión de memoria, etc) dentro de un gran programa. El mismo puede tener un tamaño considerable, y deberá ser recompilado por completo al añadir una nueva funcionalidad.
Todos los componentes funcionales del núcleo tienen acceso a todas sus estructuras de datos internas y a sus rutinas. Un error en una rutina puede propagarse a todo el núcleo.
La alternativa es tener una estructura de micronúcleo, donde las partes funcionales están divididas en unidades separadas con mecanismos de comunicación estrictos entre ellos.
Pros
* El acceso es más directo al hardware para los programas
* Es más fácil para los procesos la comunicación entre si
* Si el dispositivo es compatible, debería funcionar sin instalaciones adicionales
Contras
* Gran capacidad de memoria
* Menos seguro, porque todo se ejecuta en modo kernel
Kernel Híbrido
Tienen la capacidad de escoger y elegir lo que desea ejecutar en modo de usuario y lo que desea ejecutar en modo supervisor. Muchas veces cosas como los controladores de dispositivo y sistema de archivos de E / S se ejecutará en modo de usuario mientras que las llamadas IPC y el servidor se mantendrá en el modo de supervisor. Esto dará lo mejor de ambos mundos, pero a menudo se requieren más trabajo del fabricante de hardware porque todos los de la responsabilidad del controlador depende de ellos. También puede tener algunos de los problemas de latencia que es inherente con micronúcleos.
Éste fue un compromiso que muchos desarrolladores de los primeros sistemas operativos, con arquitectura basada en micronúcleo, adoptaron antes que se demostrara que los micronúcleos pueden tener muy buen rendimiento. La mayoría de sistemas operativos modernos pertenecen a esta categoría, siendo el más popular Microsoft Windows. XNU, el núcleo de Mac OS X, también es un micronúcleo modificado, debido a la inclusión de código del núcleo de FreeBSD en el núcleo basado en Mach. DragonFlyBSD es el primer sistema BSD que adopta una arquitectura de núcleo híbrido sin basarse en Mach.
Donde encontrar los archivos del Kernel?
El archivo del kernel, en Ubuntu, se almacena en la carpeta /boot y se llama vmlinuz-version. El nombre vmlinuz viene del mundo Unix donde se utilizaba para llamar a sus núcleos simplemente “Unix” de nuevo en los años 60 para Linux comenzó a llamar a su núcleo “Linux”, cuando se desarrolló por primera vez en los años 90.
Cuando la memoria virtual fue desarrollada para facilitar la capacidad de realizar múltiples tareas, “VM” se puso al frente del archivo para mostrar que el kernel soporta la memoria virtual. Durante un tiempo el núcleo de Linux se llamo vmlinux, pero el núcleo se hizo demasiado grande para caber en la memoria de arranque disponibles para la imagen del núcleo se comprimio y al final la x se cambió a la z para mostrar el resultado comprimido con zlib. Esta misma compresión no se utiliza siempre, a menudo se sustituye con LZMA o BZIP2, y algunos nucleos simplemente se llaman zImage.
La numeración de la versión será en el formato ABCD donde AB probablemente será 2.6, C será su versión, y D indican los parches o correcciones
En la carpeta / boot también habrá otros archivos muy importante llamado initrd.img-versión, la versión System.map, y config-version. El archivo initrd es utilizado como un disco RAM pequeño que extrae y ejecuta el archivo del kernel actual. El archivo System.map se utiliza para la gestión de la memoria antes de que el kernel totalmente se cargue, y el archivo de configuración le dice al núcleo qué opciones y módulos de carga ejecute al inicio.
Arquitectura del Kernel Linux
Debido a que el kernel de Linux es monolítico, tiene más complejidad que en los otros tipos de kernels. Esta fue una característica de diseño que estaba bajo un poco de debate en los primeros días de Linux y aún tiene algunos de los 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 conseguir solucionar estas fallas es hacer módulos del kernel que pueden ser cargados y descargados en tiempo de ejecución, lo que significa que puede agregar o quitar características de su núcleo en el momento. Esto puede ir más allá de la adición de la funcionalidad de hardware para el núcleo, mediante la inclusión de módulos que ejecutan los procesos del servidor, como la virtualización de bajo nivel, pero también puede permitir que el núcleo pueda ser del todo reemplazado sin necesidad de reiniciar el equipo en algunos casos.
Modulos del Kernel
Los módulos del kernel, también conocido como un módulo del kernel cargables (LKM), son esenciales para mantener el funcionamiento del núcleo con todo el hardware sin consumir toda la memoria disponible.
Un módulo generalmente, aumenta la funcionalidad del núcleo de base para cosas como los dispositivos, sistemas de archivos y las llamadas al sistema. LKMs tienen la extensión .Ko y normalmente se almacenan en el directorio /lib/ modules. Debido a su carácter modular, usted puede personalizar fácilmente su núcleo mediante el establecimiento de módulos de carga, o no, durante el arranque con el comando menuconfig o editando el archivo /boot /config, o usted puede cargar y descargar los módulos sobre la marcha con el comando modprobe.
Los módulos de terceros y de codigo cerrado están disponibles en algunas distribuciones, como Ubuntu, y no puede ser instalado de forma predeterminada porque el código fuente de los módulos no está disponible. Las empresas desarrolladoras de software (es decir, nVidia, ATI, entre otros) no proporcionan el código fuente, sino que construyen sus propios módulos y compilan sus archivos . Ko archivos para su distribución. Si bien estos módulos son libres como en la cerveza, no son libres como en el habla y por lo tanto no están incluidos en algunas distribuciones, ya los mantenedores siente “contaminar” el núcleo por el suministro de software no-libre.
Un núcleo no es magia, pero es completamente esencial para cualquier equipo que ejecute correctamente. El kernel de Linux es diferente a OS X y Windows, ya que incluye los controladores nivel del núcleo y hace muchas cosas.
FUENTE
SALUDOS Y COMENTEN