Un kernel híbrido es una arquitectura de kernel de sistema operativo que intenta combinar aspectos y beneficios de las arquitecturas de microkernel y kernel monolíticas utilizadas en los sistemas operativos. [1] [2] [ ¿ fuente poco confiable? ]
Las categorías de núcleos tradicionales son núcleos monolíticos y micronúcleos (con nanonúcleos y exonúcleos vistos como versiones más extremas de micronúcleos). La categoría "híbrida" es controvertida debido a la similitud de los núcleos híbridos y los núcleos monolíticos ordinarios; Linus Torvalds ha descartado el término como simple marketing. [3]
La idea detrás de un kernel híbrido es tener una estructura de kernel similar a la de un microkernel, pero implementar esa estructura a la manera de un kernel monolítico. A diferencia de un microkernel, todos (o casi todos) los servicios del sistema operativo en un kernel híbrido todavía están en el espacio del kernel . No existen ninguno de los beneficios de confiabilidad de tener servicios en el espacio del usuario , como ocurre con un microkernel . Sin embargo, al igual que con un kernel monolítico ordinario , no hay ninguna sobrecarga de rendimiento para el paso de mensajes y el cambio de contexto entre el modo kernel y el modo de usuario que normalmente viene con un microkernel.
Un ejemplo destacado de un kernel híbrido es el kernel de Microsoft Windows NT que impulsa todos los sistemas operativos de la familia Windows NT , hasta Windows 11 y Windows Server 2022 inclusive , y Windows Phone 8 , Windows Phone 8.1 y Xbox One .
Windows NT fue el primer sistema operativo Windows basado en un núcleo híbrido [ cita requerida ] . El núcleo híbrido fue diseñado como un micronúcleo modificado , influenciado por el micronúcleo Mach desarrollado por Richard Rashid en la Universidad Carnegie Mellon, pero sin cumplir todos los criterios de un micronúcleo puro. Windows basado en NT se clasifica como un kernel híbrido (o macrokernel [4] ) en lugar de un kernel monolítico porque los subsistemas de emulación se ejecutan en procesos de servidor en modo usuario, en lugar de en modo kernel como en un kernel monolítico, y además debido a la gran cantidad de objetivos de diseño que se parecen a los objetivos de diseño de Mach (en particular, la separación de las personalidades del sistema operativo de un diseño general del núcleo). Por el contrario, la razón por la que NT no es un sistema de micronúcleo es porque la mayoría de los componentes del sistema se ejecutan en el mismo espacio de direcciones que el núcleo, como sería el caso con un diseño monolítico (en un diseño monolítico tradicional, no habría un micronúcleo por se, pero el kernel implementaría una funcionalidad muy similar a los subsistemas microkernel y modo kernel de NT).
La personalidad principal del sistema operativo en Windows es la API de Windows , que siempre está presente. El subsistema de emulación que implementa la personalidad de Windows se denomina subsistema de ejecución cliente/servidor (csrss.exe). En las versiones de NT anteriores a la 4.0, este proceso de subsistema también contenía el administrador de ventanas, la interfaz del dispositivo de gráficos y los controladores del dispositivo de gráficos. Sin embargo, por razones de rendimiento, en la versión 4.0 y posteriores, estos módulos (que a menudo se implementan en modo de usuario incluso en sistemas monolíticos, especialmente aquellos diseñados sin soporte de gráficos internos) se ejecutan como un subsistema en modo kernel. [4]
Las aplicaciones que se ejecutan en NT se escriben en una de las personalidades del sistema operativo (normalmente la API de Windows) y no en la API nativa de NT cuya documentación no está disponible públicamente (con la excepción de las rutinas utilizadas en el desarrollo de controladores de dispositivos). Una personalidad del sistema operativo se implementa a través de un conjunto de DLL en modo de usuario (consulte Biblioteca de vínculos dinámicos ), que se asignan a los espacios de direcciones de los procesos de la aplicación según sea necesario, junto con un proceso de servidor del subsistema de emulación (como se describió anteriormente). Las aplicaciones acceden a los servicios del sistema llamando a las DLL de personalidad del sistema operativo asignadas a sus espacios de direcciones, que a su vez llaman a la biblioteca de tiempo de ejecución de NT (ntdll.dll), también asignada al espacio de direcciones del proceso. La biblioteca de tiempo de ejecución de NT atiende estas solicitudes atrapando en modo kernel para llamar a rutinas ejecutivas en modo kernel o realizar llamadas a procedimientos locales (LPC) a los procesos de servidor del subsistema en modo de usuario apropiados, que a su vez utilizan la API de NT para comunicarse con procesos de aplicación, los subsistemas en modo kernel y entre sí. [5]
XNU es el kernel que Apple Inc. adquirió y desarrolló para su uso en los sistemas operativos macOS , iOS , watchOS y tvOS y se lanzó como software gratuito y de código abierto como parte del sistema operativo Darwin . XNU es un acrónimo de X no es Unix . [6]
Originalmente desarrollado por NeXT para el sistema operativo NeXTSTEP , XNU era un kernel híbrido que combinaba la versión 2.5 del kernel Mach con componentes de 4.3BSD y una API orientada a objetos para escribir controladores llamada Driver Kit.
Después de que Apple adquirió NeXT, el componente Mach se actualizó a OSFMK 7.3, [7] que es un microkernel. [8] Apple utiliza un OSFMK 7.3 muy modificado que funciona como un kernel híbrido con partes de FreeBSD incluidas. [7] (OSFMK 7.3 incluye código aplicable del kernel Mach 4 de la Universidad de Utah y código aplicable de las muchas variantes de Mach 3.0 que se derivaron del kernel Mach 3.0 original de la Universidad Carnegie Mellon). Los componentes BSD se actualizaron con código de FreeBSD. proyecto y el kit de controladores fue reemplazado por una API de C++ para escribir controladores llamado kit de E/S [ cita requerida ] .
Al igual que otros núcleos modernos , XNU es un híbrido que contiene características monolíticas y de microkernels , e intenta hacer el mejor uso de ambas tecnologías, como la capacidad de transmisión de mensajes de los microkernels, lo que permite una mayor modularidad [ cita requerida ] y porciones más grandes del sistema operativo. para beneficiarse de la memoria protegida , [ cita necesaria ] además de conservar la velocidad de los núcleos monolíticos para ciertas tareas críticas.
En cuanto a todo el asunto del "núcleo híbrido", es solo marketing. Es "Oh, esos micronúcleos tenían buenas relaciones públicas, ¿cómo podemos intentar obtener buenas relaciones públicas para nuestro núcleo en funcionamiento? Oh, lo sé, usemos un nombre atractivo e intentemos dar a entender que tiene todas las ventajas de relaciones públicas que tiene ese otro sistema.