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.
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.
- 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.
- 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.
- 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.
Comentarios
Publicar un comentario