Você está na página 1de 61

10. Software de Sistema - Carregadores e Ligadores Referncias: Introduo Compilao (captulo 9) Ivan L. M.

M. Ricarte Editora Campus-Elsevier, 2008 ISBN 85-352-3067-X Transparncias dos caps 8 e 9 do texto acima

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

491

Carregadores e Ligadores
Usurio Programas Programas de Aplicao Utilitrios Depuradores Processador Ligadores de Macro Compiladores Montador Carregadores

Software Aplicativo

Sistema Operacional (Gerenciador de Processador, Memria, E/S, etc) Microprogramas

Software de Sistema

Hardware Circuitos Fsicos

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

492

No captulo anterior foi apresentado o programa montador. Ao final da execuo do montador j foi carregado diretamente na memria o programa do usurio (em linguagem de mquina) a ser executado. O esquema usual de processamento apresentado na prxima transparncia.

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

493

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

494

10.1 Mdulo Objeto

artefato produzido pelo montador


ltima etapa da compilao

contm a informao necessria para que o programa venha a ser executado


no mnimo, o cdigo de mquina

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

495

Contedo do mdulo objeto


Tipicamente contendo a seguinte informao:
Cabealho: identificao do tipo de arquivo e dados sobre tamanho do cdigo e arquivo-fonte que deu origem ao mdulo Cdigo: instrues e dados em formato binrio Relocao: posies no cdigo binrio que devem ter contedo alterado de acordo com a posio de carregamento na memria Smbolos: smbolos globais definidos no mdulo e smbolos cujas definies viro de outros mdulos (ligao) Depurao: referncias para o cdigo fonte, tais como o nmero de linha, nomes originais dos smbolos locais e estruturas de dados definidas

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

496

Formato do mdulo objeto Informao que gerada pelo montador depende muito da forma como o mdulo objeto utilizado Algumas possibilidades a) b) c) montagem e carregamento combinados (conforme captulo 9) carregamento absoluto carregamento com ajuste de referncias
497

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

10.2 Esquemas de carregamento a) Montagem e carregamento combinados


(esquema utilizado no captulo 9)

esquema de montagem com endereo absoluto programador responsvel por definir endereos de memria principal nos quais cdigo e dados sero executados ao invs de gerar um mdulo objeto em um arquivo em disco, neste caso o cdigo gerado pelo montador j escrito diretamente na sua posio de memria ao encerrar a montagem, montador transfere a execuo (JUMP) para o incio do cdigo da aplicao
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 498

10.2 Esquemas de carregamento


a) Montagem e carregamento combinados
(esquema utilizado no captulo 9)

Desvantagens responsabilidade do programador de manter endereos programa montador ocupa memria que poderia ser usada na execuo do programa de aplicao cada execuo demanda nova montagem, mesmo que nenhuma alterao tenha ocorrido

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

499

10.2 Esquemas de carregamento b) Carregamento absoluto


esquema de montagem tambm com endereamento absoluto montagem e carregamento em momentos distintos
montador cria mdulo objeto em disco carregador transfere mdulo objeto do disco para a memria principal carregador e montador so programas separados mdulo objeto deve conter informao para sua operao

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

500

10.2 Esquemas de carregamento b) Carregamento absoluto


Contedo do mdulo objeto

mdulo objeto deve conter informao sobre endereo de memria principal no qual deve ser carregado um registro para cada segmento contguo de cdigo um outro tipo de registro contm o endereo de incio de execuo controle da execuo transferido para esse endereo ao final do carregamento

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

501

10.2 Esquemas de carregamento b) Carregamento absoluto


Relao Montador x Carregador Absoluto O programa Montador gera um arquivo para ser trabalhado pelo programa Carregador Absoluto com o seguinte formato de campos: campo campo campo campo 1: 2: 3: 4: tipo (0-texto; 1-fim) endereo de carregamento comprimento em bytes contedo binrio (em hexadecimal)
502

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

Fluxograma de um Carregador Absoluto

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

503

10.2 Esquemas de carregamento b) Carregamento absoluto


Exemplo: DATA: PROG: VALUE: RESULT: PGM: EQU $6000 EQU $4000 ORG DATA DS.W 1 DS.W 1 ORG PROG MOVE.W VALUE, D0 MOVE.W DO, RESULT
END

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

504

10.2 Esquemas de carregamento b) Carregamento absoluto


