Dynamický linkerDynamický linker označuje ve výpočetní technice část operačního systému (OS), která načítá (kopíruje z perzistentního úložiště do operační paměti) a kde linker propojuje (vyplňuje tabulky skoků a mění ukazatele) na funkce ve sdílených knihovnách se spustitelným programem za běhu programu. Specifický formát spustitelných souborů je jiný pro každý operační systém. Tento formát určuje rozhraní linkeru a jeho implementaci. Linkováním je často označován proces, který je prováděn během kompilace spustitelného programu. Zatím co dynamický linker je ve skutečnosti speciální zavaděč, který načte externí sdílené knihovny do adresního prostoru běžícího spustitelného programu a potom je s ním sváže. Toto je také nazýváno dynamické nebo také zpožděné linkování. ImplementaceMicrosoft WindowsDynamicky linkované knihovny, zkráceně DLL, je implementace sdílených knihoven v operačních systémech Microsoft Windows a OS/2, kterou zavedl Microsoft. Tyto knihovny lze běžně nalézt s příponou Soubory se stejným formátem jako DLL, ale s jinou příponou (a také obsahující jen windows zdroje) mohou být nazývány zdrojové DLL. Příklady těchto zdrojových DLL knihoven jsou knihovny ikon, které občas mají příponu ICL a knihovny obsahující fonty, které mají příponu FON a FOT. Unix-like systémy na ELF základuNa většině Unix-like systémech, které používají ELF formát pro spustitelné obrázky a dynamické knihovny, je většina strojového kódu, který tvoří dynamický linker, ve skutečnosti externí spustitelný soubor, který je načten jádrem operačního systému. Jádro operačního systému spustí tento kód jako první v adresním prostoru vzniklém výsledkem systémového volání exec nebo voláním Dynamický linker může být ovlivněn ke změně svého chování za běhu programu nebo během linkování programu. Příklady tohoto chování můžeme pro mnoho systémů vidět v manuálových stránkách run-time linkeru.[1][2][3][4][5] Typickou modifikací tohoto chování je použití GNU/LinuxOperační systémy založené na GNU/Linux implementují model dynamického linkeru, kde část spustitelného programu obsahuje velmi jednoduchý kus linkeru. Ten donutí systém k načtení externí knihovny do paměti. Tento kus linkeru je přidán do spustitelného programu během kompilace tohoto programu. Účel tohoto kusu linkeru je načíst skutečný dynamický linker do paměti a začít proces dynamického linkování spuštěním tohoto svého skutečného linkeru. Design operačního systému říká, že spustitelný program by měl zavést dynamický linker před spuštěním své hlavní funkce. Přesto je tento mechanismus implementován jinak. Systém ví, kde se v systému nachází dynamický linker a přiřadí ho k nově vytvořenému procesu. Kus linker kódu, který je součástí spustitelného programu se sice provede, ale linker už je dávno součástí procesu. Důvod této změny je, že formát ELF binárního souboru byl navržen pro několik na Unixu založených systémů, ne jen GNU/Linux.[8] Zdrojový kód pro GNU/Linux linker je součástí glibc projektu a je volně dostupný na stránce projektu.[9] Celý zdrojový kód je dostupný pod licencí GNU LGPL. OS X and iOSU operačního systému Darwin a u operačních systémů OS X a iOS, které jsou na něm postavené, je většina strojového kódu, který tvoří dynamický linker, ve skutečnosti externí spustitelný soubor, který je načten jádrem operačního systému. Jádro operačního systému spustí tento kód jako první v adresním prostoru vzniklém výsledkem Dynamický linker může být donucen k modifikaci svého chování, ale na rozdíl od ostatních na Unixu založených systémů jsou tyto pokyny k modifikaci brány jen jako doporučení, která mohou být (o občas jsou) ignorována dynamickým linkerem. Příklad takového chování je k vidění v Zdrojový kód k dynamickému linkeru od Apple OS X je open source a zveřejněn jako součást Darwin operačního systému. Může být k nalezení v Unix-like systémy na XCOFF základuV Unix-like operačních systémech používajících XCOFF mají dynamicky načítané sdílené knihovny příponu Dynamický linker může být ovlivněn k modifikaci svého chování během výkonu programu, nebo během linkování programu.
Typickou modifikací takového chování je použití proměnné prostředí OS/360 and successorsDynamické linkování z programů napsaných v Assembleru je v systémech 0S/360 a jeho potomcích běžně prováděno používáním LINK makro instrukce obsahující „instrukci volání nadřízeného“, která aktivuje část operačního systému, která spojí modul sdílené knihovny se spustitelným programem. Moduly sdílených knihoven se nachází v STEPLIB nebo JOBLIB specifikovaných v kontrolních kartách a přístupných pouze pro specifický spustitelný program, pro knihovnu obsaženou v LINKLIST v PARAMLIB proměnné (specifikované během spuštění systému), nebo pro „link pack area“ kam se načítají některé moduly během spuštění systému. Reference
Související články
Literatura
Externí odkazy
|