Biblioteca informàtica
Aquest article o secció no cita les fonts o necessita més referències per verificabilitat. Us animem a millorar-lo afegint referències a fonts fiables i independents. Tota informació no verificable pot ser posada en dubte o eliminada.{{subst:AvísFR|Biblioteca informàtica}}--~~~~ |
libvorbisfile.so per reproduir un fitxer Ogg Vorbis.Dins l'entorn de ciències de la computació, una Biblioteca[1] (de l'anglès Library) és un conjunt de subprogrames utilitzats per desenvolupar programari. Les llibreries contenen codi i dades, que proporcionen serveis a programes independents, és a dir, passen a formar part d'aquests. Això permet que el codi i les dades es comparteixin i es puguin modificar de forma modular. Alguns programes executables poden ser alhora programes independents i llibreries, però la majoria d'aquestes no són executables. Executables i llibreries fan referències (trucades enllaços) entre si a través d'un procés conegut com enllaç , que generalment és realitzat per un programari anomenat enllaçador.
La majoria dels sistemes operatius moderns proporcionen llibreries que implementen la majoria dels serveis del sistema. D'aquesta manera, aquests serveis es converteixen en una " matèria primera " que qualsevol aplicació moderna espera que el sistema operatiu ofereixi. Com a tal, la major part del codi utilitzat per les aplicacions modernes s'ofereix en aquestes llibreries.
Taula de continguts |
Nota terminològica[modifica]
Habitualment es fa servir el terme llibreria per referir-se a una llibreria, per la similitud amb l'original anglès library. Tots dos termes, llibreria i biblioteca, són correctes segons les definicions (llibreria,[2] biblioteca [3]) de la Enciclopèdia catalana, encara que en termes formals, l'accepció correcta és biblioteca, perquè és la traducció correcta de library, mentre que el terme anglès per llibreria és Bookstore o book shop (literalment: botiga de llibres), o bé Bookshelf (prestatgeria o moble per guardar llibres, llibreria o llibreter). També és habitual referir-s'hi amb el terme d'origen anglosaxó toolkit (conjunt, equip, maletí, caixa, estoig, joc (kit) d'eines).
Així, tot i que el terme llibreria s'hagi difós en àmbits informals, no és estrictament correcte, en el pitjor dels casos s'hauria d'utilitzar el terme llibreter.
Història[modifica]
Els primers conceptes de programació similars a les llibreries intentaven separar les definicions de dada s de la implementació del programa. El concepte COMPOOL (Communication Pool) va ser popularitzat per Jovial el 1959, encara que va prendre la idea prestada del programari dels grans sistemes SAGE. Seguint els principis de les ciències de la computació d '" separació de problemes " (aïllar problemes petits fàcils d'abordar) i " ocultació d'informació ", "el propòsit del COMPOOL és permetre l'intercanvi de dades del sistema entre diversos programes, proporcionant una descripció centralitzada dels mateixos "(Wexelblat 1981:369).
COBOL va incloure un " primitiu sistema de llibreries " l'any 1959 (Wexelblat 1981:274), però Jean Sammet les descriure retrospectivament com " recursos insuficients de llibreria " (Wexelblat 1981:258).
Una altra de les grans contribucions al concepte modern de llibreria va ser la innovació de subprograma de FORTRAN. Aquests poden ser compilats amb independència els uns dels altres, el compilador no té un enllaçador, de manera que la revisió de tipus entre els subprogrames resulta impossible (Wilson et. Al 1988:126).
Finalment, s'ha de parlar de la influència que Simula 67 va tenir en el concepte de 'llibreria'. Simula és el primer llenguatge de programació orientat a objectes, i els seus classes són gairebé idèntiques que el concepte actual que s'utilitza en Java, C++ i C #. El concepte de classe de Simula va ser també l'origen del " paquet " a Ada i el " mòdul " de Modula-2 (Wilson et. Al 1988: 52). Tot i haver estat desenvolupat en 1965, les classes de Simula podien ser incloses en fitxers de llibreria i afegides en temps de compilació (Wexelblat 1981:716).
Tipus[modifica]
Llibreries estàtiques[modifica]
Històricament, les llibreries només podien ser estàtiques. Una llibreria estàtica, també conegut com fitxer , consisteix en un conjunt de rutines que es copien en una aplicació pel compilador o el enllaçador, produint fitxers amb codi objecte i un fitxer executable independent. Aquest procés, i el fitxer executable, es coneix com una construcció estàtica de l'aplicació objectiu. La direcció real, les referències per a salts i altres crides a rutines s'emmagatzemen en una direcció relativa o simbòlica, que no pot resoldre fins que tot el codi i les llibreries són assignades a adreces estàtiques finals.
El enllaçador resol totes les adreces no resoltes convertint-les en direccions fixes o relocalitzar (des d'una base comuna) carregant tot el codi i les llibreries en posicions de memòria en temps d'execució. Aquest procés de enllaçat pot durar fins i tot més temps que el procés de compilació, i ha de ser realitzat cada vegada que algun dels mòduls és recompilar. La majoria dels llenguatges compilats tenen llibreria estàndard (per exemple, la llibreria estàndard de C), però els programadors també poden crear les seves pròpies llibreries personalitzades. Els compiladors comercials proporcionen tant les llibreries estàndard com les personalitzades.
Un enllaçador poden treballar sobre tipus específics de fitxers objecte, i per tant requereix tipus específics (compatibles) de llibreries. Els fitxers objecte recopilats en una llibreria poden distribuir i utilitzar fàcilment. Un client, ja sigui un programa o una llibreria de subrutina s, accedeix a una llibreria objecte referenciant només pel seu nom. El procés de enllaçat resol les referències buscant a les llibreries de l'ordre donat. En general, no es considera un error si un nom pot trobar-se diverses vegades en un determinat conjunt de les llibreries.
Llibreries dinàmiques[modifica]
Enllaç dinàmic significa que les subrutines d'una llibreria són carregades en un programa en temps d'execució, en lloc de ser enllaçades a temps de compilació, i es mantenen com fitxers independents separats del fitxer executable del programa principal. El enllaçador realitza una mínima quantitat de treball en temps de compilació, enregistra que rutines de la llibreria necessita el programa i l'índex de noms o números de les rutines a la llibreria. La major part de la tasca de enllaçat es realitza en el moment en que l'aplicació es carrega (temps de càrrega o loadtime) o durant l'execució (temps d'execució o runtime). El necessari codi enllaçat, cridat pel carregador, és de fet part del sistema operatiu subjacent. En el moment adequat el carregador localitza les llibreries en el disc i afegeix les dades rellevants d'aquestes en l'espai de memòria del procés.
Alguns sistemes operatius només poden enllaçar una llibreria en temps de càrrega, abans que el procés comenci la seva execució, altres són capaços d'esperar fins després que el procés hagi començat a executar i enllaçar la llibreria només quan efectivament es fa referència a ella (és a dir, en temps d'execució). Això últim s'anomena "retard de càrrega". En qualsevol cas, aquesta llibreria és una llibreria enllaçada dinàmicament.
L'enllaç dinàmic, per la seva naturalesa, té tan sols les limitacions establertes per les llicències de programari.
Els connectors són un ús comú de les llibreries enllaçades dinàmicament, que són especialment útils quan unes llibreries poden ser substituïdes per altres amb una interfície similar, però diferent funcionalitat. Es pot dir que un programari té una "arquitectura de plugin" si utilitzeu llibreries amb una funcionalitat bàsica amb la intenció que puguin ser substituïdes. No obstant això, l'ús de les llibreries enllaçades dinàmicament en l'arquitectura d'una aplicació no vol dir necessàriament que puguin ser substituïdes.
El enllaç dinàmic es va desenvolupar originalment en els sistemes operatius Multics a partir de 1964. Es tractava d'una característica del MTS (Michigan Terminal System), construït a finals dels 60.[4] En Microsoft Windows, les llibreries enllaçades dinàmicament s'anomenen DLL (dynamic-link library).
Relocalització[modifica]
Un dels problemes que el carregador ha de gestionar és que la localització real de les dades de la llibreria no es pot conèixer fins que l'executable i totes les llibreries dinàmiques que s'han enllaçat han estat carregades en memòria. Això és degut a que les localitzacions en memòria depenen de quines llibreries dinàmiques s'han carregat. No és possible dependre de la direcció absoluta de les dades en el programa, ni fins i tot a la llibreria, ja que podrien haver cap conflicte de les diferents llibreries: si dues d'elles utilitzessin les mateixes direccions o els seus adreces se solaparan, seria impossible utilitzar totes dues al mateix programa.
No obstant això, en la pràctica, en molts dels sistemes les llibreries no canvien freqüentment. Per tant, és possible calcular una adreça de càrrega probable per a cada llibreria compartida en el sistema abans que sigui utilitzada, i emmagatzemar aquesta informació en llibreries i executables. Si cada llibreria que és carregada és tractada així, llavors cadascuna d'elles serà carregada en direccions predeterminades, el que accelera el procés d'enllaç dinàmic. Aquesta optimització es coneix com Prebinding en Mac OS X i Prelinking a Linux. Els desavantatges d'aquesta tècnica són el temps requerit de precàlcul de les direccions cada vegada que les llibreries compartides canvien, la incapacitat d'utilitzar tècniques com la aleatorització dels espais d'adreces, i el consum d'espai virtual d'adreces (un problema que queda mitigat per l'ús d'arquitectures de 64 bits, si més no en l'actualitat).
Un antic mètode era examinar el programa en temps de càrrega. Una vegada que totes les llibreries fossin carregades, es reemplacen totes les referències a dades a les llibreries, amb punters a localitats de memòria apropiats. Al Windows 3.1 (i alguns sistemes encastats com les calculadores Texas Instruments), les referències eren manejades com llistes lligades, permetent la fàcil enumeració i reemplaçament. Ara, la majoria de les llibreries dinàmiques lliguen una taula de símbols amb adreces en blanc dins del programa en temps de compilació. Totes les referències a codi o dades a la llibreria passen a través d'aquesta taula. En temps de càrrega, la taula és modificada amb la direcció de les dades/codi pel linker. Aquest procés és lent i afecta significativament la velocitat dels programes que diuen contínuament a altres programes, tal com alguns scripts de shell.
La llibreria conté una taula de salts de tots els mètodes que conté, anomenats punts d'entrada. Les trucades dins de la llibreria "salten al llarg" de la taula, buscant la ubicació del codi en memòria, ia continuació sol·licitant. Aquestes sol·licituds suposen un sobreesforç, però el retard és habitualment tan petit que és menyspreable.
Localització de llibreries en temps d'execució[modifica]
Els enllaçadors/carregadors dinàmics tenen una funcionalitat molt àmplia. Alguns depenen de rutes explícites a les llibreries emmagatzemades en els executables. Qualsevol canvi en la nomenclatura o el disseny del sistema de fitxers farà que aquests sistemes fallin. Normalment només s'emmagatzema en el executable el nom de la llibreria (no la ruta), i el sistema operatiu el que proporciona el mecanisme per trobar la llibreria en el disc mitjançant certs algorismes.
Una de les desavantatges de l'enllaç dinàmic és que el funcionament correcte dels executables depèn d'una sèrie de llibreries emmagatzemades de forma aïllada. Si la llibreria és esborrada, moguda o reanomenada, o si una versió incompatible de DLL és copiada en una ubicació que apareix abans en la ruta de cerca, el programa no es podrà carregar. Al Windows això es coneix com DLL hell (en espanyol Infern de DLL).
Sistemes Unix[modifica]
La major part dels sistemes tipus Unix disposen d'una "ruta de cerca" que especifica els directori s del sistema de fitxers en què buscar les llibreries dinàmiques. En alguns sistemes, la ruta per defecte és especificada en un fitxer de configuració, en altres, està codificada a foc (hard coded) al carregador dinàmic. Alguns formats de fitxer executable trobareu directoris addicionals en els de buscar les llibreries d'un determinat programa. Això pot ser normalment alterat per una variable d'entorn, encara que és deshabilitat per a programes que tinguin setuid o setgid, de manera que l'usuari no pot forçar a aquest programa a executar un codi arbitrari. És aconsellable que els desenvolupadors de llibreries posin les seves llibreries dinàmiques en directoris que es troben en la ruta de cerca per defecte. Per contra, això pot fer problemàtica la instal·lació de noves llibreries, ja que fa que aquests directoris creixin molt fent complicada la seva gestió.
Llibreries remotes[modifica]
Una altra solució al problema de les llibreries és utilitzar executables completament separats (often in some lightweight form) i anomenar usant una trucada de procedència and call-los using a remote procedure call (RPC) sobre la xarxa a una altra ordinador
Vegeu també[modifica]
Referències[modifica]
- ↑ TERMCAT
- ↑ Enciclopèdia catalana. «Definició de llibreria».
- ↑ Enciclopèdia catalana. «Definició de biblioteca».
- ↑ A History of MTS. 5.