Exemplo

Montador
0 6000 4 00 00 00 00 0 4000 E 30 38 00 00 60 00 31 C0 00 00 60 02 4E 75 1 4000

Carregador Absoluto
cdigo na memria
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 505

10.2 Esquemas de carregamento b) Carregamento absoluto


Limitaes

programador responsvel por manter o registro de endereos por exemplo, localizao na memria de variveis e subrotinas no h flexibilidade para execuo do cdigo caso as posies de memria no estejam disponveis, programa no pode ser carregado e assim executado
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 506

10.2 Esquemas de carregamento c) Carregamento com ajuste a referncias


Este carregador procura superar limitaes do carregador absoluto como a seguir: 1. no fixando endereos na programao referncias relativas ao incio do cdigo 2. responsabilidade do carregador encontrar espao de memria para o carregamento aps definida a posio de carregamento, cabe ao carregador realizar a transferncia e os ajustes nas referncias

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

507

10.2 Esquemas de carregamento c) Carregamento com ajuste a referncias


Tipos de ajuste

Relocao - referncias que so resolvidas com o conhecimento da posio inicial do prprio mdulo. ajuste interno ao segmento de programa Ligao - referncias que demandam conhecimento da posio inicial de outros mdulos para resoluo ajuste entre segmentos distintos do programa O mdulo objeto deve agregar informao suficiente para que esses ajustes possam ser realizados.
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 508

10.2 Esquemas de carregamento c) Carregamento com ajuste a referncias


Informaes para ajustes: (ESD e RLD) referncia externa smbolo usado no presente mdulo, mas definido em outro definio local smbolo definido no presente mdulo, mas pode ser referenciado em outros Dicionrio de Smbolos Externos (ESD) Smbolos que necessitam ser conhecidos entre segmentos de programas para resoluo de referncias: LD e SD. LD: definio local smbolo definido no presente mdulo, mas pode ser referenciado em outros SD: usado para definir segmento / mdulo
509

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

10.2 Esquemas de carregamento c) Carregamento com ajuste a referncias


Informaes para ajustes: (ESD e RLD) Diretrio de Relocao e Ligao (RLD) definio das posies de memria que necessitam de ajuste em relao a: valores de smbolos externos valor da posio inicial do prprio segmento

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

510

10.2 Esquemas de carregamento c) Carregamento com ajuste a referncias


Formato usado para o Mdulo Objeto O mdulo objeto usar registros de quatro tipos:
ESD - informao sobre nome do smbolo, sua posio relativa no segmento e sua dimenso em bytes TXT - dimenso e o cdigo de mquina do segmento RLD - posio relativa e dimenso das referncias que precisam ser ajustadas no cdigo de mquina. Qual valor (smbolo) usado como base para esse ajuste END - endereo para incio da execuo se o mdulo contm o programa principal

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

511

10.2 Esquemas de carregamento c) Carregamento com ajuste a referncias


Formato dos registros:
ESD.nome-smbolo.tipo-smbolo.endereo-relativo.comprimento onde: tipo-smbolo LD ou SD (ver transparncia 509) comprimento em bytes TXT.endereo-relativo.comprimento.cdigo-em-hexadeximal RLD.endereo-relativo.comprimento.nome-smbolo END.endereo-de-execuo se endereo-de-execuo = { }, ento no considera o campo.

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

512

10.3 Exemplo de cdigo gerado para futuro ajuste a referncias


Programa fonte para um processador Motorola da famlia 68000

MAIN

MOVE.B DIGIT, D0 CMPI.B #10, D0 BLT ADD.B ADD_0 #(A - 0-10), D0 # 0, D0 PGM

GLOB

DIGIT

MOVE.W VALUE, D0 MOVE.W D0, DIGIT RTS

ADD_0 ADDI.B

VALUE DS.W DIGIT DS.W END

1 1 PGM

MOVE.B D0, CHAR RTS CHAR DS.W END 1 MAIN

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

513

10.3 Exemplo de cdigo gerado para futuro ajuste a referncias


Cdigo gerado 1/4 Para MAIN: ESD.MAIN.SD.00.1C TXT.00.6.103900000000 TXT.06.4.0C00000A TXT.0A.2.6D02 TXT.0C.2.5E00 TXT.0E.4.06000030 TXT.12.6.13C00000001A TXT.18.2.4E75 TXT.1A.2.0000 RLD.02.4.DIGIT RLD.14.4.MAIN END.00
514

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

10.3 Exemplo de cdigo gerado para futuro ajuste a referncias


Cdigo gerado 2/4 Para MAIN: ESD.MAIN.SD.00.1C TXT.00.6.103900000000 TXT.06.4.0C00000A TXT.0A.2.6D02 TXT.0C.2.5E00 TXT.0E.4.06000030 TXT.12.6.13C00000001A TXT.18.2.4E75 TXT.1A.2.0000 RLD.02.4.DIGIT RLD.14.4.MAIN END.00

MOVE.B DIGIT,D0

permite ao passo-2 definir aqui o endereo externo de DIGIT

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

515

10.3 Exemplo de cdigo gerado para futuro ajuste a referncias


Cdigo gerado 3/4 Para MAIN: ESD.MAIN.SD.00.1C TXT.00.6.103900000000 TXT.06.4.0C00000A TXT.0A.2.6D02 TXT.0C.2.5E00 TXT.0E.4.06000030 TXT.12.6.13C00000001A TXT.18.2.4E75 TXT.1A.2.0000 RLD.02.4.DIGIT RLD.14.4.MAIN END.00

permite ao passo-2 definir aqui o endereo de CHAR relativo MAIN


516

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

10.3 Exemplo de cdigo gerado para futuro ajuste a referncias


Cdigo gerado 4/4

Para PGM:

ESD.PGM.SD.00.12 ESD.DIGIT.LD.10.2 TXT.00.6.30390000000E TXT.06.6.33C000000010 TXT.0C.2.4E75 TXT.0E.2.0000 TXT.10.2.0000 RLD.02.4.PGM RLD.08.4.PGM END.

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

517

10.4 Carregador de ligao direta (carregamento com ajuste a referncias)


Carregadores de ligao direta so exemplo de um carregador bsico que realiza ajustes de relocao e ligao. Tarefas do carregador de ligao direta: alocar espao na memria principal que seja suficiente para carregar o programa completo resolver, definir endereos de cada smbolo exportado pelos mdulos / segmentos transferir o cdigo de cada mdulo/segmento para a memria ajustar, no cdigo, posies de memria que fazem referncias a outras posies de memria

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

518

10.4 Carregador de ligao direta (carregamento com ajuste a referncias)


Implementao em dois passos: Passo-1: Resoluo dos endereos aloca espao em memria define endereo inicial de memria para cada mdulo/segmento l registros ESD cria Tabela de Smbolos Externos Globais (GEST) Passo-2: Transferncia e ajustes realiza a transferncia dos registros TXT para a memria altera as posies de memria indicadas nos registros RLD valores na GEST inicia execuo com endereo obtido em um registro END
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 519

10.4 Carregador de ligao direta


Passo-1

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

520

10.4 Carregador de ligao direta


Passo-2

execuo

se POS { }

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

521

10.4 Carregador de ligao direta


Exemplo conforme transparncias 513 a 517

Executando o algoritmo Passo 1 (para segmento MAIN)


passo1: PLA=end_inicial (definido como $1000) registro tipo ESD / SD, assim VALOR= $1000 SCOMP= 1C SIMB= MAIN insere na GEST (MAIN , $1000) pula outros registros at encontrar registro END faz PLA= $1000 + 1C (lembrar 1C o tamanho do seg. MAIN)

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

522

10.4 Carregador de ligao direta


Exemplo conforme transparncias 513 a 517 Continuando o passo1 agora para PGM:
passo1: PLA= $101C registro tipo ESD / SD, assim VALOR= $101C SCOMP= 12 SIMB= PGM insere na GEST (PGM , $101C) registro tipo ESD / LD, assim POS= 10 VALOR= 101C + 10 = 102C SIMB= DIGIT insere na GEST (DIGIT , $102C) pula outros registros at encontrar registro END faz PLA= $101C + 12 (lembrar 12 o tamanho do seg. PGM)
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 523

10.4 Carregador de ligao direta


Exemplo conforme transparncias 513 a 517

Ao final do passo1 temos a GEST gerada:

MAIN

$1000 $101C $102C

GEST:

PGM DIGIT

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

524

10.4 Carregador de ligao direta


Exemplo conforme transparncias 513 a 517
Inicia passo2 para MAIN e depois continua passo2 para PGM passo2: PLA= $1000 ; EXE= $1000 registro tipo ESD / SD, assim SCOMP= $1C registro tipo TXT: POS=0, SIZE= 6, CODE cd. mquina pos. memria PLA+POS recebe SIZE-bytes com CODE repete processamento igual ao do ltimo registro para todos os regs. TXT registro tipo RLD: POS= 02, SIMB= DIGIT, ENDR= $1002 1002:1005 (1002:1005) + 102C (end. final DIGIT) registro tipo RLD: POS= 14, SIMB= MAIN, ENDR= $1014 1014:1017 (1014:1017) + 1000 (CHAR relativo PGM) registro tipo END: POS= 00, EXE= $1000, PLA= $101C
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 525

10.4 Carregador de ligao direta


Exemplo conforme transparncias 513 a 517 Continuando passo2 para PGM
passo2: PLA= $101C ; EXE= $1000 registro tipo ESD / SD, assim SCOMP= $12 registro tipo ESD / LD, nada faz registros seguintes so TXT: carrega cdigo na memria registros (dois) tipo RLD, com os quais as instrues de PGM so atualizadas com referncia aos endereos finais de VALUE e DIGIT registro tipo END: neste caso no h dados (EXE= $1000) JUMP para $1000 e inicia processamento.

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

526

10.4 Carregador de ligao direta


Exemplo conforme transparncias 513 a 517
Ao final do passo2 teremos:

Posio $1000 $1010 $1020

00 1039 0030 102

02 0000 13C0 33C0

04 102C 0000 0000

06 0C00 101A 102C

08 000A 4E75 4E75

0A 6D02 0000 0000

0C 5E00 3039 0000

0E 0600 0000

Ao final do passo2 o carregador desvia (JUMP) para $1000.


DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 527

10.4 Carregador de ligao direta


Exemplo conforme transparncias 513 a 517

Posio $1000 $1010 $1020

00 1039 0030 102A

02 0000 13C0 33C0

04 102C 0000 0000

06 0C00 101A 102C

08 000A 4E75 4E75

0A 6D02 0000 0000 R

0C 5E00 3039 0000

0E 0600 0000

R 0000 000E + PGM (101C)

0000 0010 + PGM (101C)

0000 0000 + DIGIT (102C)

0000 001A + MAIN (1000)

posies que sofreram ajuste (relocao ou ligao) de endereo XX


DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 528

10.4 Carregador de ligao direta


Desvantagens

cdigo do carregador torna-se mais complexo como carregador compartilha memria com a execuo da aplicao, quanto mais simples for, melhor. Estratgia alternativa Separar as atividades de ligao daquelas de carregamento s o carregador (mais simples) precisa compartilhar a memria com a aplicao

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

529

10.5 Programas Ligadores


Um Programa Ligador usado para criar um mdulo de carga, realiza as seguintes tarefas: combina os mdulos objetos esforo de ligao j realizado mantm informao sobre ajustes de relocao faz o cdigo relativo a um nico smbolo: endereo inicial de carregamento Exemplo: Programa ld do Unix, invocado pelo compilador gcc ao final da compilao para criar o cdigo executvel.

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

530

10.5 Programas Ligadores


Conforme exemplo estudado (10.4) segmento me m ria

...
segmento
ESD.2E

....

ligador

mdulo de carga

carregador

(ver transparncia 532)


TXT.18.2.4E75 TXT.1A.2.0000 TXT.1C.6.30390000002A TXT.22.6.33C00000002C TXT.28.2.4E75 TXT.2A.2.0000 TXT.2C.2.0000 RLD.02.4 RLD.14.4 RLD.1E.4 RLD.24.4 END.00

TXT.00.6.10390000002C TXT.06.4.0C00000A TXT.0A.2.6D02 TXT.0C.2.5E00 TXT.0E.4.06000030 TXT.12.6.13C00000001A

DIGIT CHAR VALUE agora so relocados em relao a um end. inicial


531

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

10.5 Programas Ligadores


Conforme exemplo estudado (10.4) cont. O programa ligador gera o mdulo de carga como a seguir: o registro de incio do segmento ESD indica o tamanho do cdigo de mquina; no caso 2E ou 46 bytes o endereo inicial de carga ipla = 0 (zero); todos os endereos passam a ser relativos a zero, antes da carga a sada gravada em um arquivo para tratamento posterior pelo programa carregador a informao de relocao est ao final do mdulo de carga (RLD); o endereo inicial de carregamento a base para todos os ajustes a serem realizados pelo carregador
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 532

10.5 Programas Ligadores


Conforme exemplo estudado (10.4) cont. O programa carregador de posse do mdulo de carga atua como a seguir: obtm o espao necessrio para a carga do registro ESD transfere o cdigo, registros TXT realoca conforme os registros RLD

A transparncia 534 mostra estes passos.

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

533

Carre gador
Carregador

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

534

10.6 Bibliotecas

Mdulos de cdigo objeto de uso comum num sistema devem ser mantidos para fcil integrao ao cdigo da aplicao. Mecanismo usual para manuteno desses mdulos: biblioteca. Arquivo cujo contedo um conjunto de outros arquivos (no caso, mdulos objetos) com uma tabela para localizar e extrair facilmente esses arquivos.

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

535

10.6 Bibliotecas

Exemplo Bibliotecas estticas em Unix Criadas e mantidas com aplicativo ar Mdulos necessrios so extrados e integrados ao cdigo pelo aplicativo ld Bibliotecas a serem utilizadas so indicadas com a chave -l na linha de comando

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

536

10.6 Bibliotecas (estticas)


Tratamento com o utilitrio ar : (cria, mantm e extrai mdulos de bibliotecas estticas no Linux). a) Mdulo objeto arqmat.o criado com > gcc -c arqmat.c b) Este mdulo includo em libmy.a com > ar r libmy.a arqmat.o libmay.a a biblioteca esttica do usurio; r indica replacement caso o mdulo j exista na biblioteca

c) Outro mdulo poderia ser includo com > ar r libmy.a convexp.o d) O comando ar t libmy.a permite listar o contedo da biblioteca no caso: arqmat.o e convexp.o
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 537

10.6 Bibliotecas (estticas)


Estrutura interna tpica: Nome char name[16]; Data de modificao char modtime[12]; Usurio char uid[6]; Grupo char gid[6]; Permisses de acesso char mode[8]; Dimenso char size[10]; Marcador de fim char eol[2];

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

538

10.7 Carregamento e ligao dinmicos


Os esquemas bsicos apresentados at o momento so estticos: ligadores montam o mdulo de carga completo antes da execuo uma vez definido o endereo para o carregamento, esse no pode ser alterado at o fim da execuo Desvantagem Em um ambiente que suporta multiprogramao (com execuo simultnea de vrios programas), vrios mdulos podem estar repetidos em diferentes aplicaes. Redundncia
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 539

10.7 Carregamento e ligao dinmicos Princpio: adiar a definio do valor de um smbolo externo at o momento da execuo Se um mdulo j tiver sido carregado para a memria por uma outra aplicao, o mesmo endereo (ou seja, o mesmo mdulo) pode ser utilizado pela aplicao corrente.

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

540

10.7 Carregamento e ligao dinmicos


(mdulos objeto para ligao dinmica)
cdigo dos mdulos deve ser reentrante basicamente, sem variveis globais ou estticas cdigos mantidos em bibliotecas dinmicas sistema Windows: DLL sistema Linux: ELF (arquivos com extenso so shared objects) mdulo de carga (o programa executvel) um mdulo primrio referncias aos mdulos externos sem resoluo

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

541

10.7 Carregamento e ligao dinmicos


(estratgias para resoluo dinmica)

1. Referncias so resolvidas quando mdulo primrio carregado (tempo de carregamento) 2. Referncias resolvidas quando smbolo referenciado (tempo de execuo)

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

542

10.7 Carregamento e ligao dinmicos


(estratgias para resoluo dinmica)
1. Referncias so resolvidas quando mdulo primrio carregado (tempo de carregamento)

Quando o mdulo de carga primrio carregado, todas as referncias a mdulos externos devem ser resolvidas Se mdulo j est na memria, o mesmo endereo utilizado Caso contrrio, o mdulo carregado e seu endereo definido Se algum mdulo no for localizado, a execuo abortada a soluo utilizada no sistema Windows DLL Dynamic Link Library

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

543

10.7 Carregamento e ligao dinmicos


(estratgias para resoluo dinmica)
2. Referncias resolvidas quando smbolo referenciado (tempo de execuo) Execuo inicia com o mdulo de carga primrio sem

