Dynamicky připojované knihovny a jejich převleky

DEFINICE Dynamicky připojovaná knihovna (DLL, Dynamic link library) představuje soubor funkcí, které jsou volány dalš


DEFINICE
Dynamicky připojovaná knihovna (DLL, Dynamic link library) představuje soubor
funkcí, které jsou volány dalšími programy. Těm poskytují nějaké služby nebo
data. Některé knihovny DLL jsou standardní součástí operačního systému Windows,
jiné se distribuují společně s aplikacemi. Ačkoli jsou samotné DLL specifikem
Windows, podobný přístup využívají i další operační systémy za příbuzné lze
označit např. sdílené objekty (Shared objects) v Linuxu.

Dynamicky připojované knihovny DLL se staly velmi populárními v polovině 90.
let minulého století. Tehdy nabídly skutečně jednoduchý mechanismus pro sdílení
programového kódu mezi aplikacemi Windows a jeho připojování za běhu. Podle
původního konceptu měly DLL dělat pro aplikace Windows totéž, o co se pro DOS
staraly tzv. programy TSR (terminate and stay resident, tedy programy, které se
po svém spuštění napevno usídlily v operační paměti a poté vykonávaly
požadované funkce např. ovladače národní klávesnice).
Protože jsou funkce DLL uloženy v samostatném souboru, mohou být modifikovány a
updatovány bez nutnosti rekompilovat daleko komplexnější programy, které je
využívají. Řadu funkcí programů tak lze vylepšovat prostou výměnou některé z
jejich DLL knihoven. Další výhodu DLL představuje fakt, že je může využívat
několik aplikací současně, což s sebou mj. přináší úsporu paměti. DLL šetří
operační paměť i tím, že se do ní nenahrávají okamžitě při spuštění aplikace,
ale teprve později až když jsou jejich funkce potřeba. Když například uživatel
spouští Microsoft Word nebo Excel, může s touto aplikací dlouho pracovat, aniž
by se nahrála DLL zajišťující podporu tisku. Jenom když se uživatel rozhodne
vytvořený dokument vytisknout a vyvolá příslušnou položku z menu, potřebná DLL
se nahraje do paměti, spustí se a po splnění svých úkolů se opět z paměti
uvolní.

Jak vznikly DLL
Koncept DLL vznikl v době, kdy se široce propagovala práce aplikací stylem
klient/server. Vývojáři tehdy potřebovali způsob, kterým by jejich aplikace
komunikovaly s dalšími programy a systémy a knihovny DLL nabízely způsob, jak
tento problém řešit. Jak ale vzrůstalo využití DLL na individuálních PC, rostl
i problém jejich kompatibility a zabezpečení.
"Tenhle přístup se výborně hodí v jednouživatelském prostředí, ale ne tam, kde
je vyžadován skutečně robustní systém," říká Frederick G. Kohun, děkan fakulty
komunikačních a informačních systémů univerzity v americkém Moonu. "Co mě děsí
ohledně DLL na klientských počítačích, je fakt, že jsou velmi snadno
napadnutelné viry. Vždy, když za běhu nahráváte do operační paměti knihovnu,
virus může jejím prostřednictvím napadnout operační systém."
Pokud jste alespoň trochu zběhlí v používání počítačů s Windows, pak už jste
možná slyšeli nebo sami používáte slovní spojení "peklo DLL". Tak se často
označuje situace, kdy je do systému nainstalována nová aplikace, která vyžaduje
specifickou DLL standardně dodávanou s Windows, ale v nějaké zastaralé verzi.
Nová aplikace tedy do systému nainstaluje starou verzi knihovny a nahradí jí
verzi novou důsledkem je situace, kdy další aplikace přestanou korektně
pracovat. Situace se stále zhoršuje s tím, jak se objevují nové a nové verze
aplikací i operačních systémů Windows.
I přes uvedené výhrady však lze konstatovat, že knihovny DLL připravily půdu
pro své sofistikovanější nástupce, označované jako softwarové komponenty.
Princip DLL má mnohé společné s principem fungování aplikací vybudovaných v
rámci modelu COM/DCOM Microsoftu, CORBA (Common Object Request Broker
Architecture), OMG a javových standardů Sunu.

