Kernel: Núcleo del Sistema Operativo.

Kernel del Sistema Operativo: ¿Qué es y cómo se come?

Por Juan Bernal (@bernalcodes)

Cuando hablamos de Kernel, hablamos del núcleo del Sistema Operativo. Este tiene, generalmente, control total sobre este y sus componentes. Según Randal y O'Hallaron (2016) el Kernel corresponde a la porción del código del sistema operativo que reside permanentemente en memoria y facilita las interacciones entre los componentes de hardware y software.

Un Kernel completo controla todos los recursos de hardware (como dispositivos I/O, memoria y criptografía) a través de controladores de dispositivo (véase drivers), funge como arbitro para los conflictos que ocurren entre procesos por temas como manejo de recursos, y optimiza el uso de dichos recursos como el uso de CPU y memoria caché (véase buffer), sistemas de archivos y sockets de red.

En la mayoría de sistemas, el Kernel es uno de los primeros programas cargados al incio, encargándose de manejar el resto del proceso para la memoria, periféricos, peticiones de I/O desde el software y traducir las mismas en instrucciones para la CPU.

De acuerdo a Pankaj (2022), el Kernel hace uso de la tabla de procesos con la que lleva registro de todaos los procesos activos, esta contiene la información por región de cada proceso. Así mismo, este hace uso de la syscall denominada 'EXEC' para cargar un archivo ejecutable en memoria.

El Kernel decide qué procesos deben ser asignados para que el procesador los ejecute y cuáles deben permanecer en la memoria principal para su ejecución. Básicamente, actúa como una interfaz entre las aplicaciones de usuario y el hardware. Su enfoque está en la gestión de la comunicación entre software y hardware.

Se podrían sintetizar los objetivos del Kernel en:

-    Establecer la comunicación entre aplicaciones a nivel de usuario y hardware.
-    Decidir el estado de procesos entrantes.
-    Controlar la gestión de disco.
-    Controlar la gestión de memoria.
-    Contolar la gestión de tareas.




¿Qué tipos de Kernel encontramos? De acuerdo a Pankaj (2022) podemos clasificarlos en:

Kernel Monolítico

En este caso, todos los servicios del sistema operativo se ejecutan en el denominado espacio de Kernel. Existen dependencias entre componenetes del sistema y a nivel de código, hace uso de muchas líneas, lo cual incrementa su complejidad.

Se reconocen ejemplos como: Unix, Linux, Open VMS, entre otros.

Como ventajas, se reconoce que su desempeño es óptimo pero, es muy poco modular, lo que lo hace altamente dependiente entre servicios, implicando escribir millones de líneas de código.

Micro Kernel

Este tipo de Kernel se desarrolló de forma minimalista, haciendo uso de memoria virtual y programación de hilos. Es mucho más estable y hace uso de menos servicios a nivel del espacio de Kernel, apoyándose aún más del espacio de usuario.

Se reconocen ejemplos como: Mach, L4, AmigaOS, Minix, K42, entre otros.

A pesar de ser más estable, se hace uso de muchas más llamadas al sistema (véase syscall) y cambios de contexto.

Kernel Híbrido

Aquí aparece un tipo de Kernel que tiene la velocidad y diseño del Kernel monolítico y la modularidad y estabilidad del Microkernel.

Se reconocen ejemplos como: Windows NT, Netware, BeOS, entre otros.

A pesar de combinar las ventajas de los tipos anteriores, continúa siendo mayoritariamente parecido al Kernel monolítico, lo que implica que también sufre de alta dependencia entre servicios y alta complejidad.

Exo Kernel

Es el tipo de Kernel que sigue un principio "extremo a extremo". Tiene la menor cantidad de abstracciones de hardware posibles y asigna recursos físicos para las aplicaciones.

Se reconocen ejemplos como: Nemesis, ExOS, entre otros.

A pesar de tener pocas abstracciones de hardware, esto aumenta la complejidad de desarrollo de aplicaciones.

Nano Kernel

En este caso, el Kernel ofrece abstracciones del hardware pero no servicios de sistema. Es análogo al Microkernel pero a un nivel aún menor en lo que a tamaño, líneas de código y complejidad respecta.

Se reconocen ejemplos como el nanokernel Eros.

A pesar de ofrecer abstracciones de hardware sin servicios de sistema, el nivel de complejidad que maneja hace que su uso o implementación se vea reducido, viéndose como una herramienta sobre la cual seguir construyendo.



Bibilografía consultada para este post:

Randal, B., O’Hallaron, D. (2016). "Computer Systems: A Programmer's Perspective". Pearson. p. 17. ISBN 978-0134092669.
Pankaj, P. (2022) "Kernel in Operating System". GeeksForGeeks.
- Raymond et al. (Marzo 29 de 1999). "Open Sources: Voices from the Open Source Revolution". ISBN 1-56592-582-3
Nehmer, J. (1991). "The Immortality of Operating Systems, or: Is Research in Operating Systems still Justified?". Lecture Notes In Computer Science. Vol. 563. ISBN 3-540-54987-0.

Comentarios