O que é ligação de endereço?

1

Encontrei algumas explicações sobre o que é "binding binding" . Eles dizem que "a vinculação de endereços é uma operação de mapeamento de endereços virtuais ou lógicos para endereços físicos".

Esta definição está correta?

Eu não posso ter certeza se está correto ou não, porque uma apresentação universitária diz que a conversão de endereços virtuais em endereços físicos é realizada em tempo de execução. No entanto, a ligação de endereços diz que a operação de ligação pode ser implementada em tempo de compilação, tempo de carregamento ou tempo de execução.

Isso mostra que há uma contradição.

    
por Goktug 23.05.2018 / 11:37

2 respostas

4

A explicação sobre o Quora parece-me bastante confusa e mistura vários conceitos.

O termo "ligação de endereço", no contexto de endereços de memória (em oposição a endereços de rede, por exemplo), vem de Artigo de 1972 de Leon Presser e John R. White sobre linkers e carregadores (veja também o ACM entry ), onde é definido da seguinte forma:

The translation or mapping of a logical into a physical address is called address binding.

Uma leitura rápida poderia dar a impressão de que estamos falando de endereços lógicos e físicos de uma perspectiva de gerenciamento de memória, mas esse não é o caso; no artigo, os endereços físicos são endereços de “informação” na memória e os endereços lógicos são os símbolos usados para se referir a essa informação. Assim, a ligação de endereço é comumente referida hoje em dia como relocação de símbolo (ou ponteiro), e como você diz, isso pode acontecer em tempo de compilação (ao gerar um binário estático por exemplo), no tempo de carregamento (quando o vinculador dinâmico resolve símbolos em uma biblioteca compartilhada), ou em tempo de execução (quando o programa em execução resolve símbolos manualmente, por exemplo usando dlopen ).

    
por 23.05.2018 / 11:53
0

Esse artigo é confuso. A primeira parte do artigo parece correta. Endereços virtuais são usados pelo núcleo da CPU, eles são mapeados pela MMU para endereços físicos e, em seguida, são usados quando para RAM. Eu nunca ouvi isso sendo chamado de "endereço obrigatório", no entanto. "Mapeamento" seria mais comum, mas isso é apenas uma questão de terminologia.

Depois, há essa afirmação no meio do segundo parágrafo, referindo-se ao processo acima:

This type of binding requires the compiler to generate relocatable or offset based addresses from the source code.

Isso é um absurdo.

Relociável ou código independente de posição é necessário na situação em que o código do programa não conhece o código endereço virtual em que está localizado, mas precisa de alguma forma levar em conta que ele poderia ser colocado em qualquer lugar na memória virtual. Isso não tem nada a ver com endereço físico, já que o código do programa em execução no sistema não tem conhecimento deles. Todos os endereços que ele vê são endereços virtuais.

Bibliotecas compartilhadas e randomização de layout de espaço de endereço são os dois casos mais comuns em que o código independente de posição é necessário. Ele requer suporte do compilador, já que o código deve ser construído de forma que não possa conter nenhum endereço de memória absoluto, mas em vez disso, faz todos os acessos relativos à sua própria posição ou relativos a alguma posição base armazenada em um registrador.

Tudo isso acontece dentro da visão do processo do espaço de endereço virtual. Ele precisa de suporte ao compilador, já que o próprio código precisa estar ciente disso.

Tradução de endereço virtual pela MMU não requer cooperação do processo. Em vez disso, é o trabalho do sistema operacional corrigir os mapeamentos de endereço conforme necessário, por exemplo, se parte do processo é paginada para troca e precisa ser acessada.

A segmentação também foi mencionada, funciona basicamente como o artigo explica, exceto que pelo menos em x86, a segmentação produz Endereços virtuais , portanto, o mapeamento de memória virtual para físico acontece depois.

(Todos os itens acima são baseados no que eu sei sobre sistemas x86. Outros sistemas podem ser diferentes.)

    
por 23.05.2018 / 17:19