Recomendado, 2024

Escolha Do Editor

Diferença entre o vinculador e o carregador

O Linker e o Loader são os programas utilitários que desempenham um papel importante na execução de um programa. O código fonte de um programa passa pelo compilador, assembler, linker, loader na respectiva ordem, antes da execução. Por um lado, onde o linker inunda os códigos de objeto gerados pelo montador e os combina para gerar o módulo executável. Por outro lado, o carregador carrega esse módulo executável na memória principal para execução. Vamos discutir a diferença entre o Linker e o loader com a ajuda de um gráfico comparativo.

Gráfico de comparação

Base para ComparaçãoVinculadorCarregador
BasicEle gera o módulo executável de um programa de origem.Ele carrega o módulo executável na memória principal.
EntradaToma como entrada, o código do objeto gerado por um montador.Leva módulo executável gerado por um linker.
FunçãoEle combina todos os módulos de objeto de um código-fonte para gerar um módulo executável.Aloca os endereços para um módulo executável na memória principal para execução.
Tipo / AbordagemLinkage Editor, vinculador dinâmico.Carregamento absoluto, Carregamento relocável e Carregamento dinâmico em tempo de execução.

Definição de Linker

O Assembler gera o código de objeto de um programa de origem e o entrega ao vinculador. O vinculador usa esse código de objeto e gera o código executável do programa e o entrega ao Loader.

A linguagem de alto nível, os programas possuem algumas bibliotecas internas e arquivos de cabeçalho . O programa de origem pode conter algumas funções de biblioteca cuja definição é armazenada nas bibliotecas internas. O vinculador vincula essas funções às bibliotecas internas. Caso as bibliotecas internas não sejam encontradas, informa ao compilador e o compilador gera o erro.

Às vezes, os grandes programas são divididos em subprogramas que são chamados de módulos . Agora, quando esses módulos são compilados e montados, os módulos de objeto do programa de origem são gerados. O vinculador tem a responsabilidade de combinar / vincular todos os módulos de objeto para gerar um único arquivo executável do programa de origem. Nós temos dois tipos de linkers.

Linkage Editor : É um linker que gera o módulo executável relocável.

Dynamic Linker : adia / adia a ligação de alguns módulos externos até que o módulo de carregamento / módulo executável seja gerado. Aqui, a vinculação é feita durante o tempo de carregamento ou tempo de execução.

Definição de Loader

Como o programa que deve ser executado atualmente deve residir na memória principal do computador. É de responsabilidade do carregador, um programa em um sistema operacional, carregar o arquivo / módulo executável de um programa, gerado pelo vinculador, na memória principal para execução. Aloca o espaço de memória ao módulo executável na memória principal.

Existem três tipos de abordagens de carregamento:

  • Carregamento absoluto
  • Carregamento relocável
  • Carregamento Dinâmico em Tempo de Execução

Carregamento absoluto : essa abordagem carrega o arquivo executável de um programa em um mesmo local de memória principal a cada vez. Mas tem algumas desvantagens, como um programador deve estar ciente da estratégia de atribuição para carregar os módulos na memória principal. No caso, o programa deve ser modificado envolvendo alguma inserção e exclusão no programa, então todos os endereços do programa devem ser alterados.

Carregamento relocável: nessa abordagem, o compilador ou montador não produz o endereço de memória principal real . Produz os endereços relativos.

Carregamento de tempo de execução dinâmico : nessa abordagem, o endereço absoluto de um programa é gerado quando uma instrução de um módulo executável é realmente executada. É muito flexível, o módulo de carregamento / módulo executável pode ser carregado em qualquer região da memória principal . O programa em execução pode ser interrompido no meio e pode ser trocado para o disco e de volta para a memória principal desta vez em um endereço de memória principal diferente.

Principais diferenças entre o vinculador e o carregador

  1. A principal diferença entre o vinculador e o carregador é que o vinculador gera o arquivo executável de um programa, enquanto o carregador carrega o arquivo executável obtido do vinculador na memória principal para execução .
  2. O linker inunda o módulo de objeto de um programa gerado pelo montador. No entanto, o carregador inunda o módulo executável gerado pelo vinculador.
  3. O vinculador combina todos os módulos de objeto de um programa para gerar módulos executáveis e também vincula a função de biblioteca no módulo de objeto a bibliotecas integradas da linguagem de programação de alto nível. Por outro lado, o carregador aloca espaço para um módulo executável na memória principal.
  4. O linker pode ser classificado como editor de linkage e linker dinâmico, enquanto o loader pode ser classificado como loader absoluto, loader relocatable e loader dinâmico em tempo de execução .

Conclusão:

O linker pega os módulos de objeto de um programa do montador e os vincula para gerar um módulo executável de um programa. O módulo executável é então carregado pelo carregador na memória principal para execução.

Top