¿Que es Kernel?

 Denominado también como núcleo, por ser el "centro" del SO, realiza la comunicación entre el software y hadware mediante "llamadas" al sistema este concede el acceso al hadware para todo aquello que el software solicita, además de proveer una API. gracias a el Kernel nuestra vida es más sencilla, por ejemplo: Cuando queremos copiar un fichero en nuestro disco duro, no nos preocupamos de en que sectores está distribuido dicho fichero, o de si ese fichero estaba ya en la cache o no, todas esas cosas las hace el kernel por nosotros. 

El programa inicia su ejecución poco después de que arranca el ordenador, Su principal función es esconder los detalles del hardware a los programas que sobre él se van a ejecutar.

Los programadores del comando cp por ejemplo, simplemente usaron las llamadas al sistema que el kkernel ofrece para crear este comando. Por otro lado el programador del kernel se preocupó anteriormente de crear esas llamadas al sistema, de forma que fuesen las mismas para un disquete, una tarjeta de red o un disco duro.

Es importante darse cuenta de que cada kernel, es propio en su manera de manejar el hardware, y tiene sus propias llamadas al sistema definidas. Es por esto que el comando cp para el kernel de Linux nunca funcionará para Windows, simplemente las llamadas al sistema son diferentes, tienen diferentes argumentos e implementan diferentes funciones. Lo mismo pasa con programas más complicados, como puede ser un navegador web o un juego.

Nosotros mismos, en nuestra corta experiencia como programadores, hemos utilizado en un montón de ocasiones las llamadas al sistema que nuestro kernel nos ofrecía, por ejemplo, cuando declaramos un puntero y reservamos memoria para él, estamos usando seguramente la llamada al sistema malloc() que se encarga de decirle al kernel: ``habla con la memoria y pídele que me reserve unos cuantos bytes en las direcciones donde apunta mi puntero''.

Por supuesto el kernel ha de conocer el "lenguaje" de nuestro hardware,otro ejemplo, cuando compramos una impresora nueva, hemos de decirle al kernel como se usa, para que luego podamos pedirle al kernel que imprima algo. Por eso cuando conectamos por primera vez una impresora hemos de cargar los drivers de la misma.



El software de sistema no solo es un S.O., también se agregan otros complementos al sistema operativo como puede ser una API, bibliotecas, programas que corren en segundo plano para realizar tareas esenciales o proveer de ciertos servicios, etc.

Centrándonos en SO, es valido mencionar que es posible  descomponer en una interfaz de usuario, una interfaz de llamadas al sistema o syscall, y de un kernel donde se encuentran implementadas funciones como:
  • Control de procesos o planificador (scheduler)
  • Gestor de E/S.
  • Sistema de archivos y controladores.
  • Sistema de comunicación.
  • Gestor de errores.
  • Gestor de recursos de hardware o memoria.
  • Seguridad.
  • Controladores de dispositivos de hardware.
Ahora bien, aunque Windows posee su propio kernel denominado Windows NT, hay una diferencia fundamental entre este y Linux, por una parte, el núcleo de Windows es completamente hermético y nadie puede modificarlo, ni conocer lo que realmente  hace, el de Linux es de código abierto, por lo que cualquier persona puede hacerle las modificaciones que quiera, y confiar más en él al estar a la vista de todos, conociendo qué hace realmente, si tiene puertas traseras, y otros problemas de seguridad.

Mencionando los tipos fundamentales de Kernel  y no en los kernel existentes, podemos encontrarnos con los siguientes:
  • Monolítico, tiene una estructura única donde todos los subsistemas se encuentran en un único módulo lógico. Carece de unas interfaces bien definidas entre subsistemas y permite trabajar en un solo espacio de direcciones cuando se carga el código en la memoria RAM, lo que reduce la complejidad. Además, trabajará en su totalidad en modo supervisor. Algunos ejemplos de sistemas con kernel monolítico son DOS, MacOS, OpenVMS, Multics, otros Unix, y Linux .
  • Microkernel, como su nombre lo dice es un "micronúcleo" que tiene una estructura modular, es decir, los subsistemas no se encuentran en un único módulo lógico, sino que cada uno está en un módulo propio. Esto hace que resulten más fáciles de desarrollar, pero su rendimiento puede ser inferior. Algunos ejemplos de este tipo de kernel lo tienes en AIX, Hurd, L4, Minix, SymbianOS, etc.
  • Híbrido, es una mezcla de los dos conceptos anteriores, con una estructura básica como un microkernel y otras partes de código no esenciales como módulos. Ejemplos de este tipo de núcleo son Windows NT, XNU (macOS), ReactOS, etc.
  • Nanokernel, es muy recudido, aún más pequeño que un microkernel., se emplean en sistemas "embebidos" porque aporta mucha fiabilidad.
  • Exokernel, está estructurado de forma vertical, son núcleos pequeños y se crearon con fines de investigación. En este caso, los programas son los encargados de tomar decisiones sobre la gestión de recursos de hardware haciendo uso de ciertas bibliotecas. El kernel solo se encargará de evitar errores de permisos de hardware y eludir conflictos.
  • Unikernel, es un concepto diferente y reducido que permite simplificar al máximo y eliminar capas intermedias entre las aplicaciones y el hardware. Es usado también en sistemas embebidos o dispositivos de bajo consumo como los de IoT.
  • Anykernel: es otro concepto novedoso y radical cuya finalidad es conservar las ventajas de un kernel monolítico y al mismo tiempo facilitar el desarrollo de controladores, además de conseguir mayor seguridad a nivel de usuario.
Como dato curiosos es inimaginable definir la cantidad de dispositivos con SO y kernel, puede ser  Desde algunos electrodomésticos, hasta otros aparatos como los routers o un NAS, pasando por el propio PC, dispositivos móviles, IoT, etc.

Por otra parte, el núcleo se divide en cinco "niveles" que son: 
  •   Nivel 1. Gestión de Memoria, se encarga de proporcionar las facilidades de bajo nivel para la gestión de memoria secundaria necesaria para la ejecucion de procesos.
  •     Nivel 2. Procesador, siendo el encargado de activar los cuantums de tiempo para cada uno de los procesos, creando interrupciones de hardware cuando no son respetadas.
  •     Nivel 3. Entrada/Salida, estos proporcionan las facilidades para poder utilizar los dispositivos de E/S requeridos por los procesos.
  •     Nivel 4. Información, Aplicación o Interprete  de Lenguajes, fcilita la comunicación con los lenguajes y el sistema operativo para aceptar las ordenes en cada una de las aplicaciones. Ejecutando un programa el software de este nivel crea el ambiente de trabajo e invoca a los procesos correspondientes.
  •     Nivel 5. Control de Archivos, proporciona la facilidad para el almacenamiento a largo plazo y manipulación de archivos con nombre, va asignando espacio y acceso de datos en memoria.

Referencia:








Comentarios