Conectare

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Linking (literalmente „conexiune”), [1] în informatică , este procesul de integrare a diferitelor module la care se referă un program (care pot fi subprograme sau biblioteci ), pentru a crea o singură unitate executabilă. Linkerul (sau editorul de linkuri ) este un program care face legătura între codul obiect , adică traducerea codului sursă în limbajul mașinii și bibliotecile de limbaje necesare pentru executarea programului (API, interfață de programare a aplicației ).

În mainframele IBM, cum ar fi OS / 360, acest program este numit editor de legături . În variantele Unix , termenul de încărcător este adesea folosit ca sinonim pentru linker. Datorită acestei confuzii terminologice între procesele de compilare și de rulare , această intrare va utiliza linker pentru primul și încărcare pentru acesta din urmă.

Operațiune

Codurile obiect sunt părți ale unui program care conține atât codul mașinii, cât și informații pentru linker. Aceste informații constau în principal sub formă de definiții ale simbolurilor, care sunt de două tipuri:

  • Simbolurile definite sau exportate sunt simboluri care reprezintă acele funcții sau variabile care sunt prezente în modul (deci în codul obiectului relativ) și care sunt puse la dispoziție pentru a fi utilizate de alte module.
  • Simbolurile nedefinite sau importate reprezintă funcții care sunt numite sau variabile la care se face referire în obiectul prezent și totuși nu sunt definite intern, ci sunt definite în alte module.

Sarcina linkerului este de a rezolva legăturile către simboluri nedefinite găsind ce alt modul le definește; și apoi înlocuirea fiecărui substituent cu adresa efectivă a simbolului.

Un set de module software gata să fie utilizate de alte programe se numește „ bibliotecă ”. O bibliotecă este deci un set de module (sub formă de coduri obiect) colectate într-un singur fișier container. Linkerii pot utiliza modulele software conținute în biblioteci. Unele linkere nu includ întreaga bibliotecă în programul de ieșire, ci doar părțile care sunt necesare pentru a fi menționate de alt cod obiect sau alte biblioteci. Există biblioteci pentru diverse scopuri (exemple: interacțiune cu hardware, calcul matematic); în mod obișnuit, cele mai comune biblioteci sunt utilizate automat implicit, în timp ce cele mai specializate trebuie să fie indicate în mod explicit de către programator .

Linkerul se ocupă și de distribuirea software-ului (cod obiect) în spațiul de adrese al programului. Acest lucru poate necesita mutarea codului de la o adresă de bază la alta; aceasta este o operațiune importantă, deoarece mutarea unui segment de cod de la o adresă la alta necesită recalcularea și modificarea tuturor adreselor care indică acel cod. Deoarece compilatorul nu știe în mod normal unde (în ce adresă de memorie) va locui codul referitor la un anumit modul, compilatorul își asumă o adresă fixă ​​(de exemplu zero), care trebuie apoi modificată atunci când toate modulele sunt combinate într-un unic cod executabil. Mutarea unui segment de cod de la o adresă la alta se numește „relocare” și poate necesita recalcularea adreselor utilizate în instrucțiunile de salt absolut sau în instrucțiunile de încărcare sau salvare a datelor în memorie.

Programul executabil produs de linker poate necesita relocare suplimentară atunci când programul este încărcat în memorie (chiar înainte de a fi rulat). Acest pas nu este necesar pe computerele care au un sistem de memorie virtuală ; pe aceste computere fiecare program are propriul spațiu de adresă privat disponibil. În sistemele de memorie virtuală, toate programele utilizează aceeași adresă de bază, fără a exista conflicte între diferite programe

Conectare dinamică

Sistemele de operare moderne asigură legături dinamice , adică rezoluția simbolurilor nedefinite amânată până când programul rulează. Aceasta înseamnă că executabilul conține simboluri nedefinite și o listă de obiecte sau biblioteci care pot furniza definiția acestuia. Lansarea programului pentru a rula încarcă aceste obiecte / biblioteci și stabilește legătura finală.
Acest mod de execuție oferă două avantaje:

  • Bibliotecile utilizate pe scară largă (cum ar fi cele de sistem standard) pot fi stocate într-o singură locație și nu duplicate la fiecare cerere;
  • Dacă o bibliotecă de funcții este actualizată și înlocuită, toate programele care o utilizează dinamic beneficiază de actualizare imediat ce sunt reluate. În schimb, programele care includ astfel de funcții de legătură statică trebuie să fie supuse unui nou editor de legătură / trecere de încărcare.

Notă

  1. ^ Deși unele texte și autori în limba italiană au ales să traducă termenul, acesta din urmă este de o utilizare foarte rară.

Bibliografie

  • David William Barron, Asamblatori și încărcătoare . 1972, Elsevier.
  • CW Fraser și DR Hanson, un linker independent de mașină . Software-Practice and Experience 12, 4 (aprilie 1982).
  • IBM Corporation, Operating System 360, Linkage Editor, Program Logic Manual , 1967 [1]
  • DW Jones, Limbaj de asamblare ca cod de obiect . Practică și experiență software 13, 8 (august 1983)
  • John R. Levine : Linkere și încărcătoare , Morgan-Kauffman, ISBN 1-55860-496-0
  • Leon Presser, John R. White: Linkere și încărcătoare . ACM Computing Surveys, Volumul 4, Numărul 3, septembrie 1972, pp. 149–167 [2]
  • Norman Ramsey, Instrucțiuni privind mutarea mașinii prin curri . (1996) [3] [ link rupt ]
  • David Salomon, Asamblatori și Încărcătoare . 1993 [4]

Elemente conexe

linkuri externe

Controlul autorității LCCN (EN) sh99011681 · GND (DE) 4145562-9 · BNF (FR) cb16102823h (data)
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT