Zalecane, 2019

Wybór Redakcji

Różnica między łącznikiem a programem ładującym

Linker and Loader to programy użytkowe, które odgrywają ważną rolę w realizacji programu. Kod źródłowy programu przechodzi przez kompilator, asembler, linker, loader w odpowiedniej kolejności, przed wykonaniem. Z jednej strony, gdy linker pobiera kody obiektów generowane przez asembler i łączy je w celu wygenerowania modułu wykonywalnego. Z drugiej strony program ładujący ładuje ten moduł wykonywalny do pamięci głównej w celu wykonania. Omówmy różnicę między Linkerem a programem ładującym za pomocą tabeli porównawczej.

Wykres porównania

Podstawa do porównaniaLinkerŁadowarka
PodstawowyGeneruje moduł wykonywalny programu źródłowego.Ładuje moduł wykonywalny do pamięci głównej.
WkładBierze jako dane wejściowe, kod obiektowy generowany przez asembler.Wymaga modułu wykonywalnego generowanego przez linker.
Funkcjonowa棹czy on wszystkie moduły obiektowe kodu źródłowego w celu wygenerowania modułu wykonywalnego.Przydziela adresy do modułu wykonywalnego w pamięci głównej w celu wykonania.
Typ / podejścieEdytor linków, dynamiczny linker.Ładowanie bezwzględne, ładowanie relokowalne i dynamiczne ładowanie podczas pracy.

Definicja Linker

Asembler generuje kod obiektowy programu źródłowego i przekazuje go do łącznika. Łącznik pobiera ten kod obiektowy i generuje kod wykonywalny programu i przekazuje go do programu ładującego.

W języku wysokiego poziomu programy mają wbudowane biblioteki i pliki nagłówkowe . Program źródłowy może zawierać pewne funkcje biblioteczne, których definicja jest przechowywana we wbudowanych bibliotekach. Łącznik łączy te funkcje z wbudowanymi bibliotekami. W przypadku, gdy wbudowane biblioteki nie zostaną znalezione, informuje o tym kompilator, a następnie kompilator generuje błąd.

Czasami duże programy są podzielone na podprogramy, które nazywane są modułami . Teraz, gdy moduły te są kompilowane i montowane, generowane są moduły obiektowe programu źródłowego. Linker jest odpowiedzialny za łączenie / łączenie wszystkich modułów obiektów w celu wygenerowania pojedynczego pliku wykonywalnego programu źródłowego. Mamy dwa rodzaje linkerów.

Linkage Editor : Jest to linker, który generuje relokowalny, wykonywalny moduł.

Dynamiczny Linker : Odkłada / odracza połączenie niektórych modułów zewnętrznych do momentu wygenerowania modułu ładującego / modułu wykonywalnego. W tym przypadku łączenie odbywa się podczas ładowania lub uruchamiania.

Definicja programu ładującego

Ponieważ program, który musi zostać wykonany, musi znajdować się w głównej pamięci komputera. Obowiązkiem programu ładującego, programu w systemie operacyjnym, jest załadowanie pliku wykonywalnego / modułu programu generowanego przez łącznik do pamięci głównej w celu wykonania. Przydziela przestrzeń pamięci do modułu wykonywalnego w pamięci głównej.

Istnieją trzy rodzaje metod ładowania:

  • Ładowanie bezwzględne
  • Relokowane ładowanie
  • Dynamiczne ładowanie podczas pracy

Ładowanie bezwzględne : to podejście ładuje plik wykonywalny programu do tej samej głównej lokalizacji pamięci za każdym razem. Ma jednak pewne wady, takie jak programista musi znać strategię przypisania do ładowania modułów do pamięci głównej. W przypadku, gdy program ma zostać zmodyfikowany z powodu wstawienia i usunięcia w programie, wówczas wszystkie adresy programu muszą zostać zmienione.

Relokowalne ładowanie: w tym podejściu kompilator lub asembler nie generuje faktycznego adresu głównej pamięci . Tworzy względne adresy.

Dynamiczne ładowanie w czasie rzeczywistym : W tym podejściu adres bezwzględny dla programu jest generowany, gdy faktycznie wykonywana jest instrukcja modułu wykonywalnego. Jest bardzo elastyczny, ładowalny moduł / wykonywalny moduł może być ładowany do dowolnego obszaru pamięci głównej . Program wykonujący może zostać przerwany pomiędzy i może zostać zamieniony na dysk i powrócić do głównej pamięci tym razem przy innym głównym adresie pamięci.

Kluczowe różnice między Linkerem i Loader

  1. Kluczową różnicą między łącznikiem a programem ładującym jest to, że linker generuje plik wykonywalny programu, podczas gdy program ładujący ładuje plik wykonywalny pobrany z łącznika do pamięci głównej w celu wykonania .
  2. Łącznik pobiera moduł obiektowy programu generowanego przez asembler. Jednak program ładujący pobiera moduł wykonywalny generowany przez linker.
  3. Łącznik łączy w całość moduł obiektowy programu do generowania modułów wykonywalnych, a także łączy funkcję biblioteczną w module obiektowym z wbudowanymi bibliotekami języka programowania wysokiego poziomu. Z drugiej strony program ładujący przydziela miejsce do modułu wykonywalnego w pamięci głównej.
  4. Łącznik można zaklasyfikować jako edytor łączników i dynamiczny linker, natomiast program ładujący można zaklasyfikować jako program ładujący absolutnie, program ładujący relokację i dynamiczny program ładujący .

Wniosek:

Łącznik pobiera moduły obiektowe programu z asemblera i łączy je ze sobą w celu wygenerowania modułu wykonywalnego programu. Moduł wykonywalny jest następnie ładowany przez moduł ładujący do pamięci głównej w celu wykonania.

Top