
Un unikernel es un tipo de programa informático que se enlaza estáticamente con el código del sistema operativo del que depende. Los unikernels se construyen con un compilador especializado que identifica los servicios del sistema operativo que utiliza un programa y lo enlaza con uno o más sistemas operativos de biblioteca que los proporcionan. Dicho programa no requiere un sistema operativo independiente y puede ejecutarse como invitado de un hipervisor . [ 1 ]
La arquitectura unikernel se basa en conceptos desarrollados por Exokernel y Nemesis a finales de la década de 1990.
Diseño
En un sistema operativo de biblioteca, los límites de protección se extienden hasta las capas de hardware más bajas, lo que da como resultado:
- un conjunto de bibliotecas que implementan mecanismos como los necesarios para controlar el hardware o comunicarse mediante protocolos de red;
- un conjunto de políticas que imponen control de acceso y aislamiento en la capa de aplicación.
La arquitectura de sistema operativo de biblioteca presenta varias ventajas y desventajas en comparación con los diseños de sistemas operativos convencionales. Una de las ventajas es que, al existir un único espacio de direcciones, no se requieren transiciones de privilegios repetidas para transferir datos entre el espacio de usuario y el espacio del núcleo. Por lo tanto, un sistema operativo de biblioteca puede ofrecer un rendimiento mejorado al permitir el acceso directo al hardware sin necesidad de transicionar entre el modo de usuario y el modo del núcleo (en un núcleo tradicional, esta transición consiste en una única instrucción TRAP [ 2 ] y no es lo mismo que un cambio de contexto [ 3 ] ). Las mejoras de rendimiento pueden lograrse eliminando la necesidad de copiar datos entre el espacio de usuario y el espacio del núcleo, aunque esto también es posible con controladores de dispositivos de copia cero en sistemas operativos tradicionales.
Una desventaja es que, debido a la falta de separación, intentar ejecutar varias aplicaciones en paralelo en un sistema operativo de biblioteca, pero con un fuerte aislamiento de recursos, puede resultar complejo. [ 4 ] Además, se requieren controladores de dispositivo para el hardware específico en el que se ejecuta el sistema operativo de la biblioteca. Dado que el hardware cambia rápidamente, esto genera la necesidad de reescribir los controladores periódicamente para mantenerlos actualizados.
La virtualización del sistema operativo puede superar algunas de estas desventajas en el hardware estándar. Un hipervisor moderno proporciona a las máquinas virtuales tiempo de CPU y dispositivos virtuales fuertemente aislados. Un sistema operativo de biblioteca que se ejecuta como una máquina virtual solo necesita implementar controladores para estos dispositivos de hardware virtual estables y puede depender del hipervisor para controlar el hardware físico real. Sin embargo, aún se necesitan bibliotecas de protocolo para reemplazar los servicios de un sistema operativo tradicional. La creación de estas bibliotecas de protocolo es donde reside la mayor parte del trabajo al implementar un sistema operativo de biblioteca moderno. [ 1 ] Además, la dependencia de un hipervisor puede reintroducir sobrecargas de rendimiento al cambiar entre el unikernel y el hipervisor, y al transferir datos hacia y desde los dispositivos virtuales del hipervisor.
Al reducir la cantidad de código desplegado, los unikernels reducen necesariamente la superficie de ataque probable y, por lo tanto, tienen propiedades de seguridad mejoradas. [ 5 ] [ 6 ]
Un ejemplo de cliente de mensajería basado en unikernel tiene aproximadamente un 4% del tamaño de las bases de código equivalentes que utilizan Linux. [ 7 ]
Debido a la naturaleza de su construcción, es posible realizar una optimización de todo el sistema en los controladores de dispositivos y la lógica de la aplicación, mejorando así la especialización. [ 8 ] [ 9 ] [ 10 ] Por ejemplo, aplicaciones comerciales como nginx, SQLite y Redis que se ejecutan sobre un unikernel han mostrado una mejora de rendimiento de 1,7x a 2,7x. [ 11 ]
Se ha demostrado regularmente que los unikernels arrancan extremadamente rápido, a tiempo para responder a las solicitudes entrantes antes de que expire el tiempo de espera de las solicitudes. [ 12 ] [ 13 ] [ 14 ]
Los unikernels se prestan a la creación de sistemas que siguen las arquitecturas de software orientadas a servicios o de microservicios .
Los unikernels no son adecuados para el tipo de computación multiusuario de propósito general para la que se utilizan los sistemas operativos tradicionales, debido a su alto grado de especialización. Generalmente, no es posible añadir funcionalidades adicionales ni modificar un unikernel compilado; en su lugar, se recomienda compilar e implementar un nuevo unikernel con los cambios deseados.
Véase también
Referencias
- 1 2 "Unikernels: El auge del sistema operativo de biblioteca virtual" . Consultado el 31 de agosto de 2015 .
- ↑ Tanenbaum, Andrew S. (2008). Sistemas operativos modernos (3.ª ed.). Prentice Hall. págs. 50-51 . ISBN 978-0-13-600663-3.
. . . casi todas las llamadas al sistema [son] invocadas desde programas C llamando a un procedimiento de biblioteca . . . El procedimiento de biblioteca . . . ejecuta una instrucción TRAP para cambiar del modo de usuario al modo kernel e iniciar la ejecución . . .
- ↑ Cambio de contexto#Cambio de modo de usuario y de kernel
- ↑ Chia-Che, Tsai; Arora, Kumar-Saurabh; Bandi, Nehal; Jain, Bhushan; Jannen, William; John, Jitin; Kalodner, Harry; Kulkarni, Vrushali; Oliviera, Daniela; Porter, Donald E. (2014). "Cooperación y aislamiento de seguridad de sistemas operativos de biblioteca para aplicaciones multiproceso". Actas de la Novena Conferencia Europea sobre Sistemas Informáticos (PDF) . págs. 1–14 . CiteSeerX 10.1.1.589.1837 . doi : 10.1145/2592798.2592812 . ISBN 9781450327046. S2CID 13771821 . Archivado del original (PDF) el 04-03-2016 . Recuperado el 31-08-2015 .
- ↑ "Por qué los unikernels pueden mejorar la seguridad en Internet" . Abril de 2015. Consultado el 31 de agosto de 2015 .
- ↑ Madhavapeddy, Anil; Mortier, Richard; Charalampos, Rotsos; Scott, David; Singh, Balraj; Gazagnaire, Thomas; Smith, Steven; Hand, Steven; Crowcroft, Jon (marzo de 2013). "Unikernels: sistemas operativos de biblioteca para la nube" (PDF) . ACM SIGPLAN Notices . 48 (4): 461– 472. doi : 10.1145/2499368.2451167 .
- ↑ Kaloper-Meršinjak, David; Mehnert, Hannes; Madhavapeddy, Anil; Sewell, Peter (2015). "TLS no tan roto: lecciones sobre la reingeniería de la especificación e implementación de un protocolo de seguridad" . Actas del 24.º Simposio de Seguridad de USENIX (USENIX Security 15) .
- ↑ Thibault, Samuel; Deegan, Tim (2008). "Mejora del rendimiento mediante la integración de aplicaciones HPC en dominios Xen ligeros" (PDF) . Segundo taller sobre virtualización a nivel de sistema para computación de alto rendimiento (HPCVIRT'08) . doi : 10.1145/1435452.1435454 .
- ↑ Madhavapeddy, Anil; Mortier, Richard; Sohan, Ripduman; Gazagnaire, Thomas; Hand, Steven; Deegan, Tim; McAuley, Derek; Crowcroft, Jon (2010). "Turning Down the LAMP: Software Specialisation for the Cloud" (PDF) . Actas de la 2.ª Conferencia USENIX sobre Temas Candentes en Computación en la Nube .
- ↑ Martins, Joao; Mohamed, Ahmed; Raiciu, Costin; Huici, Felipe (2013). "Habilitando el procesamiento de red rápido y dinámico con clickOS". Actas del segundo taller ACM SIGCOMM sobre temas candentes en redes definidas por software (PDF) . págs. 67–72 . doi : 10.1145/2491185.2491195 . ISBN 9781450321785. S2CID 12514038 .
- ^ Kuenzer, Simón; Bădoiu, Vlad-Andrei; Lefeuvre, Hugo; Santhanam, Sharan; Jung, Alejandro; Ganancia, Gaulthier; Soldani, Cirilo; Lupu, Costín; Teodorescu, Stefan; Răducanu, Costi; Banú, Cristian (21-04-2021). "Unikraft: unikernels rápidos y especializados de la manera más fácil" . Actas de la Decimosexta Conferencia Europea sobre Sistemas Informáticos . Evento online Reino Unido: ACM. págs. 376–394 . arXiv : 2104.12721 . doi : 10.1145/3447786.3456248 . ISBN 978-1-4503-8334-9. S2CID 241528818 .
- ↑ "Invocación Just-in-Time de Unikernels (v0.2)" . Magnus Skjegstad . Consultado el 30 de agosto de 2015 .
- ↑ "Zerg" . Zerg: demostración de una instancia por solicitud . Archivado del original el 22 de septiembre de 2015. Recuperado el 30 de agosto de 2015 .
- ↑ Madhavapeddy, Anil; Leonard, Thomas; Skjegstad, Magnus; Gazagnaire, Thomas; Sheets, David; Scott, David; Mortier, Richard; Chaudhry, Amir; Singh, Balraj; Ludlam, Jon; Crowcroft, Jon; Leslie, Ian (2015). "Jitsu: Invocación Just-In-Time de Unikernels" (PDF) . XII Conferencia USENIX sobre Diseño e Implementación de Sistemas en Red (NSDI) . ISBN 978-1-931971-218.
Enlaces externos
- Historia y modelo de negocio; cobertura de IncludeOS . (LWN.net)
- núcleos de sistemas operativos