next up previous contents
Next: Exemplo de aplicação Up: Carregamento e ligação combinados Previous: Carregamento e ligação combinados   Sumário

Algoritmos do carregador de ligação direta

O carregador de ligação direta recebe como argumentos a lista de módulos a carregar, trabalhando usualmente em vários passos -- tipicamente dois.

O carregador apresentado aqui irá realizar três passos. No primeiro passo, ele deve alocar espaço contíguo de memória suficiente para os segmentos. Para saber quanto espaço é necessário, a informação sobre o comprimento de cada segmento -- presente em registros tipo ESD, com tipo de definição SD -- é obtida. O Algoritmo 4.5.1 apresenta um algoritmo para realizar esta etapa do primeiro passo.


\begin{Program}
% latex2html id marker 3394\begin{algorithm}{dlLoader1}{module...
...meiro passo
do carregador de ligação direta: alocação de memória.}\end{Program}

Deve-se observar que, caso a restrição de que o espaço alocado aos módulos não precise ser contíguo, esse primeiro passo é dispensável.

Uma vez determinado qual o endereço inicial de carregamento (IPLA -- Initial Program Load Address), o carregador inicia a criação de uma Tabela de Símbolos Externos Globais (GEST). Para tanto, apenas a informação presente em registros do tipo ESD, com tipos de definição SD e LD, é utilizada. Este segundo passo é apresentado no Algoritmo 4.5.


\begin{Program}
% latex2html id marker 3426\begin{algorithm}{ldLoader2}{module...
...Segundo passo
do carregador de ligação direta: definição da GEST.}\end{Program}

Nestas apresentações simplificadas do algoritmo de carregamento, o tratamento de erros não é indicado. Na fase de definição da GEST, um possível erro que poderia ser detectado e indicado ao usuário é a duplicação na definição de símbolos na tabela, ou seja, um mesmo símbolo sendo redefinido em segmentos distintos.

No último passo sobre os arquivos de entrada, o carregador irá realizar a transferência do código de máquina para a memória e transferir o controle da execução do programa para o endereço inicial do programa recém-carregado. Este passo é apresentado no Algoritmo 4.6.


\begin{Program}
% latex2html id marker 3460\begin{algorithm}{ldLoader3}{module...
...r de ligação direta: transferência de código e início de execução.}\end{Program}

Neste passo, o carregador volta a tomar como endereço inicial de carregamento o valor ipla, lendo novamente cada módulo objeto na seqüência original. A variável execPoint irá registrar a posição de início de execução para o segmento que definir um registro do tipo END com argumento.

Quando o registro lido é do tipo ESD, o único processamento envolvido é obter o comprimento do segmento de forma a permitir a atualização correta da variável que indica a posição inicial de carga de cada segmento, segStart. Esta informação está contida no registro ESD cujo tipo de definição é SD (Segment Definition).

Os registros do tipo TXT têm seu conteúdo transferido para a memória principal. Cada campo do registro -- posição relativa ao início do segmento, tamanho e conteúdo -- é obtido, sendo que o endereço de destino é resolvido tomando por base o valor de segStart.

Ao final da transferência, as posições indicadas em registros do tipo RLD têm seu conteúdo ajustado a partir da informação registrada na GEST. Os registros do tipo RLD têm a indicação da posição relativa que deve ser corrigida, sendo que a posição de memória cujo conteúdo será alterado, position, é obtida a partir da combinação desta informação com o endereço de início do segmento, segStart. O valor pelo qual o conteúdo deverá ser alterado é especificado pelo campo de símbolo presente neste registro -- o símbolo é lido do registro e seu valor é obtido a partir de uma busca na GEST. Neste ponto, pode se detectar um erro caso algum símbolo tenha sido referenciado e não definido em nenhum módulo -- é onde se processará a informação para referências do tipo ER, não tratadas explicitamente pelo algoritmo.


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