Un unikernel es una imagen de máquina de espacio de direcciones única especializada construida mediante el uso de sistemas operativos de biblioteca . [1] Un desarrollador selecciona, de una pila modular, el conjunto mínimo de bibliotecas que corresponden a las construcciones del sistema operativo necesarias para que se ejecute la aplicación. Estas bibliotecas luego se compilan con la aplicación y el código de configuración para construir imágenes selladas de propósito fijo (unikernels) que se ejecutan directamente en un hipervisor o hardware sin un sistema operativo como Linux o Windows.
Los primeros sistemas de este tipo fueron Exokernel y Nemesis a fines de la década de 1990.
Diseño
En un sistema operativo de biblioteca, los límites de protección se trasladan a las capas de hardware más bajas, lo que da como resultado:
- un conjunto de bibliotecas que implementan mecanismos como los necesarios para manejar hardware o hablar sobre protocolos de red;
- un conjunto de políticas que refuerzan el control de acceso y el aislamiento en la capa de aplicación.
La arquitectura del SO de la biblioteca tiene varias ventajas y desventajas en comparación con los diseños de SO convencionales. Una de las ventajas es que, dado que hay un solo espacio de direcciones, no es necesario repetir las transiciones de privilegios para mover datos entre el espacio del usuario y el espacio del kernel. Por lo tanto, un sistema operativo de biblioteca puede proporcionar un rendimiento mejorado al permitir el acceso directo al hardware sin tener que hacer una transición entre el modo de usuario y el modo de kernel (en un kernel tradicional, esta transición consiste en una sola instrucción TRAP [2] y no es lo mismo que un cambio de contexto [3] ). Las ganancias de rendimiento se pueden lograr eliminando la necesidad de copiar datos entre el espacio del usuario y el espacio del kernel, aunque esto también es posible con los controladores de dispositivo de copia cero en los sistemas operativos tradicionales.
Una desventaja es que, debido a que no hay separación, intentar ejecutar varias aplicaciones en paralelo en un sistema operativo de biblioteca, pero con un fuerte aislamiento de recursos, puede volverse complejo. [4] Además, los controladores de dispositivo son necesarios para el hardware específico en el que se ejecuta el sistema operativo de la biblioteca. Dado que el hardware está cambiando rápidamente, esto crea la carga de reescribir los controladores con regularidad para mantenerse actualizados.
La virtualización del sistema operativo puede superar algunos de estos inconvenientes del hardware básico. Un hipervisor moderno proporciona a las máquinas virtuales tiempo de CPU y dispositivos virtuales fuertemente aislados. Un SO 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 protocolos para reemplazar los servicios de un sistema operativo tradicional. La creación de estas bibliotecas de protocolos 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 los gastos generales de rendimiento cuando se cambia entre el unikernel y el hipervisor, y cuando se pasan datos hacia y desde los dispositivos virtuales del hipervisor.
Al reducir la cantidad de código implementado, los unikernel necesariamente reducen la probable superficie de ataque y, por lo tanto, tienen propiedades de seguridad mejoradas. [5] [6]
Se ha demostrado que los Unikernels tienen aproximadamente un 4% del tamaño de las bases de código equivalentes utilizando un sistema operativo tradicional. [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] Por ejemplo, las aplicaciones estándar como nginx, SQLite y Redis que se ejecutan sobre un unikernel han mostrado una mejora de rendimiento de 1.7x-2.7x. [10]
Se ha demostrado regularmente que los Unikernels se inician extremadamente rápido, a tiempo para responder a las solicitudes entrantes antes de que se agote el tiempo de espera de las solicitudes. [11] [12] [13]
Los Unikernels se prestan a la creación de sistemas que siguen las arquitecturas de software orientadas a servicios o de microservicios .
El alto grado de especialización significa que los unikernels no son adecuados para el tipo de computación multiusuario de propósito general para el que se utilizan los sistemas operativos tradicionales. Agregar funcionalidad adicional o alterar un unikernel compilado generalmente no es posible y, en cambio, el enfoque es compilar e implementar un nuevo unikernel con los cambios deseados.
Ver también
Referencias
- ^ a b "Unikernels: auge del sistema operativo de la 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 la biblioteca. . . ejecuta una instrucción TRAP para cambiar del modo de usuario al modo de kernel e iniciar la ejecución. . .
- ^ Cambio de contexto # Cambio de modo de usuario y 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 bibliotecas para aplicaciones multiproceso (PDF) . Actas de la Novena Conferencia Europea de Sistemas Informáticos (EuroSys) . págs. 1-14. CiteSeerX 10.1.1.589.1837 . doi : 10.1145 / 2592798.2592812 . ISBN 9781450327046.
- ^ "Por qué Unikernels puede mejorar la seguridad de 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; Mano, Steven; Crowcroft, Jon (marzo de 2013). "Unikernels: sistemas operativos de bibliotecas para la nube" (PDF) . Avisos SIGPLAN (ASPLOS 13) . 48 (4): 461. doi : 10.1145 / 2499368.2451167 .
- ^ Kaloper-Meršinjak, David; Mehnert, Hannes; Madhavapeddy, Anil; Sewell, Peter (2015). "TLS no tan roto: lecciones en la reingeniería de una especificación e implementación de un protocolo de seguridad" . Actas del 24º Simposio de Seguridad de USENIX (USENIX Security 15) .
- ^ Madhavapeddy, Anil; Mortier, Richard; Sohan, Ripduman; Gazagnaire, Thomas; Mano, Steven; Deegan, Tim; McAuley, Derek; Crowcroft, Jon (2010). "Rechazar la LÁMPARA: Especialización en software para la nube" (PDF) . Actas de la 2ª Conferencia de USENIX sobre temas de actualidad en computación en la nube .
- ^ Martins, Joao; Mohamed Ahmed; Raiciu, Costin; Huici, Felipe (2013). Habilitación del procesamiento de redes rápido y dinámico con ClickOS (PDF) . Actas del segundo taller de ACM SIGCOMM sobre temas de actualidad en redes definidas por software . pag. 67. doi : 10.1145 / 2491185.2491195 . ISBN 9781450321785.
- ^ Kuenzer, Simon; Bădoiu, Vlad-Andrei; Lefeuvre, Hugo; Santhanam, Sharan; Jung, Alexander; Gaulthier; Soldani, Cyril; Lupu, Costin; Teodorescu, Ştefan; Răducanu, Costi; Banu, Cristian (21 de abril de 2021). "Unikraft: unikernels rápidos y especializados de la manera más fácil" . Actas de la Decimosexta Conferencia Europea de Sistemas Informáticos . Evento online Reino Unido: ACM: 376–394. arXiv : 2104.12721 . doi : 10.1145 / 3447786.3456248 . ISBN 978-1-4503-8334-9.
- ^ "Invocación justo a tiempo de Unikernels (v0.2)" . Magnus Skjegstad . Consultado el 30 de agosto de 2015 .
- ^ "Zerg" . Zerg: una instancia por solicitud de demostración . Consultado el 30 de agosto de 2015 .
- ^ Madhavapeddy, Anil; Leonard, Thomas; Skjegstad, Magnus; Gazagnaire, Thomas; Sábanas, 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) . La 12ª Conferencia de 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)