Diferența dintre linker și încărcător

Autor: Laura McKinney
Data Creației: 3 Aprilie 2021
Data Actualizării: 8 Mai 2024
Anonim
Diferența dintre linker și încărcător - Tehnologie
Diferența dintre linker și încărcător - Tehnologie

Conţinut


Linker și Loader sunt programele de utilitate care joacă un rol major în execuția unui program. Codul sursă al unui program trece prin compilator, asamblator, linker, încărcător în ordinea respectivă, înainte de execuție. Pe de o parte, unde agent de legătură introduce codurile obiectelor generate de asamblator și le combină pentru a genera modulul executabil. Pe de altă parte, încărcător încarcă acest modul executabil în memoria principală pentru executare. Să discutăm diferența dintre Linker și loader cu ajutorul unui grafic de comparație.

  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație

Baza pentru comparațielinkerÎncărcător
De bazăAcesta generează modulul executabil al unui program sursă.Încarcă modulul executabil în memoria principală.
IntrareEste nevoie de intrare, codul obiect generat de un asamblator.Este nevoie de modul executabil generat de un linker.
FuncţieAcesta combină toate modulele obiect ale unui cod sursă pentru a genera un modul executabil.Alocă adresele unui modul executabil din memoria principală pentru execuție.
Tip / AbordareaEditor de legături, linker dinamic.Încărcare absolută, încărcare relativă și încărcare dinamică dinamică.


Definiția Linker

Assemblerul generează codul obiect al unui program sursă și îl predă linkerului. Linkerul ia acest cod de obiect și generează cod executabil pentru program și înmânează-l în încărcător.

Programele la nivel înalt, programele au unele bibliotecile încorporate și fișiere antet. Programul sursă poate conține unele funcții ale bibliotecii a căror definiție este stocată în bibliotecile încorporate. Linkerul leagă aceste funcții cu bibliotecile încorporate. În cazul în care nu se găsesc bibliotecile încorporate, acesta informează compilatorul, iar compilatorul generează atunci eroarea.

Uneori, programele mari sunt împărțite în subprograme care se numesc module. Acum, când aceste module sunt compilate și asamblate, modulele obiect ale programului sursă sunt generate. Linkerul are responsabilitatea de a combina / conecta toate modulele obiect pentru a genera un singur fișier executabil al programului sursă. Avem două tipuri de linkere.


Editor de legături: Este un linker care generează modulul relocabil, executabil.

Linker dinamic: Definează / amână legătura unor module externe până la generarea modulului de încărcare / modul executabil. Aici, conectarea se face în timpul încărcării sau alergării.

Definiția Loader

Întrucât programul care trebuie executat în prezent trebuie să se afle în memoria principală a computerului. Este responsabilitatea încărcător, un program dintr-un sistem de operare, pentru a încărca fișierul / modulul executabil al unui program, generat de linker, în memoria principală pentru execuție. Alocă spațiul de memorie pentru modulul executabil din memoria principală.

Există trei tipuri de abordări de încărcare:

  • Încărcare absolută
  • Se încarcă relocabil
  • Încărcare dinamică dinamică

Încărcare absolută: Această abordare încarcă fișierul executabil al unui program într-un aceeași locație principală a memoriei de fiecare data. Dar are unele dezavantaje ca un programator trebuie să fie conștient de strategia de atribuire pentru încărcarea modulelor în memoria principală. În cazul în care programul trebuie modificat, implicând o oarecare inserție și ștergere în program, atunci toate adresele programului trebuie modificate.

Se încarcă: În această abordare, compilatorul sau asamblatorul o fac nu produce adresa de memorie principală reală. Produce adresele relative.

Încărcare dinamică dinamică: În această abordare, adresa absolută pentru un program este generată atunci când o instrucțiune a unui modul executabil este de fapt executată. Este foarte flexibil, modulul încărcabil / modulul executabil poate fi încărcat în orice regiune a memoriei principale. Programul de execuție poate fi întrerupt între ele și poate fi schimbat pe disc și înapoi la memoria principală de această dată la o adresă de memorie principală diferită.

  1. Diferența cheie între linker și loader este că linker-ul generează executabil întrucât, încărcătorul încărcă fișierul executabil obținut de la linker în memorie principală pentru execuție.
  2. Linkerul introduce modul obiect a unui program generat de asamblator. Cu toate acestea, încărcătorul introduce modul executabil generate de linker.
  3. Linkerul combină tot modulul obiect al unui program pentru a genera module executabile se leagă de asemenea funcția de bibliotecă în modulul obiect la bibliotecile încorporate a limbajului de programare la nivel înalt. Pe de altă parte, încărcător alocă spațiu unui executabil modul în memoria principală.
  4. Linkerul poate fi clasificat ca fiind editor de legături, și linker dinamic în timp ce încărcătorul poate fi clasificat ca fiind încărcător absolut, încărcător relocabil și încărcător dinamic de rulare.

Concluzie:

Linkerul ia modulele obiect ale unui program de la asamblator și le leagă pentru a genera un modul executabil al unui program. Modulul executabil este apoi încărcat de către încărcător în memoria principală pentru execuție.