AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 445528
Accepted
Goktug
Goktug
Asked: 2018-05-24 01:37:03 +0800 CST2018-05-24 01:37:03 +0800 CST 2018-05-24 01:37:03 +0800 CST

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

  • 772

Encontrei algumas explicações sobre o que é "vinculação de endereço" . 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?

Não posso ter certeza se está correto ou não porque uma apresentação da universidade 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ço 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.

virtual-memory memory-management
  • 2 2 respostas
  • 1226 Views

2 respostas

  • Voted
  1. Best Answer
    Stephen Kitt
    2018-05-24T01:53:29+08:002018-05-24T01:53:29+08:00

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

    O termo "vinculação de endereço", no contexto de endereços de memória (em oposição a endereços de rede, por exemplo), vem do artigo de Leon Presser e John R. White de 1972 sobre vinculadores e carregadores (consulte também a entrada ACM ), onde é definido do seguinte modo:

    A tradução ou mapeamento de um endereço lógico em um endereço físico é chamada de ligação de endereço .

    Uma leitura rápida pode dar a impressão de que estamos falando de endereços lógicos e físicos do ponto de vista do gerenciamento de memória, mas não é o caso; no artigo, endereços físicos são endereços de “informações” na memória, e endereços lógicos são os símbolos usados ​​para se referir a essas informações. Assim, a ligação de endereço é o que é comumente referido hoje em dia como realocaçã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), em 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 os símbolos manualmente, por exemplo , usando dlopen).

    • 5
  2. ilkkachu
    2018-05-24T07:19:51+08:002018-05-24T07:19:51+08:00

    Esse artigo é confuso. A primeira parte do artigo parece precisa. Os endereços virtuais são usados ​​pelo núcleo da CPU, são mapeados pela MMU para endereços físicos e, em seguida, são usados ​​quando vão para a RAM. Eu nunca ouvi isso ser chamado de "vinculação de endereço". "Mapeamento" seria mais comum, mas isso é apenas uma questão de terminologia.

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

    Esse tipo de ligação exige que o compilador gere endereços relocáveis ​​ou baseados em deslocamento a partir do código-fonte.

    Isso não faz sentido.

    O código relocável ou independente de posição é necessário na situação em que o código do programa não conhece o endereço virtual em que está localizado, mas precisa levar em consideração que pode ser colocado em qualquer lugar na memória virtual. Isso não tem nada a ver com endereço físico, pois 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 comuns em que o código independente de posição é necessário. Requer suporte do compilador, pois o código deve ser construído de forma que não possa conter nenhum endereço de memória absoluto, mas faça todos os acessos relativos à sua própria posição ou relativos a alguma posição de 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 do compilador, pois o próprio código precisa estar ciente disso.

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

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

    (Todas as opções acima são baseadas no que sei sobre sistemas x86. Outros sistemas podem ser diferentes.)

    • 0

relate perguntas

  • Pergunta sobre RAM e SWAP no Windows Host OS

  • Verifique se o endereço virtual está no início de uma página

  • Como funciona a desmontagem no contexto da paginação por demanda

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve