Una biblioteca compartida es una biblioteca de código ejecutable que se carga en la memoria de tal manera que múltiples ejecutables ( programas y otras bibliotecas) pueden usarla en tiempo de ejecución . [ 1 ] [ 2 ] [ 3 ]
En cambio, una biblioteca estática se copia en un ejecutable. Una biblioteca estática puede reutilizarse (una forma de compartición) en varios ejecutables, pero cada ejecutable contiene una copia del código de la biblioteca en lugar de compartir una copia en memoria con otros ejecutables. Aunque hoy en día no es así, históricamente todas las bibliotecas eran estáticas. [ 4 ] Si bien una biblioteca compartida puede tener enlace estático, no se clasifica como biblioteca estática.
A menudo, una biblioteca compartida también es una biblioteca dinámica cargada por un enlazador dinámico , lo que generalmente facilita su uso para el programador en comparación con una biblioteca de enlace estático. Una biblioteca dinámica no necesita ser accesible para múltiples ejecutables (biblioteca compartida) y una biblioteca compartida no necesita cargarse en tiempo de ejecución del usuario (biblioteca dinámica).
Compartir recuerdos
El código de la biblioteca puede ser compartido en memoria por múltiples procesos y en disco. Si se utiliza memoria virtual, los procesos ejecutarían la misma página física de RAM, asignada a sus diferentes espacios de direcciones. Esto presenta ventajas. Por ejemplo, en el sistema OpenStep , las aplicaciones solían ocupar solo unos cientos de kilobytes y se cargaban rápidamente; la mayor parte de su código se encontraba en bibliotecas que el sistema operativo ya había cargado para otros fines.
Los programas pueden compartir la RAM mediante código independiente de la posición , como en Unix , lo que da lugar a una arquitectura compleja pero flexible, o mediante direcciones virtuales comunes, como en Windows y OS/2 . Estos sistemas garantizan que el código tenga una alta probabilidad de ser compartido mediante diversos métodos, como la preasignación del espacio de direcciones y la reserva de ranuras para cada biblioteca compartida. Una tercera alternativa es un almacenamiento de un solo nivel con un único espacio de direcciones , como el utilizado por el IBM System/38 y sus sucesores. Esto permite el uso de código dependiente de la posición, donde a los programas y bibliotecas se les asigna una dirección permanente en dicho espacio de direcciones.
En algunos casos, las distintas versiones de bibliotecas compartidas pueden causar problemas, especialmente cuando bibliotecas de diferentes versiones tienen el mismo nombre de archivo y varias aplicaciones están instaladas en un sistema, cada una de las cuales requiere una versión específica. Este escenario se conoce como " infierno de DLL" , nombre derivado de los archivos DLL de Windows y OS/2 . La mayoría de los sistemas operativos modernos posteriores a 2001 cuentan con métodos de limpieza para eliminar estas situaciones o utilizan bibliotecas "privadas" específicas de cada aplicación. [ 5 ]
Ejemplos
Las siguientes tecnologías de biblioteca de uso común son compartidas y dinámicas por naturaleza.
- DLL
- Windows utiliza el formato de archivo ejecutable portátil (PE) para su tecnología de biblioteca de vínculos dinámicos (DLL).
- ENTONCES
- Solaris y otros sistemas basados en System V Release 4 , Linux y los sistemas BSD actuales utilizan el formato ejecutable y enlazable (ELF) para la tecnología de objetos compartidos (SO), a veces denominada con mayor precisión objeto compartido dinámico (DSO).
- DYLIB
- Los sistemas operativos basados en Darwin , como macOS e iOS , utilizan el formato Mach-O para los archivos .dylib .
Véase también
- Módulo de núcleo cargable : módulo de carga dinámica que extiende el núcleo de un sistema operativo en ejecución.
Referencias
- ↑ Levine, John R. (2000). "9. Bibliotecas compartidas". Enlazadores y cargadores . ISBN 1-55860-496-0.
- ↑ Guía del programador del sistema UNIX V/386 versión 3.2, vol. 1 (PDF) . 1989. pág . 8-2 . ISBN 0-13-944877-2Archivado (PDF) del original el 31/07/2025 .
- ↑ "Bibliotecas compartidas en SunOS" (PDF) . págs. 1, 3. Archivado (PDF) del original el 10 de enero de 2026.
- ↑ "Diferencia entre bibliotecas estáticas y compartidas" . GeeksforGeeks . 25/10/2018 . Consultado el 02/02/2025 .
- ↑ Anderson, Rick (11 de enero de 2000). "El fin del infierno de las DLL" . microsoft.com. Archivado del original el 5 de junio de 2001. Consultado el 15 de enero de 2012. Las
DLL privadas son DLL que se instalan con una aplicación específica y que solo utiliza esa aplicación.
Fuentes
- Levine, JR (2000). Enlazadores y cargadores . Serie de sistemas operativos. Elsevier Science. ISBN 978-1-55860-496-4. Consultado el 2 de febrero de 2025 .
Enlaces externos
- Cómo escribir bibliotecas compartidas (Archivado el 16 de junio de 2007 en Wayback Machine por Ulrich Drepper)
- Bibliotecas informáticas
- Tecnología de sistemas operativos