Recomandat, 2024

Alegerea Editorului

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

Linker și Loader sunt programele de utilitate care joacă un rol major în executarea 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 linkerul primește codurile obiect generate de asamblare și le combină pentru a genera modulul executabil. Pe celelalte mâini, încărcătorul încarcă acest modul executabil în memoria principală pentru a fi executat. Să discutăm diferența dintre Linker și încărcător cu ajutorul unei scheme de comparație.

Diagramă de comparație

Bazele comparațieilinkerÎ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 un modul executabil generat de un linker.
FuncţieAcesta combină toate modulele obiect ale unui cod sursă pentru a genera un modul executabil.El alocă adresele unui modul executabil în memoria principală pentru a fi executat.
Tip / AbordareaLinkage Editor, Linker dinamic.Încărcare absolută, încărcare Relocabilă și încărcare dinamică de execuție.

Definiția Linker

Asamblatorul generează codul obiect al unui program sursă și îl transferă către linker. Linker-ul ia acest cod obiect și generează codul executabil pentru program și îl preda Loader-ului.

Limba de nivel înalt, programe au unele biblioteci încorporate și fișiere antet . Programul sursă poate conține câteva funcții ale bibliotecii a căror definiție este stocată în bibliotecile încorporate. Linkerul leagă aceste funcții de bibliotecile încorporate. În cazul în care bibliotecile încorporate nu sunt găsite, aceasta informează compilatorul, iar compilatorul generează apoi eroarea.

Uneori programele mari sunt împărțite în subprogramele care sunt numite 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 de obiecte pentru a genera un singur fișier executabil al programului sursă. Avem două tipuri de link-uri.

Linkage Editor : este un linker care generează modulul transferabil, executabil.

Dynamic Linker : Îndepărtează / amână legarea unor module externe până când modulul de încărcare / modulul executabil este generat. Aici, legarea se face în timpul încărcării sau a duratei de execuție.

Definiția Loader

Deoarece programul care trebuie executat în prezent trebuie să se afle în memoria principală a computerului. Este responsabilitatea încărcătorului, un program dintr-un sistem de operare, să încarce fișierul / modulul executabil al unui program, generat de linker, în memoria principală pentru execuție. El alocă spațiul de memorie modulului executabil din memoria principală.

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

  • Încărcare absolută
  • Reluare încărcare
  • Încărcare dinamică de execuție

Încărcare absolută : această abordare încarcă fișierul executabil al unui program într-o locație aceeași memorie principală de fiecare dată. 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 inserarea și ștergerea în program, atunci toate adresele programului trebuie să fie modificate.

Reluare încărcare: în această abordare, compilatorul sau asamblatorul nu produce adresa reală a memoriei principale . Produce adresele relative.

Încărcare dinamică de execuție : în această abordare, adresa absolută pentru un program este generată atunci când se execută de fapt o instrucțiune a unui modul executabil. Este foarte flexibil, modulul încărcabil / modul 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 în memoria principală de această dată la o altă adresă de memorie principală.

Diferențe cheie între linker și încărcător

  1. Diferența cheie între linker și încărcător este că linkerul generează fișierul executabil al unui program, în timp ce încărcătorul încarcă fișierul executabil obținut de la linker în memoria principală pentru execuție .
  2. Linkerul primește modulul obiect al unui program generat de asamblare. Cu toate acestea, încărcătorul primește modulul executabil generat de linker.
  3. Linkerul combină tot modulul obiect al unui program pentru a genera module executabile, legând de asemenea funcția de bibliotecă din modulul obiect la bibliotecile încorporate ale limbajului de programare la nivel înalt. Pe celelalte mâini, încărcătorul alocă spațiu unui modul executabil din memoria principală.
  4. Linkerul poate fi clasificat ca editor de legare și linker dinamic, în timp ce încărcătorul poate fi clasificat ca încărcător absolut, încărcător detasabil și încărcător dinamic de rulare .

Concluzie:

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

Top