ebooksgratis.com

See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Linker - Wikipedie, otevřená encyklopedie

Linker

Z Wikipedie, otevřené encyklopedie

Popis funkce sestavovacího programu
Popis funkce sestavovacího programu

V informatice se jako linker (česky sestavovací program) označuje program, který jeden nebo více objektových souborů vygenerovaných překladačem spojí do jediného spustitelného souboru.

[editovat] Funkce linkeru

Objektové soubory jsou moduly programu obsahující strojový kód a informace pro linker. Tyto informace se v nich vyskytují ve formě dvou různých typů symbolických definic:

  • Definované nebo exportované symboly jsou funkce nebo proměnné, které jsou zastoupeny v modulu reprezentovaném objektovým souborem. Tyto symboly by měly být dostupné ostatním modulům.
  • Nedefinované nebo importované symboly jsou vnitřně nedefinované funkce nebo proměnné, které jsou volány, nebo na které se objekt odkazuje.

Ve zkratce, účelem linkeru je řešení referencí nedefinovaných symbolů vyhledáváním symbolů v ostatních objektových souborech, které je definují. Nedefinovaný symbol je nahrazen adresou symbolu, který jej definuje.

Linker často pracuje s objekty, které jsou uspořádány ve větších celcích, tzv. knihovnách. Některé linkery neobsahují na výstupu celou knihovnu, ale obsahují pouze její symboly, na které je odkazováno z objektových souborů případně jiných knihoven. Existuje celá řada knihoven majících různý účel. Jedna nebo více systémových knihoven bývají obvykle připojovány v linkovacím procesu standardně.

Linker se také stará o umisťování objektů v adresním prostoru programu. Používá k tomu relokační kód, který dokáže přesunout spodní mez adresního prostoru (referenční adresa) na jiný základ. Jelikož překladač obvykle neví, kam bude objekt v paměti umístěn, je objektu obvykle přidělena nejnižší možná spodní adresa a to nula. Relokační strojový kód může obsahovat příkaz pro přesměrování absolutních skoků, načtení a uložení.

Výstup spustitelný linkerem může před tím, než je program zaveden do paměti (těsně před spuštěním) vyžadovat ještě jeden průchod relokačním cyklem. U hardwaru umožňujícím využití virtuální paměti je tento cyklus vypuštěn, neboť každému programu je přidělen vlastní adresní prostor tak, že nemůže dojít ke konfliktu ačkoliv všechny programy budou načteny se stejnou referenční adresou.

[editovat] Sdílené knihovny

Moderní prostředí operačních systémů umožňuje tzv. dynamické sestavování, řešící některé nespecifikované symboly až po spuštění programu, z čehož vyplývá, že spustitelný soubor stále obsahuje nespecifikované symboly a seznam objektů a knihoven obsahujících jejich definice. Tyto objekty a knihovny se načtou až při spuštění programu, kdy se provede konečné sestavení.

Tento přístup má dvě výhody:

  • Často používané knihovny (např. Standardní systémové knihovny) nemusí být obsaženy v každém adresním prostoru každého programu zvlášť, ale pouze jednou, přičemž programy je mohou sdílet.
  • Pokud je chybně fungující knihovna nahrazena, všechny programy, které k ní dynamicky přistupují mohou po svém restartu z této změny těžit. Programy, které se na funkci obsaženou v knihovně odkazují staticky musí být nejprve přelinkovány.

[editovat] Relaxace

Protože překladač nemá žádné informace o rozložení objektů v konečném výstupu, nemůže využít zkrácené nebo účinější instrukce, které vyžadují adresy jiných objektů. Například skoková instrukce může být vyjádřena absolutní adresou nebo offsetem vztahujícím se k momentální pozici, přičemž hodnota offsetu může mít v závislosti na vzdálenosti od cíle různou délku. Generováním nejkonzervativnějších instrukcí (obvykle jsou to ty největší relativní či absolutní varianty, to závisí na platformě) a přidáním oddychových nápověd, je možné během konečného sestavování tyto nahradit kratšími a efektivnějšími instrukcemi. Tento krok je možné provést až po té, co byl celý kód přečten a byly stanoveny dočasné adresy. Proces relaxace pak provede přeadresování, což umožní celkové odlehčení programu. Nahrazené posloupnosti instrukcí jsou kratší, což tomuto procesu umožňuje vždy počítat s nejoptimálnějším řešením pevného uspořádání objektů. Pokud tomu tak není, dojde ke konfliktu, a linker musí zvážit její výhody či další možnosti.


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -