Articulo de referencia

DragonFly BSD

DragonFly BSD es un sistema operativo tipo Unix gratuito y de código abierto, derivado de FreeBSD 4.8. Matthew Dillon , desarrollador de Amiga a finales de la década de 1980 y p...

Este es un buen artículo. Haz clic aquí para obtener más información.

DragonFly BSD es un sistema operativo tipo Unix gratuito y de código abierto, derivado de FreeBSD 4.8. Matthew Dillon , desarrollador de Amiga a finales de la década de 1980 y principios de la de 1990, y desarrollador de FreeBSD entre 1994 y 2003, comenzó a trabajar en DragonFly BSD en junio de 2003 y lo anunció en las listas de correo de FreeBSD el 16 de julio de 2003. [ 4 ]

Dillon inició DragonFly convencido de que las técnicas adoptadas para el procesamiento multihilo y simétrico en FreeBSD 5 [ 5 ] provocarían un rendimiento deficiente y problemas de mantenimiento. Buscó corregir estos problemas previstos dentro del proyecto FreeBSD. [ 6 ] Debido a conflictos con otros desarrolladores de FreeBSD sobre la implementación de sus ideas, [ 7 ] finalmente se le revocó la capacidad de modificar directamente el código fuente . A pesar de esto, los proyectos DragonFly BSD y FreeBSD siguen colaborando, compartiendo correcciones de errores, actualizaciones de controladores y otras mejoras. Dillon nombró el proyecto tras fotografiar una libélula en su jardín, mientras aún trabajaba en FreeBSD.

Concebido como la continuación lógica de la serie FreeBSD 4.x, DragonFly se ha diferenciado significativamente de FreeBSD, implementando subprocesos ligeros del núcleo (LWKT), un sistema de paso de mensajes dentro del núcleo y el sistema de archivos HAMMER . [ 8 ] Muchos conceptos de diseño fueron influenciados por AmigaOS . [ 9 ]

Diseño del sistema

Núcleo

El subsistema de mensajería del kernel que se está desarrollando es similar a los que se encuentran en microkernels como Mach , aunque es menos complejo por diseño. El subsistema de mensajería de DragonFly tiene la capacidad de funcionar de forma síncrona o asíncrona, y busca utilizar esta capacidad para lograr el mejor rendimiento posible en cualquier situación. [ 10 ]

Según el desarrollador Matthew Dillon , se está avanzando en la implementación de capacidades de entrada/salida (E/S) de dispositivos y de mensajería del sistema de archivos virtual (VFS), lo que permitirá cumplir con los objetivos restantes del proyecto. La nueva infraestructura permitirá migrar muchas partes del kernel al espacio de usuario; allí serán más fáciles de depurar, ya que serán programas más pequeños y aislados, en lugar de pequeñas partes integradas en un bloque de código más grande. Además, la migración de código selecto del kernel al espacio de usuario tiene la ventaja de hacer que el sistema sea más robusto; si un controlador del espacio de usuario falla, no provocará el fallo del kernel. [ 11 ]

Las llamadas al sistema se están dividiendo en versiones para el espacio de usuario y el núcleo, y se están encapsulando en mensajes. Esto ayudará a reducir el tamaño y la complejidad del núcleo al trasladar las variantes de las llamadas al sistema estándar a una capa de compatibilidad para el espacio de usuario , y ayudará a mantener la compatibilidad hacia adelante y hacia atrás entre las versiones de DragonFly. El código de compatibilidad de Linux y otros sistemas operativos tipo Unix se está migrando de manera similar. [ 9 ]

Enhebrado

Como la compatibilidad con múltiples arquitecturas de conjuntos de instrucciones complica la compatibilidad con el procesamiento simétrico multiproceso (SMP), [ 7 ] DragonFly BSD ahora limita su compatibilidad a la plataforma x86-64 . [ 12 ] DragonFly originalmente se ejecutaba en la arquitectura x86 , sin embargo, a partir de la versión 4.0, ya no es compatible. Desde la versión 1.10, DragonFly admite subprocesos de espacio de usuario 1:1 (un subproceso del kernel por subproceso de espacio de usuario), [ 13 ] lo que se considera una solución relativamente simple y fácil de mantener. [ 9 ] Heredado de FreeBSD, DragonFly también admite multiprocesos. [ 14 ]

En DragonFly, cada CPU tiene su propio planificador de hilos. Al crearse, los hilos se asignan a los procesadores y nunca se transfieren de forma preventiva de un procesador a otro; solo se migran mediante el paso de un mensaje de interrupción entre procesadores (IPI) entre las CPU involucradas. La planificación de hilos entre procesadores también se realiza mediante el envío de mensajes IPI asíncronos. Una ventaja de esta compartimentación clara del subsistema de hilos es que las cachés integradas de los procesadores en sistemas multiprocesador simétricos no contienen datos duplicados, lo que permite un mayor rendimiento al brindar a cada procesador del sistema la capacidad de usar su propia caché para almacenar diferentes elementos con los que trabajar. [ 9 ]

El subsistema LWKT se emplea para dividir el trabajo entre múltiples hilos del kernel (por ejemplo, en el código de red, hay un hilo por protocolo por procesador), reduciendo la competencia al eliminar la necesidad de compartir ciertos recursos entre varias tareas del kernel. [ 7 ]

Protección de recursos compartidos

Para funcionar de forma segura en máquinas multiprocesador, el acceso a los recursos compartidos (como archivos, estructuras de datos) debe serializarse para que los hilos o procesos no intenten modificar el mismo recurso al mismo tiempo. Para evitar que varios hilos accedan o modifiquen un recurso compartido simultáneamente, DragonFly emplea secciones críticas y tokens de serialización para evitar el acceso concurrente. Si bien tanto Linux como FreeBSD 5 emplean modelos de mutex de grano fino para lograr un mayor rendimiento en sistemas multiprocesador , DragonFly no lo hace. [ 7 ] Hasta hace poco, DragonFly también empleaba spls , pero estos fueron reemplazados por secciones críticas.

Gran parte del núcleo del sistema, incluyendo el subsistema LWKT , el subsistema de mensajería IPI y el nuevo asignador de memoria del kernel, no utiliza bloqueos, lo que significa que funciona sin usar mutexes, y cada proceso opera en una sola CPU. Se utilizan secciones críticas para proteger contra interrupciones locales, individualmente para cada CPU, garantizando que un hilo que se esté ejecutando no sea interrumpido. [ 13 ]

Los tokens de serialización se utilizan para evitar accesos concurrentes desde otras CPU y pueden ser mantenidos simultáneamente por múltiples hilos, lo que garantiza que solo uno de ellos se ejecute en un momento dado. Por lo tanto, los hilos bloqueados o en espera no impiden que otros hilos accedan al recurso compartido, a diferencia de un hilo que mantiene un mutex. Entre otras cosas, el uso de tokens de serialización evita muchas de las situaciones que podrían provocar interbloqueos e inversiones de prioridad al usar mutex, además de simplificar enormemente el diseño e implementación de un procedimiento de varios pasos que requeriría que un recurso se compartiera entre múltiples hilos. El código del token de serialización está evolucionando hacia algo bastante similar a la función " Leer-copiar-actualizar " disponible actualmente en Linux. A diferencia de la implementación actual de RCU de Linux, la de DragonFly se está implementando de manera que solo se vean afectados los procesadores que compiten por el mismo token, en lugar de todos los procesadores del ordenador. [ 15 ]

DragonFly cambió a un asignador de bloques seguro para multiprocesadores , que no requiere mutex ni operaciones de bloqueo para las tareas de asignación de memoria. [ 16 ] Finalmente se portó a la biblioteca estándar de C en el espacio de usuario, donde reemplazó la implementación de malloc de FreeBSD. [ 17 ]

núcleo virtual

Desde la versión 1.8, DragonFly cuenta con un mecanismo de virtualización similar al de User-mode Linux , [ 18 ] que permite a un usuario ejecutar otro kernel en el espacio de usuario. El kernel virtual ( vkernel ) se ejecuta en un entorno completamente aislado con interfaces de red y almacenamiento emuladas, lo que simplifica las pruebas de subsistemas del kernel y funciones de clúster. [ 9 ] [ 11 ]

El vkernel tiene dos diferencias importantes con respecto al kernel real: carece de muchas rutinas para gestionar el hardware de bajo nivel y utiliza funciones de la biblioteca estándar de C (libc) en lugar de implementaciones en el kernel siempre que sea posible. Dado que tanto el kernel real como el virtual se compilan a partir de la misma base de código, esto significa que las rutinas dependientes de la plataforma y las reimplementaciones de las funciones de libc están claramente separadas en el árbol de código fuente. [ 19 ]

El vkernel se ejecuta sobre abstracciones de hardware proporcionadas por el kernel real. Estas incluyen el temporizador basado en kqueue , la consola (mapeada al terminal virtual donde se ejecuta vkernel), la imagen de disco y el dispositivo Ethernet del kernel virtual ( VKE ), que encapsula todos los paquetes a la interfaz tap del host . [ 20 ]

