stringtranslate.com

Uníkernel

Comparación de una pila de SO tradicional y un unikernel MirageOS

Un unikernel es un programa informático vinculado 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 vincula con uno o más sistemas operativos de biblioteca que los proporcionan. Un programa de este tipo no requiere un sistema operativo separado y puede ejecutarse en su lugar 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 amplían hasta las capas de hardware más bajas, lo que da como resultado:

  1. un conjunto de bibliotecas que implementan mecanismos como los necesarios para controlar hardware o comunicarse con protocolos de red;
  2. un conjunto de políticas que imponen el control de acceso y el aislamiento en la capa de aplicación.

La arquitectura del SO de biblioteca tiene varias ventajas y desventajas en comparación con los diseños de SO convencionales. Una de las ventajas es que, dado que solo hay un único espacio de direcciones, no hay necesidad de transiciones de privilegios repetidas para mover datos entre el espacio de usuario y el espacio del núcleo. Por lo tanto, un SO de biblioteca puede proporcionar un rendimiento mejorado al permitir el acceso directo al hardware sin tener que realizar la transición entre el modo de usuario y el modo de núcleo (en un núcleo tradicional, esta transición consiste en una sola instrucción TRAP [2] y no es lo mismo que un cambio de contexto [3] ). Se pueden lograr ganancias de rendimiento mediante la eliminación de la necesidad de copiar datos entre el espacio de usuario y el espacio del núcleo, aunque esto también es posible con los controladores de dispositivos de copia cero en los sistemas operativos tradicionales.

Una desventaja es que, como no existe 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 dispositivos para el hardware específico en el que se ejecuta el sistema operativo de biblioteca. Como el hardware cambia rápidamente, esto crea la carga de tener que reescribir periódicamente los controladores para que se mantengan actualizados.

La virtualización de SO puede superar algunos de estos inconvenientes en el hardware de consumo. 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 virtuales estables y puede depender del hipervisor para controlar el hardware físico real. Sin embargo, las bibliotecas de protocolos siguen siendo necesarias para reemplazar los servicios de un sistema operativo tradicional. La creación de estas bibliotecas de protocolos es donde radica la mayor parte del trabajo al implementar un SO 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 pasar datos hacia y desde dispositivos virtuales del hipervisor.

Al reducir la cantidad de código implementado, los unikernels necesariamente reducen 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 alrededor del 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, las aplicaciones estándar como nginx, SQLite y Redis que se ejecutan sobre un unikernel han mostrado una mejora del rendimiento de 1,7x-2,7x. [11]

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. [12] [13] [14]

Los unikernels se prestan a la creación de sistemas que siguen arquitecturas de software orientadas a servicios o 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 la que se utilizan los sistemas operativos tradicionales. Generalmente no es posible agregar funcionalidad adicional ni modificar un unikernel compilado, y en su lugar, el enfoque consiste en compilar e implementar un nuevo unikernel con los cambios deseados.

Véase también

Referencias

  1. ^ ab "Unikernels: Rise of the Virtual Library Operating System" (Unikernels: el auge del sistema operativo de bibliotecas virtuales) . Consultado el 31 de agosto de 2015 .
  2. ^ 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 [se] invocan 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 . . .
  3. ^ Cambio de contexto#Cambio de modo de usuario y kernel
  4. ^ 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 desde el original (PDF) el 4 de marzo de 2016. Consultado el 31 de agosto de 2015 .
  5. ^ "Por qué los Unikernels pueden mejorar la seguridad en Internet". Abril de 2015. Consultado el 31 de agosto de 2015 .
  6. ^ 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) . Avisos SIGPLAN (ASPLOS 13) . 48 (4): 461. doi :10.1145/2499368.2451167.
  7. ^ Kaloper-Meršinjak, David; Mehnert, Hannes; Madhavapeddy, Anil; Sewell, Peter (2015). "TLS no tan defectuoso: lecciones sobre la reingeniería de una especificación e implementación de protocolo de seguridad". Actas del 24.º Simposio de seguridad de USENIX (USENIX Security 15) .
  8. ^ Thibault, Samuel; Deegan, Tim (2008). "Mejora del rendimiento mediante la incorporación de aplicaciones HPC en dominios Xen ligeros" (PDF) . 2.º taller sobre virtualización a nivel de sistema para computación de alto rendimiento (HPCVIRT'08) . doi :10.1145/1435452.1435454.
  9. ^ 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 de actualidad en computación en la nube .
  10. ^ Martins, Joao; Mohamed, Ahmed; Raiciu, Costin; Huici, Felipe (2013). "Habilitación de un procesamiento de red rápido y dinámico con clickOS". Actas del segundo taller ACM SIGCOMM sobre temas de actualidad en redes definidas por software (PDF) . págs. 67–72. doi :10.1145/2491185.2491195. ISBN . 9781450321785.S2CID 12514038  .
  11. ^ 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 forma más sencilla". 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. Número de identificación del sujeto  241528818.
  12. ^ "Invocación de Unikernels en el momento justo (v0.2)". Magnus Skjegstad . Consultado el 30 de agosto de 2015 .
  13. ^ "Zerg". Zerg: una instancia por solicitud de demostración . Consultado el 30 de agosto de 2015 .
  14. ^ 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 justo a tiempo de Unikernels" (PDF) . La 12.ª Conferencia USENIX sobre diseño e implementación de sistemas en red (NSDI) . ISBN 978-1-931971-218.

Enlaces externos