DLL a komponenty
Podle Francise Beaudeta, vedoucího softwarového architekta společnosti
Macadamian Technologies, softwarové komponenty pokračují v tradici DLL v tom
smyslu, že poskytují programátorům možnost vytvořit znovu použitelné knihovny
kódu v binární formě. A stejně jako ony navíc ušetří zákazníky rekompilace celé
aplikace vždy, když je potřeba udělat změnu. Beaudet sám se specializuje na
vývoj interaktivních webových aplikací v Javě za využití Enterprise JavaBeans.
"Komponentové architektury jako DCOM nebo CORBA stavějí na konceptu DLL a
přidávají další funkcionalitu včetně podpory komunikace po síti a autentizace,"
říká Beaudet. "Dalo by se dokonce říci, že COM je pouze chytřejší a lepší
způsob, jak používat knihovny DLL." Softwaroví vývojáři tedy nyní místo DLL
spoléhají na daleko pokročilejší technologii softwarových komponent. Důvodem je
mimo jiné skutečnost, že standardy definující svět komponent již berou větší
ohled na otázky bezpečnosti. Komponenty tak mohou být nejen efektivnější než
DLL, ale také méně náchylné k napadení viry a k dalším hrozbám. Se softwarovými
komponentami navíc získáte prostředí, kde už nehrají hlavní roli knihovny DLL
umístěné na jednotlivých PC, jako tomu bylo v případě raného modelu
klient/server. Softwaroví architekti totiž vymysleli pro komponenty centrální
úložiště, kde se snadněji spravují i jsou využívány aplikacemi. "V této
souvislosti nyní můžeme rozlišit tři vrstvy aplikace: grafickou, middlewarovou
a data-warehousovou," vysvětluje Kohun. "Ta zásadní změna spočívá v tom, že DLL
už nadále nespočívají na desktopovém PC. Přesunuly se totiž na úroveň
middlewaru." "Knihovny DLL jsou nyní ukryty za vrstvou kódu, který se postará o
vyhledání, spuštění a propojení vaší aplikace s požadovanou DLL," doplňuje
Beaudet. Výsledkem je široká dostupnost znovupoužitelných komponent, sdílených
objektů a rozhraní mezi aplikacemi založenými na webových standardech. "Ale
kdesi v pozadí stojí stále ten starý dobře známý model DLL," říká Beaudet. "Ten
mechanismus sám o sobě dále funguje, stejně jako fungoval vždy."
Ve skutečnosti celý proces opravdu funguje dnes stejně jako před několika lety.
Jakmile navštívíte nějakou webovou stránku s komponentou ActiveX, váš
internetový prohlížeč si stáhne z příslušného webového serveru knihovnu DLL,
nainstaluje ji na vaše PC a napojí se na ni. "Teď se tomu říká komponenta, ale
ve skutečnosti má tahle DLL stejnou vnitřní strukturu jako dynamicky
připojované knihovny, které byly nainstalovány na vašem PC ve Windows 95 před
šesti lety," vysvětluje Beaudet. "Jen se mění způsob, jakým se k vám komponenta
dostane." Původní idea DLL se osvědčila, jen musela projít dalšími změnami tak,
aby vyhověla dnešním požadavkům. Co na tom, že v některých svých podobách už
ztrácí navenek svou původní podobu a jako nová technologie vstupuje do hry v
novém hávu a s novým názvem.

Nahrání knihovny DLL
Zavedení knihovny DLL do paměti, její využití a následné uvolnění z paměti lze
popsat v následujících šesti krocích:
1.Aplikace Windows zavolá příkaz LoadLibrary nebo LoadLibraryEx, aby se našla
požadovaná DLL.
2.Pokud příkaz v hledání uspěje, nahraje nalezenou DLL do stejného adresového
prostoru, ve kterém pracuje aplikace.*
3.Aplikace volá proceduru GetProcAddress, jejímž výsledkem je nalezení adresy
služby nebo dat, kvůli kterým je knihovna DLL volána.
4.Procedura GetProcAddress vrací nalezenou adresu aplikaci.
5.Aplikace volá službu DLL, případně využívá v ní uložená data.
6.Jakmile aplikace ukončí práci s DLL, zavolá metodu FreeLibrary nebo
FreeLibraryAndExitThread, čímž systému sdělí, že DLL již není potřebná a lze ji
odstranit z jejího adresového prostoru.
* Pokud hledání DLL neuspěje, metody LoadLibrary a LoadLibraryEx vracejí
hodnotu Null. V takovém případě může aplikace hledat nějakou alternativní DLL,
případně je uživatel vyzván k zadání korektní cesty k požadované sdílené
knihovně.









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.