next up previous contents
Next: Carregamento e ligação combinados Up: Relocação e Ligação Previous: Relocação e Ligação   Sumário


Estruturas de dados adicionais

Os dois tipos de ajustes que podem ocorrer no conteúdo do módulo objeto são:

relocação:
ajuste interno ao segmento;
ligação:
ajuste entre segmentos distintos.

A atividade de relocação é realizada conjuntamente por montadores e carregadores. Montadores são encarregados de marcar as posições no código objeto passíveis de alteração devido à relocação do código. Carregadores devem reservar um espaço na memória de tamanho suficiente para receber o código de máquina e atualizar suas posições alteráveis a partir da informação sobre sua localização na memória.

No exemplo da Seção 4.2.1, as palavras que começam nas posições $4002 e $4008 do código objeto contêm endereços relocáveis. Verificando o código gerado, observa-se que a posição $4002-$4003 contém uma referência ao endereço $6000, e a posição $4008-$4009 contém uma referência ao endereço $6002. Se o início do segmento de dados for alocado a outro endereço de memória que não $6000, o conteúdo destas posições de memória deverá ser ajustado de acordo com esta mudança. O programa carregador é o encarregado de realizar estes ajustes. Para tanto, o módulo objeto deverá conter informação adicional que permita a realização dos ajustes.

Outro tipo de informação que deverá ser mantida no módulo objeto refere-se a referências aos símbolos externos. Neste caso, há duas situações que podem ser tratadas:

  1. o símbolo é referenciado neste segmento, mas é definido em outro segmento; e
  2. o símbolo é definido neste segmento e poderá ser referenciado em outro segmento.

A primeira situação é usualmente descrita como uma referência externa (ER), enquanto que a segunda situação será descrita como uma definição local (LD) de um símbolo externamente referenciável. A informação sobre estes dois tipos de símbolos deverá estar presente no módulo objeto.

Na seqüência, analisaremos o esquema usual de resolução de relocação e referências externas -- através de carregadores de ligação direta. Para este tipo de carregadores, o montador deverá incluir no módulo objeto estruturas de dados adicionais que incluam a informação necessária. São elas:

Dicionário de Símbolos Externos
(ESD): contém todos os símbolos que podem estar envolvidos no processo de resolução de referências entre segmentos: símbolos associados a referências externas (ER), as definições locais (LD) ou a definições de segmentos (SD);

Diretório de Relocação e Ligação
(RLD): para cada segmento indica que posições deverão ter seus conteúdos atualizados de acordo com o posicionamento deste e de outros segmentos na memória.

Estas duas estruturas de informação deverão estar presentes no módulo objeto. A partir deles, o carregador de ligação direta deve ser capaz de definir os valores para todos os símbolos com referências entre segmentos e reajustar o conteúdo das posições afetadas pela relocação.

O montador absoluto oferecia como resultado um módulo objeto com dois tipos de registros, registro com código de máquina (tipo 0) e um registro de fim (tipo 1). Um montador trabalhando no esquema de ligação direta deve fornecer dois tipos adicionais de registros além destes, um tipo para ESD e outro para RLD. Uma estrutura simplificada destes tipos de registros é indicada a seguir.

Registros do tipo ESD contêm todos os símbolos definidos no segmento que podem ser referenciados por outros segmentos, além de símbolos referenciados mas não definidos no segmento. Os símbolos locais que podem ser referenciados externamente podem ainda ser de dois tipos, definição do segmento ou definição local. Nos exemplos a seguir, um registro deste tipo apresentará a seguinte estrutura:

  1. Tipo do registro (0)
  2. Símbolo
  3. Tipo de definição (SD -- segmento, ou LD -- local)
  4. Endereço relativo no segmento
  5. Comprimento em bytes
Neste modelo simplificado de montagem e carregamento por ligação direta apresentado aqui, definições do tipo ER não receberão tratamento diferenciado.

Registros do tipo TXT contêm o código de máquina, com a informação do endereço relativo incorporada. O formato deste registro é:

  1. Tipo do registro (1)
  2. Endereço relativo
  3. Comprimento em bytes
  4. Código de máquina

Registros do tipo RLD indicam quais posições no segmento deverão ter conteúdo alterado de acordo com os endereços alocados aos segmentos, indicando também a partir de que símbolo o conteúdo deverá ser corrigido. O formato deste registro adotado neste texto é:

  1. Tipo de registro (2)
  2. Posição relativa
  3. Comprimento em bytes
  4. Símbolo (base de ajuste)

Finalmente, um registro do tipo END especifica o endereço de início de execução para o segmento que contém a ``rotina principal'', sendo vazio para os demais segmentos:

  1. Tipo de registro (3)
  2. Endereço de execução


next up previous contents
Next: Carregamento e ligação combinados Up: Relocação e Ligação Previous: Relocação e Ligação   Sumário
Ivan L. M. Ricarte 2003-02-14