resoluo das referncias externas Apenas quando a referncia efetivamente necessria o sistema faz a resoluo Se mdulo j est na memria, mesmo endereo utilizado Caso contrrio, mdulo carregado e seu endereo definido Se referncia no for utilizada, mdulo correspondente nem precisa ser carregado Eventualmente, a aplicao pode executar sem a instalao da biblioteca dinmica correspondente a soluo utilizada no sistema Linux ELF Executable and Linkable Format
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 544

10.7 Carregamento e ligao dinmicos


(estratgias para resoluo dinmica)
2. Referncias resolvidas quando smbolo referenciado (tempo de execuo)

Exemplo: carregamento dinmico da funo cos da biblioteca libm.so usando ELF # include <dlfcn.h> # include <stdio.h> int main(int argc, char *argv[]) { void *handle; double (*cosine)(double); char *error; handle = dlopen("/lib/libm.so.5", RTLD_LAZY); cosine = dlsym(handle, "cos"); printf("%f \n", (*cosine)(2.0)); dlclose(handle); }
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 545

10.7 Carregamento e ligao dinmicos


Exemplo: carregamento dinmico da funo cos da biblioteca libm.so usando ELF (cont) Lembrando as seguintes funes de manipulao de smbolos em ELF: dlopen abre o arquivo da biblioteca dinmica dlsym obtm endereo do smbolo especificado dclose fecha a biblioteca dinmica dlerror emite mensagem de diagnstico de erro

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

546

10.7 Carregamento e ligao dinmicos (problema de dependncia de/entre bibliotecas)


Cadeia de dependncias: uma aplicao depende da biblioteca A, que depende da B, que depende. . . Em sistemas com muitas aplicaes instaladas (e desinstaladas), possvel que aplicaes parem de funcionar por conta da ausncia de uma biblioteca dinmica removida inadvertidamente ou por incompatibilidade de verses. . problema conhecido como DLL hell, e . agravado por modificaes locais no documentadas e pela ausncia de um padro de numerao de verses
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 547

10.7 Carregamento e ligao dinmicos


(problema de dependncia de/entre bibliotecas)

Possveis solues manuteno de um controle de verses, com indicao de major version e minor version atualizaes de aplicaes controladas por meio de um gerenciador de pacotes

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

548

10.8 Exerccios
1. Qual a diferena entre o resultado gerado por um montador absoluto e um montador de ligao direta? 2. Qual a diferena entre ajuste de relocao e ajuste de ligao? 3. Qual a diferena entre ligao dinmica em tempo de carga e em tempo de execuo? 4. Apresente situaes nas quais seria interessante que a tabela de smbolos gerada por um montador fosse incorporada ao mdulo objeto gerado. 5. Como se comparam os tamanhos dos mdulos objeto nos esquemas de carregamento esttico e de carregamento dinmico? 6. Um montador de ligao direta aplicado a dois arquivos em linguagem simblica da famlia 68000 gerou os seguintes mdulos objeto:
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 549

10.8 Exerccios (cont.)


ESD.MAIN.S.0000.001 ESD.RESULT.L.0018.0002 ESD.CALC.S.0000.0006 TXT.0000.02.2200 TXT.0000.06.203900000014 TXT.0002.02.9081 TXT.0006.06.4EB900000000 TXT.0004.02.4E75 TXT.000C.06.33C000000018 END. TXT.0012.02.4E75 TXT.0014.04.00004E75 RLD.0002.04.MAIN RLD.0008.04.CALC RLD.000E.04.MAIN END.0000 Passados como argumentos nessa ordem (mdulo 1, seguido de mdulo 2) para um carregador de ligao direta; obteve-se o endereo inicial de carga (IPLA) $0200.
DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes 550

10.8 Exerccios (cont.)


(a) Qual o contedo da Tabela de Smbolos Externos Globais (GEST) gerada pelo carregador? (b) O diagrama abaixo um mapa de contedo da memria aps o carregamento sem os ajustes de ligao e relocao. Indique neste mapa quais posies so ajustadas pelo carregador e qual o novo contedo destas posies.

020_ 2039 0000 0014 4EB9 0000 0000 33C0 0000 021_ 0018 4E75 0000 4E75 0000 2200 9081 4E75

DCA-FEEC-UNICAMP: Introduo Computao Digital - 2009 - Prof. Lo Pini Magalhes

551