DragonFly BSD es un sistema operativo gratuito y de código abierto similar a Unix bifurcado de FreeBSD 4.8. Matthew Dillon , un desarrollador de Amiga a finales de los 80 y principios de los 90 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. [3]
Desarrollador | Matthew Dillon |
---|---|
Familia OS | Tipo Unix |
Estado de trabajo | Actual |
Modelo fuente | Fuente abierta |
Versión inicial | 1.0 / 12 de julio de 2004 |
Último lanzamiento | 6.0 / 10 de mayo de 2021 [1] |
Repositorio | |
Disponible en | inglés |
Gerente de empaquetación | paquete |
Plataformas | x86-64 |
Tipo de grano | Híbrido |
Userland | BSD |
Interfaz de usuario predeterminada | Shell de Unix |
Licencia | BSD [2] |
Página web oficial | www |
Dillon comenzó DragonFly con la creencia de que las técnicas adoptadas para el subprocesamiento y el multiprocesamiento simétrico en FreeBSD 5 [4] conducirían a problemas de rendimiento y mantenimiento deficientes. Intentó corregir estos problemas anticipados dentro del proyecto FreeBSD. [5] Debido a conflictos con otros desarrolladores de FreeBSD sobre la implementación de sus ideas, [6] su capacidad para cambiar directamente el código base fue finalmente revocada. A pesar de esto, los proyectos DragonFly BSD y FreeBSD aún funcionan juntos, compartiendo correcciones de errores, actualizaciones de controladores y otras mejoras.
Concebido como la continuación lógica de la serie FreeBSD 4.x, DragonFly se ha diferenciado significativamente de FreeBSD, implementando hilos de kernel livianos (LWKT), un sistema de paso de mensajes en el kernel y el sistema de archivos HAMMER . [7] Muchos conceptos de diseño fueron influenciados por AmigaOS . [8]
Diseño de sistemas
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. Sin embargo, DragonFly usa un sistema de kernel monolítico. [9] El subsistema de mensajería de DragonFly tiene la capacidad de actuar de forma sincrónica o asincrónica, e intenta utilizar esta capacidad para lograr el mejor rendimiento posible en cualquier situación dada. [10]
Según el desarrollador Matthew Dillon , se está avanzando para proporcionar capacidades de mensajería de entrada / salida (E / S) y sistema de archivos virtuales (VFS) que permitirán cumplir el resto de los objetivos del proyecto. La nueva infraestructura permitirá que muchas partes del kernel se migren al espacio de usuario; aquí serán más fáciles de depurar, ya que serán programas aislados más pequeños, en lugar de ser partes pequeñas entrelazadas en un fragmento de código más grande. Además, la migración de un código de kernel selecto al espacio de usuario tiene la ventaja de hacer que el sistema sea más robusto; si un controlador de espacio de usuario falla, no bloqueará el kernel. [11]
Las llamadas al sistema se dividen en versiones de kernel y de usuario y se encapsulan en mensajes. Esto ayudará a reducir el tamaño y la complejidad del kernel al mover variantes de llamadas al sistema estándar a una capa de compatibilidad de usuario , y ayudará a mantener la compatibilidad hacia adelante y hacia atrás entre las versiones de DragonFly. Linux y otros códigos de compatibilidad de sistemas operativos similares a Unix se están migrando de manera similar. [8]
Enhebrado
Dado que el soporte para arquitecturas de conjuntos de instrucciones múltiples complica el soporte del multiprocesamiento simétrico (SMP), [6] DragonFly BSD ahora limita su soporte a la plataforma x86-64 . [12] DragonFly se ejecutó originalmente 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 soporta subprocesos de área de usuario 1: 1 (un subproceso de kernel por subproceso de área de usuario), [13] que se considera una solución relativamente simple que también es fácil de mantener. [8] Heredado de FreeBSD, DragonFly también admite subprocesos múltiples. [14]
En DragonFly, cada CPU tiene su propio programador de subprocesos. Tras la creación, los subprocesos se asignan a los procesadores y nunca se cambian 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 programación de subprocesos entre procesadores también se logra mediante el envío de mensajes IPI asíncronos. Una ventaja de esta compartimentación limpia del subsistema de roscado es que los transformadores a bordo cachés en sistemas multiprocesador simétrico no contienen datos duplicados, lo que permite un mayor rendimiento, dando a cada procesador en el sistema la capacidad de utilizar su propia caché para almacenar diferentes cosas en las que trabajar. [8]
El subsistema LWKT se está empleando para particionar el trabajo entre múltiples subprocesos del kernel (por ejemplo, en el código de red hay un subproceso por protocolo por procesador), reduciendo la competencia al eliminar la necesidad de compartir ciertos recursos entre varias tareas del kernel. [6]
Para ejecutarse de forma segura en máquinas multiprocesador, el acceso a los recursos compartidos (como archivos, estructuras de datos) debe serializarse para que los subprocesos o procesos no intenten modificar el mismo recurso al mismo tiempo. Para evitar que varios subprocesos accedan o modifiquen un recurso compartido simultáneamente, DragonFly emplea secciones críticas y serializa tokens para evitar el acceso simultáneo. 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. [6] Hasta hace poco, DragonFly también empleaba spls , pero estos fueron reemplazados por secciones críticas.
Gran parte del núcleo del sistema, incluido el subsistema LWKT , el subsistema de mensajería IPI y el nuevo asignador de memoria del kernel, no tienen bloqueo, lo que significa que funcionan sin usar mutex, con cada proceso operando en una sola CPU. Las secciones críticas se utilizan para proteger contra las interrupciones locales, individualmente para cada CPU, lo que garantiza que un hilo que se está ejecutando actualmente no será reemplazado. [13]
Los tokens de serialización se utilizan para evitar accesos simultáneos desde otras CPU y pueden ser retenidos simultáneamente por varios subprocesos, lo que garantiza que solo uno de esos subprocesos se esté ejecutando en un momento dado. Por lo tanto, los subprocesos bloqueados o inactivos no impiden que otros subprocesos accedan al recurso compartido, a diferencia de un subproceso que tiene un mutex. Entre otras cosas, el uso de tokens de serialización previene muchas de las situaciones que podrían resultar en interbloqueos e inversiones de prioridad al usar mutex, así como también simplifica enormemente el diseño y la implementación de un procedimiento de muchos pasos que requeriría compartir un recurso 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 " ahora disponible en Linux. A diferencia de la implementación RCU actual de Linux, DragonFly se está implementando de tal manera que solo los procesadores que compiten por el mismo token se ven afectados en lugar de todos los procesadores en la computadora. [15]
DragonFly cambió a un asignador de bloques seguro multiprocesador , que no requiere mutex ni operaciones de bloqueo para las tareas de asignación de memoria. [16] Finalmente fue portado a la biblioteca C estándar en el área de usuario, donde reemplazó la implementación malloc de FreeBSD. [17]
Kernel virtual
Desde la versión 1.8, DragonFly tiene un mecanismo de virtualización similar al modo de usuario de Linux , [18] que permite a un usuario ejecutar otro kernel en el área de usuario. El kernel virtual ( vkernel ) se ejecuta en un entorno completamente aislado con interfaces de almacenamiento y red emuladas, lo que simplifica las pruebas de los subsistemas del kernel y las funciones de agrupación en clústeres. [8] [11]
El vkernel tiene dos diferencias importantes con el kernel real: carece de muchas rutinas para lidiar con la administración de hardware de bajo nivel y usa funciones de 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 efectivamente que las rutinas dependientes de la plataforma y las reimplementaciones de funciones libc están claramente separadas en un árbol de fuentes. [19]
El vkernel se ejecuta sobre abstracciones de hardware proporcionadas por el kernel real. Estos incluyen el temporizador basado en kqueue , la consola (asignada a la terminal virtual donde se ejecuta vkernel), la imagen del disco y el dispositivo Ethernet del kernel virtual ( VKE ), canalizando 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 pkgng
o desde una colección de puertos nativos : DPorts . [21]
DragonFly usó originalmente la colección FreeBSD Ports como su sistema oficial de administració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. [5] [22] Eventualmente, mantener la compatibilidad con pkgsrc
demostró requerir más esfuerzo de lo que se anticipó inicialmente, por lo que el proyecto creó DPorts, una superposición sobre la colección de FreeBSD Ports . [23] [24]
Soporte CARP
La implementación inicial del Protocolo común de redundancia de direcciones (comúnmente conocido como CARP ) finalizó en marzo de 2007. [25] A partir de 2011, el soporte CARP está integrado en DragonFly BSD. [26]
Sistemas de archivos HAMMER
Junto con el sistema de archivos Unix , que suele ser el sistema de archivos predeterminado en los 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 fue desarrollado específicamente para DragonFly BSD para proporcionar un análogo rico en funciones pero mejor diseñado del cada vez más popular ZFS . [8] [11] [27] HAMMER admite el historial del sistema de archivos configurable, las instantáneas , la suma de comprobación , la deduplicación de datos y otras características típicas de los sistemas de archivos de este tipo. [18] [28]
HAMMER2, el sucesor del sistema de archivos HAMMER, ahora se considera estable, se utiliza de forma predeterminada y es el foco de un mayor desarrollo. Los planes para su desarrollo se compartieron inicialmente en 2012. [29] En 2017, Dillon anunció que la próxima versión de DragonFly BSD (5.0.0) incluiría una versión utilizable, aunque todavía experimental, de HAMMER2 y características descritas del diseño. [30] Con el lanzamiento posterior a la 5.0.0, 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 dinámicamente nodos de dispositivos, permite acceder a los dispositivos mediante rutas de conexión, reconoce las unidades por números de serie y elimina la necesidad de una /dev
jerarquía de sistema de archivos precargada . 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 vinculado dinámicamente después de la carga, lo que permite que las instancias futuras del programa se inicien mucho más rápido de lo que lo haría de otra manera. Esto reemplaza la capacidad de preenlace en la que se estaba trabajando anteriormente en la historia del proyecto, ya que el soporte residente es mucho más eficiente. Los programas grandes como los que se encuentran en KDE Software Compilation con muchas bibliotecas compartidas se beneficiarán al máximo de este soporte. [32]
Desarrollo y distribución
Al igual que con FreeBSD y OpenBSD , los desarrolladores de DragonFly BSD están reemplazando lentamente el código C de estilo prototipo previo a la función con equivalentes ANSI más modernos . Al igual que en otros sistemas operativos, la versión de DragonFly de GNU Compiler Collection tiene una mejora llamada Stack-Smashing Protector (ProPolice) habilitada de forma predeterminada, que proporciona una protección adicional contra ataques basados en desbordamiento de búfer . Al 23 de julio de 2005[actualizar], el kernel ya no está construido con esta protección por defecto. [32]
Al ser un derivado de FreeBSD, DragonFly ha heredado un sistema de compilación integrado fácil de usar que puede reconstruir todo el sistema base desde la fuente con solo unos pocos comandos. Los desarrolladores de DragonFly utilizan el sistema de control de versiones de 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 solo árbol de fuentes, debido a una base de desarrolladores más pequeña. [6]
Al igual que los otros 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 octubre de 2004[actualizar], un kernel de depuración, que hace que los informes de errores sean más útiles para rastrear problemas relacionados con el kernel, se instala de forma predeterminada, a expensas de una cantidad relativamente pequeña de espacio en disco. Cuando se instala un nuevo kernel, la copia de seguridad del kernel anterior y sus módulos se eliminan de sus símbolos de depuración para minimizar aún más el uso de espacio en disco.
Medios de distribución
El sistema operativo se distribuye como un Live CD y Live USB ( versión completa de X11 disponible) que se inicia en 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 de esto 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. Las instantáneas diarias están disponibles en el sitio principal para aquellos que desean instalar las versiones más recientes de DragonFly sin compilar desde la fuente.
Al igual que los otros BSD gratuitos y de código abierto, DragonFly se distribuye según los términos de la versión moderna de la licencia BSD .
Historial de versiones
Versión | Fecha [33] | Cambios |
---|---|---|
6.0 | 10 de mayo de 2021 |
|
5.8 | 3 marzo 2020 | |
5,6 | 17 de junio de 2019 |
|
5.4 | 3 de diciembre de 2018 |
|
5.2 | 10 de abril de 2018 |
|
5,0 | 16 de octubre de 2017 |
|
4.8 | 27 de marzo de 2017 |
|
4.6 | 2 de agosto de 2016 |
|
4.4 | 7 de diciembre de 2015 |
|
4.2 | 29 de junio de 2015 |
|
4.0 | 25 de noviembre de 2014 |
|
3.8 | 4 de junio de 2014 |
|
3.6 | 25 de noviembre de 2013 |
|
3.4 | 29 de abril de 2013 |
|
3.2 | 2 de noviembre de 2012 |
|
3,0 | 22 de febrero de 2012 |
|
2.10 | 26 de abril de 2011 |
|
2.8 | 30 de octubre de 2010 |
|
2.6 | 6 de abril de 2010 |
|
2.4 | 16 de septiembre de 2009 |
|
2.2 | 17 de febrero de 2009 |
|
2.0 | 20 de julio de 2008 |
|
1.12 | 26 de febrero de 2008 |
|
1,10 | 6 de agosto de 2007 |
|
1.8 | 30 de enero de 2007 |
|
1,6 | 24 de julio de 2006 |
|
1.4 | 7 de enero de 2006 |
|
1.2 | 8 de abril de 2005 |
|
1.0 | 12 de julio de 2004 |
|
Ver también
- Comparación de sistemas operativos BSD
- Comparación de sistemas operativos de código abierto
- Comparación de los núcleos del sistema operativo
Referencias
- ^ "DragonFly BSD 6.0" . Libélula BSD . Consultado el 10 de mayo de 2021 .
- ^ "DragonFly BSD License" , DragonFly BSD , consultado el 17 de enero de 2015
- ^ Dillon, Matthew (16 de julio de 2003), "Announcing DragonFly BSD!" , freebsd-current mailing list , consultado el 26 de julio de 2007
- ^ Lehey, Greg (2001), Improving the FreeBSD SMP deployment (PDF) , USENIX , consultado el 22 de febrero de 2012
- ^ a b Kerner, Sean Michael (10 de enero de 2006), "New DragonFly Released For BSD Users" , InternetNews , consultado el 20 de noviembre de 2011
- ^ a b c d e f Biancuzzi, Federico (8 de julio de 2004), "Behind DragonFly BSD" , O'Reilly Media , consultado el 20 de noviembre de 2011
- ^ Loli-Queru, Eugenia (13 de marzo de 2004), "Entrevista con Matthew Dillon de DragonFly BSD" , OSNews , consultado el 22 de febrero de 2012
- ^ a b c d e f Chisnall, David (15 de junio de 2007), "DragonFly BSD: UNIX for Clusters?" , InformIT , consultado el 22 de noviembre de 2011
- ^ Dillon, Matthew (22 de agosto de 2006), "Re: ¿Cuánto de microkernel?" , lista de correo del kernel , consultado el 14 de septiembre de 2011
- ^ Hsu, Jeffery M. (13 de marzo de 2004). El sistema operativo DragonFly BSD (PDF) . AsiaBSDCon 2004 . Taipei, Taiwán . Consultado el 20 de noviembre de 2011 .
- ^ a b c Andrews, Jeremy (6 de agosto de 2007), "Entrevista: Matthew Dillon" , KernelTrap , archivado desde el original el 15 de mayo de 2011
- ^ "DragonFly BSD MP Performance Significantly Improved" , OSNews , 16 de noviembre de 2011 , consultado el 19 de noviembre de 2011
- ^ a b Luciani, Robert (24 de mayo de 2009), subprocesamiento M: N en DragonflyBSD (PDF) , BSDCon, archivado desde el original (PDF) el 23 de diciembre de 2010
- ^ Sherrill, Justin (11 de enero de 2004), Ya está pagando , consultado el 20 de noviembre de 2011
- ^ Pistritto, Joe; Dillon, Matthew; Sherrill, Justin C .; et al. (24 de abril de 2004), "Serializing token" , lista de correo del kernel , archivado desde el original el 15 de abril de 2013 , consultado el 20 de marzo de 2012
- ^ 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
- ^ Dillon, Matthew (23 de abril de 2009), "New libc malloc commit" , lista de correo del kernel , consultado el 8 de agosto de 2011
- ^ a b c d Vervloesem, Koen (21 de abril de 2010), "DragonFly BSD 2.6: hacia un sistema operativo de agrupación en clústeres libre" , LWN.net , consultado el 19 de noviembre de 2011
- ^ Economopoulos, Aggelos (16 de abril de 2007), "A peek at the DragonFly Virtual Kernel" , LWN.net (parte 1) , consultado el 8 de diciembre de 2011
- ^ Economopoulos, Aggelos (16 de abril de 2007), "A peek at the DragonFly Virtual Kernel" , LWN.net (parte 2) , consultado el 8 de diciembre de 2011
- ^ "HowTo DPorts" , DragonFly BSD , consultado el 2 de diciembre de 2013
- ^ Weinem, Mark (2007). "10 años de pkgsrc" . NetBSD . Joerg Sonnenberger sobre pkgsrc en DragonFly BSD y sus proyectos de desarrollo pkgsrc . Consultado el 22 de noviembre de 2011 .
- ^ Sherrill, Justin (30 de septiembre de 2013), "Why dports?" , DragonFly BSD Digest , consultado el 2 de diciembre de 2011
- ^ Sherrill, Justin (29 de septiembre de 2013), "¿Algún paquete nuevo?" , lista de correo de usuarios , consultado el 2 de diciembre de 2013
- ^ Buschmann, Jonathan (14 de marzo de 2007), "First Patch to get CARP on Dfly" , lista de correo del kernel , consultado el 20 de noviembre de 2011
- ^ "CARP (4) manual page" , DragonFly On-Line Manual Pages , consultado el 20 de noviembre de 2011
- ^ 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
- ^ Larabel, Michael (7 de enero de 2011), "¿Puede el HAMMER de DragonFlyBSD competir con Btrfs, ZFS?" , Phoronix , consultado el 20 de noviembre de 2011 ,
HAMMER parece ser un sistema de archivos BSD muy interesante. Aunque no es tan rápido como el sistema de archivos ZFS en BSD, también es un sistema de archivos original para el proyecto DragonFlyBSD en lugar de ser un puerto 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.
- ^ Dillon, Matthew (8 de febrero de 2012), "DESIGN document for HAMMER2 (actualización del 08 de febrero de 2012)" , usuarios , consultado el 22 de febrero de 2012
- ^ 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
- ^ a b Mr (7 de enero de 2010), "DragonFlyBSD with Matthew Dillon" , bsdtalk , archivado desde el original ( ogg ) el 25 de abril de 2012 , consultado el 20 de noviembre de 2011
- ^ a b "DragonFly BSD diary" , DragonFly BSD , 7 de enero de 2006 , consultado el 19 de noviembre de 2011
- ^ "DragonFly: Releases" , DragonFly BSD , consultado el 19 de junio de 2014
- ^ Tigeot, Francois (31 de julio de 2007), "KMS + i915 support now in -master" , lista de correo de usuarios , consultado el 2 de diciembre de 2013
- ^ 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 " " .
- ^ a b Kerner, Sean Michael (25 de julio de 2006), "DragonFly BSD 1.6 Cuts the Cord" , InternetNews , consultado el 20 de noviembre de 2011
- ^ Townsend, Trent (18 de enero de 2006), "A Quick Review of DragonFly BSD 1.4" , OSNews , consultado el 16 de noviembre de 2011
enlaces externos
- Página web oficial