On Amazon.it: https://www.amazon.it/Complete-Concordances-James-Bible-Azzur/dp/B0F1V2T1GJ/


Linking - Wikipedia

Linking

Da Wikipedia, l'enciclopedia libera.

Il Linking (collegamento) è il procedimento di integrazione dei vari moduli a cui un programma fa riferimento (i quali possono essere sottoprogrammi o librerie), per creare una singola unità eseguibile. Il linker (o link editor) è un programma che prende uno o più oggetti generati dai compilatori e li assembla in un unico programma eseguibile.

Nei mainframe IBM come gli OS/360 questo programma è chiamato linkage editor.

Nelle varianti di Unix è spesso usato anche il termine loader come sinonimo di linker.
A causa di questa confusione terminologica tra il processo a compile-time e quello a run-time, questa voce userà linker per il primo e loading per il secondo)

Indice

[modifica] Funzionamento

I codici oggetto sono parti di programma contenenti sia codice macchina che informazioni per il linker. Questa informazione è costituita principalmente nella forma di definizioni di simboli, che sono di due tipi:

  • I simboli definiti o esportati sono simboli che rappresentano quelle funzioni o quelle variabili che sono presenti nel modulo (quindi nel relativo codice oggetto), e che vengono rese disponibili per essere utilizzate da parte di altri moduli.
  • I simboli non definiti né importati rappresentano funzioni che vengono chiamate, o variabili che vengono referenziate, nell'oggetto presente, e tuttavia non sono definite internamente, bensì sono definite in altri moduli.

Il lavoro del linker consiste nel risolvere i collegamenti ai simboli non definiti, trovando quale altro modulo li definisce; e quindi nel rimpiazzare ciascun segnaposto con l'effettivo indirizzo del simbolo.

Un'insieme di moduli software pronti per essere utilizzati da altri programmi viene chiamato "libreria". Una libreria è quindi un insieme di moduli (in forma di codici-oggetto) raccolti in un unico file contenitore. I linker possono utilizzare i moduli software contenuti nelle librerie. Alcuni linker non includono l'intera libreria nel programma di output, ma solo le parti che si rendono necessarie perché referenziate da altro codice oggetto o altre librerie. Esistono librerie per svariati scopi (esempi: interazione con l'hardware, calcolo matematico); tipicamente, le librerie più comuni sono utilizzate automaticamente in modo implicito, mentre quelle più specializzate devono essere indicate esplicitamente dal programmatore.

Il linker si occupa anche di distribuire il software (codice oggetto) nello spazio di indirizzi del programma. Questo può richiedere lo spostamento di codice da un certo indirizzo base ad un altro; questa è una operazione importante perché spostare un segmento di codice da un'indirizzo ad un altro richiede di ricalcolare e modificare tutti gli indirizzi che puntano a quel codice. Poiché normalmente il compilatore non sa dove (in quale indirizzo di memoria) risiederà il codice relativo a un particolare modulo, il compilatore ipotizza un indirizzo fisso (ad esempio zero), che dovrà poi essere modificato nel momento in cui tutti i moduli vengono combinati in un codice eseguibile unico. Spostare un segmento di codice da un'indirizzo ad un altro viene chiamato "rilocazione" e puo' richiedere il ricalcolo degli indirizzi utilizzati nelle istruzioni di salto assoluto o nelle istruzioni di caricamento o salvataggio di dato in memoria.

Il programma eseguibile prodotto dal linker potrebbe richiedere un'ulteriore rilocazione quando il programma viene caricato in memoria (appena prima delle sua esecuzione). Questa operazione non è necessaria nei computer che dispongono di un sistema di memoria virtuale; in questi computer ogni programma ha a disposizione un proprio spazio di indirizzamento privato. Nei sistemi a memoria virtuale tutti i programmi utilizzano lo stesso indirizzo base senza che ci siano conflitti tra programmi diversi

[modifica] Collegamento dinamico (Dynamic linking)

I sistemi operativi moderni prevedono il dynamic linking, ossia la risoluzione di simboli non definiti rimandata fino a che il programma non è in esecuzione. Questo significa che l'eseguibile contiene simboli non definiti e una lista degli oggetti o librerie che ne possono fornire la definizione. Lanciando il programma per l'esecuzione vengono caricati questi oggetti / librerie e si stabilisce il collegamento finale.
Questa modalità di esecuzione offre due vantaggi:

  • Le librerie molto usate (come ad esempio quelle standard di sistema) possono essere memorizzate in una sola locazione, e non duplicate ad ogni richiesta;
  • Se viene aggiornata e rimpiazzata una libreria di funzioni, tutti i programmi che la usano dinamicamente beneficiano dell'aggiornamento appena vengono rieseguiti. Al contrario, i programmi che includono tali funzioni con collegamento statico devono essere sottoposti ad un nuovo passaggio di linkage editor / loader.


[modifica] Bibliografia

  • David William Barron, Assemblers and Loaders. 1972, Elsevier.
  • C. W. Fraser and D. R. Hanson, A Machine Independent Linker. Software-Practice and Experience 12, 4 (April 1982).
  • IBM Corporation, Operating System 360, Linkage Editor, Program Logic Manual, 1967 [1]
  • D.W. Jones, Assembly Language as Object Code. Software-Practice and Experience 13, 8 (August 1983)
  • John R. Levine: Linkers and Loaders, Morgan-Kauffman, ISBN 1-55860-496-0
  • Leon Presser, John R. White: Linkers and Loaders. ACM Computing Surveys, Volume 4, Number 3, September 1972, pp.149-167 [2]
  • Norman Ramsey, Relocating Machine Instructions by Currying. (1996) [3]
  • David Salomon, Assemblers and Loaders. 1993 [4]


[modifica] Collegamenti esterni


[modifica] Voci correlate

Static Wikipedia March 2008 on valeriodistefano.com

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   cv   cy   da   en   eo   es   et   eu   fa   ff   fi   fiu_vro   fj   fo   fr   frp   fur   fy   ga   gd   gl   glk   gn   got   gu   gv   ha   hak   haw   he   hi   ho   hr   hsb   ht   hu   hy   hz   ia   id   ie   ig   ii   ik   ilo   io   is   it   iu   ja   jbo   jv   ka   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   mg   mh   mi   mk   ml   mn   mo   mr   ms   mt   mus   my   mzn   na   nah   nap   nds   nds_nl   ne   new   ng   nl   nn   nov  

Static Wikipedia (no images)

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 -

Static Wikipedia 2007 (no images)

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 -

Static Wikipedia 2006 (no images)

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 - 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

Static Wikipedia February 2008 (no images)

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