Gestión de paquetes

El software de terceros está disponible en DragonFly como paquetes binarios a través de pkgngo desde una colección de puertos nativos – DPorts . [ 21 ]

DragonFly originalmente usó la colección Ports de FreeBSD como su sistema oficial de gestión de paquetes , pero a partir de la versión 1.4 cambió al sistema pkgsrc de NetBSD , que se percibió como una forma de disminuir la cantidad de trabajo necesario para la disponibilidad de software de terceros. [ 6 ] [ 22 ] Finalmente, mantener la compatibilidad resultó requerir más esfuerzo del previsto inicialmente, por lo que el proyecto creó DPorts, una capa superpuesta sobre la colección Ports de FreeBSD. [ 23 ] [ 24 ]pkgsrc

Apoyo de CARP

La implementación inicial del Protocolo de Redundancia de Direcciones Comunes (conocido comúnmente como CARP ) se completó en marzo de 2007. [ 25 ] A partir de 2011, el soporte para CARP está integrado en DragonFly BSD. [ 26 ]

Sistemas de archivos HAMMER

Además del sistema de archivos Unix , que suele ser el sistema de archivos predeterminado en los sistemas BSD, DragonFly BSD admite los sistemas de archivos HAMMER y HAMMER2 . HAMMER2 es el sistema de archivos predeterminado a partir de la versión 5.2.0.

HAMMER se desarrolló específicamente para DragonFly BSD para proporcionar un análogo con más funciones y mejor diseñado del cada vez más popular ZFS . [ 9 ] [ 11 ] [ 27 ] HAMMER admite historial de sistema de archivos configurable, instantáneas , suma de comprobación , deduplicación de datos y otras características típicas de los sistemas de archivos de su tipo. [ 18 ] [ 28 ]

HAMMER2, sucesor del sistema de archivos HAMMER, ahora se considera estable, se usa por defecto y es el foco de su desarrollo futuro. Los planes para su desarrollo se compartieron inicialmente en 2012. [ 29 ] En 2017, Dillon anunció que la siguiente versión de DragonFly BSD (5.0.0) incluiría una versión utilizable, aunque todavía experimental, de HAMMER2, y describió las características del diseño. [ 30 ] Con el lanzamiento de la versión 5.2.0, HAMMER2 se convirtió en el nuevo sistema de archivos predeterminado.

devfs

En 2007, DragonFly BSD recibió un nuevo sistema de archivos de dispositivos (devfs), que agrega y elimina nodos de dispositivos dinámicamente, permite acceder a los dispositivos mediante rutas de conexión, reconoce las unidades por números de serie y elimina la necesidad de una jerarquía de sistema de archivos predefinida /dev. Se implementó como un proyecto de Google Summer of Code 2009. [ 31 ]

Instantáneas de la aplicación

DragonFly BSD admite la función de aplicaciones residentes al estilo Amiga : toma una instantánea del espacio de memoria virtual de un programa grande y enlazado dinámicamente después de la carga, lo que permite que las futuras instancias del programa se inicien mucho más rápido de lo que lo harían de otro modo. Esto reemplaza la capacidad de preenlace que se estaba desarrollando anteriormente en la historia del proyecto, ya que la compatibilidad con aplicaciones residentes es mucho más eficiente. Los programas grandes, como los que se encuentran en KDE Software Compilation con muchas bibliotecas compartidas , se beneficiarán enormemente de esta compatibilidad. [ 32 ]

Desarrollo y distribución

DragonFly BSD 6.2.1 con entorno de escritorio Lumina

Al igual que FreeBSD y OpenBSD , los desarrolladores de DragonFly BSD están reemplazando gradualmente el código C de estilo prototipo de función previa con equivalentes ANSI más modernos . De forma similar a otros sistemas operativos, la versión de DragonFly de la Colección de Compiladores GNU tiene una mejora llamada Protector contra Desbordamiento de Pila (ProPolice) habilitada por defecto, que proporciona cierta protección adicional contra ataques basados ​​en desbordamiento de búfer . A fecha de 23 de julio de 2005.  , el kernel ya no se compila con esta protección por defecto. [ 32 ]

Al ser un derivado de FreeBSD, DragonFly ha heredado un sistema de compilación integrado y fácil de usar que puede reconstruir todo el sistema base desde el código fuente con solo unos pocos comandos. Los desarrolladores de DragonFly utilizan el sistema de control de versiones Git para gestionar los cambios en el código fuente de DragonFly . A diferencia de su padre FreeBSD, DragonFly tiene versiones estables e inestables en un único árbol de código fuente, debido a una base de desarrolladores más pequeña. [ 7 ]

