Gráfico de comparação
Base para Comparação | Vinculador | Carregador |
---|---|---|
Basic | Ele gera o módulo executável de um programa de origem. | Ele carrega o módulo executável na memória principal. |
Entrada | Toma como entrada, o código do objeto gerado por um montador. | Leva módulo executável gerado por um linker. |
Função | Ele 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 / Abordagem | Linkage 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
- 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 .
- 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.
- 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.
- 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.