Al igual que los demás núcleos BSD (y los de la mayoría de los sistemas operativos modernos), DragonFly emplea un depurador de núcleo integrado para ayudar a los desarrolladores a encontrar errores en el núcleo. Además, a partir de octubre de 2004 Se instala de forma predeterminada un kernel de depuración, que facilita la detección de errores en los informes, aunque con un consumo de espacio en disco relativamente pequeño. Al instalar un nuevo kernel, se eliminan los símbolos de depuración de la copia de seguridad del kernel anterior y sus módulos para minimizar aún más el uso del espacio en disco.

Medios de distribución

El sistema operativo se distribuye como un Live CD y un Live USB que arrancan un sistema DragonFly completo. [ 18 ] [ 31 ] Incluye el sistema base y un conjunto completo de páginas de manual, y puede incluir código fuente y paquetes útiles en futuras versiones. La ventaja es que con un solo CD los usuarios pueden instalar el software en una computadora, usar un conjunto completo de herramientas para reparar una instalación dañada o demostrar las capacidades del sistema sin instalarlo. Hay instantáneas diarias disponibles en el sitio principal para aquellos que deseen instalar las versiones más recientes de DragonFly sin compilarlas desde el código fuente.

Al igual que otros sistemas BSD gratuitos y de código abierto, DragonFly se distribuye bajo los términos de la versión moderna de la licencia BSD .

Historial de lanzamientos

Cronológico inverso:

Véase también

Referencias

  1. "DragonFly BSD 6.4" . Dragonfly BSD . Consultado el 14 de mayo de 2025 .
  2. Dillon, Matthew (22 de agosto de 2006), "Re: ¿Cuánto de microkernel?" , lista de correo del kernel , consultado el 14 de septiembre de 2011
  3. "Licencia DragonFly BSD" , DragonFly BSD , consultado el 17 de enero de 2015
  4. Dillon, Matthew (16 de julio de 2003), "¡Anunciando DragonFly BSD!" , lista de correo freebsd-current , consultado el 26 de julio de 2007.
  5. Lehey, Greg (2001), Mejora de la implementación SMP de FreeBSD (PDF) , USENIX , consultado el 22 de febrero de 2012
  6. 1 2 Kerner, Sean Michael (10 de enero de 2006), "Nueva versión de DragonFly lanzada para usuarios de BSD" , InternetNews , archivado del original el 28 de junio de 2011 , recuperado el 20 de noviembre de 2011
  7. 1 2 3 4 5 6 Biancuzzi, Federico (8 de julio de 2004), "Behind DragonFly BSD" , O'Reilly Media , archivado del original el 9 de abril de 2014 , recuperado el 20 de noviembre de 2011
  8. Loli-Queru, Eugenia (13 de marzo de 2004), "Entrevista con Matthew Dillon de DragonFly BSD" , OSNews , consultado el 22 de febrero de 2012.
  9. 1 2 3 4 5 6 Chisnall, David (15 de junio de 2007), "DragonFly BSD: ¿UNIX para clústeres?" , InformIT , consultado el 22 de noviembre de 2011{{citation}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  10. Hsu, Jeffery M. (13 de marzo de 2004). El sistema operativo DragonFly BSD (PDF) . AsiaBSDCon 2004. Taipéi, Taiwán . Recuperado el 20 de noviembre de 2011 .
  11. 1 2 3 Andrews, Jeremy (6 de agosto de 2007), "Entrevista: Matthew Dillon" , KernelTrap , archivado del original el 15 de mayo de 2011
  12. "El rendimiento de DragonFly BSD MP ha mejorado significativamente" , OSNews , 16 de noviembre de 2011 , consultado el 19 de noviembre de 2011.
  13. 1 2 Luciani, Robert (24 de mayo de 2009), M:N threading in DragonflyBSD (PDF) , BSDCon, archivado del original (PDF) el 23 de diciembre de 2010
  14. Sherrill, Justin (11 de enero de 2004), Paying off already , archivado del original el 30 de abril de 2014 , recuperado el 20 de noviembre de 2011
  15. Pistritto, Joe; Dillon, Matthew; Sherrill, Justin C.; et al. (24 de abril de 2004), "Serializing token" , lista de correo del kernel , consultado el 20 de marzo de 2012. {{citation}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  16. Bonwick, Jeff ; Adams, Jonathan (3 de enero de 2002), Magazines and Vmem: Extending the Slab Allocator to Many CPUs and Arbitrary Resources , USENIX , consultado el 20 de noviembre de 2011
  17. Dillon, Matthew (23 de abril de 2009), "Nueva implementación de malloc en libc" , lista de correo del kernel , consultado el 8 de agosto de 2011.
  18. 1 2 3 4 Vervloesem, Koen (21 de abril de 2010), "DragonFly BSD 2.6: hacia un sistema operativo de clúster libre" , LWN.net , consultado el 19 de noviembre de 2011
  19. ^ Economopoulos, Aggelos (16 de abril de 2007), "Un vistazo al kernel virtual DragonFly" , LWN.net , no. parte 1 , consultado el 8 de diciembre de 2011 
  20. ^ Economopoulos, Aggelos (16 de abril de 2007), "Un vistazo al kernel virtual DragonFly" , LWN.net , no. parte 2 , consultado el 8 de diciembre de 2011 
  21. "HowTo DPorts" , DragonFly BSD , consultado el 2 de diciembre de 2013
  22. Weinem, Mark (2007). "10 años de pkgsrc" . NetBSD . Joerg Sonnenberger habla sobre pkgsrc en DragonFly BSD y sus proyectos de desarrollo de pkgsrc . Recuperado el 22 de noviembre de 2011 .
  23. Sherrill, Justin (30 de septiembre de 2013), "¿Por qué dports?" , DragonFly BSD Digest , archivado del original el 30 de abril de 2014 , recuperado el 2 de diciembre de 2011.
  24. Sherrill, Justin (29 de septiembre de 2013), "¿Hay nuevos paquetes?" , lista de correo de usuarios , consultado el 2 de diciembre de 2013.
  25. Buschmann, Jonathan (14 de marzo de 2007), "Primer parche para instalar CARP en Dfly" , lista de correo del kernel , consultado el 20 de noviembre de 2011.
  26. "Página del manual CARP(4)" , Páginas del manual en línea de DragonFly , consultado el 20 de noviembre de 2011
  27. Dillon, Matthew (10 de octubre de 2007), "Re: Actualización del sistema de archivos HAMMER - documento de diseño" , lista de correo del kernel , consultado el 20 de noviembre de 2011.
  28. Larabel, Michael (7 de enero de 2011), "¿Puede HAMMER de DragonFlyBSD competir con Btrfs y ZFS?" , Phoronix , consultado el 20 de noviembre de 2011 , HAMMER parece ser un sistema de archivos BSD muy interesante. Si bien no es tan rápido como el sistema de archivos ZFS en BSD, también es un sistema de archivos original del proyecto DragonFlyBSD en lugar de ser una adaptación de OpenSolaris. HAMMER no solo es generalmente más rápido que el sistema de archivos UFS común, sino que también tiene un conjunto de características mucho mayor.
  29. Dillon, Matthew (8 de febrero de 2012), "Documento de DISEÑO para HAMMER2 (actualización del 8 de febrero de 2012)" , usuarios , consultado el 22 de febrero de 2012.
  30. Dillon, Matthew (18 de agosto de 2017), "La próxima versión de DFly tendrá una implementación inicial de HAMMER2" , usuarios , consultado el 3 de julio de 2018.
  31. 1 2 Sr. (7 de enero de 2010), "DragonFlyBSD con Matthew Dillon" , bsdtalk , archivado del original ( ogg ) el 25 de abril de 2012 , recuperado el 20 de noviembre de 2011
  32. 1 2 "Diario de DragonFly BSD" , DragonFly BSD , 7 de enero de 2006 , consultado el 19 de noviembre de 2011
  33. "DragonFly: Lanzamientos" , DragonFly BSD , consultado el 19 de junio de 2014
  34. Tigeot, Francois (31 de julio de 2007), "Soporte para KMS + i915 ahora en -master" , lista de correo de usuarios , consultado el 2 de diciembre de 2013
  35. Matthew Dillon (4 de junio de 2009) ."Re: DragonFly-2.3.1.165.g25822 master sys/dev/disk/ahci Makefile TODO ahci.c ahci.h ahci_attach.c ahci_cam.c ahci_dragonfly.c ahci_dragonfly.h atascsi.h"" .
  36. 1 2 Kerner, Sean Michael (25 de julio de 2006), "DragonFly BSD 1.6 corta el cordón" , InternetNews , consultado el 20 de noviembre de 2011
  37. Townsend, Trent (18 de enero de 2006), "Una breve reseña de DragonFly BSD 1.4" , OSNews , consultado el 16 de noviembre de 2011.