Programação Aplicada à Engenharia

Propaganda
Universidade Federal Rural do Semi-Árido
Departamento de Ciências Exatas e Naturais
Ciência da Computação
Software Básico
Aula 10: Características dependentes da
máquina
Silvio Fernandes
2009.1
1
Características dependentes da
máquina
• O loader absoluto é simples e eficiente,
entretanto é necessário que o programador
especifique o endereço real onde o programa
será carregado
• O compartilhamento eficiente de recursos da
máquina exige programas relocáveis
• Programas absolutos dificulta o uso de
bibliotecas de sub-rotinas
– É importante escolher e carregar apenas rotinas que
pretendemos incorporar ao programa
2
Relocação
• Os loaders que permitem relocação são
chamados de loaders relocadores ou loaders
relativos
• O 1º método é o uso de registro de
modificação usado para descrever cada parte
do Código Obejto (CO) que deve ser alterada
quando o programa for relocado
• As figuras a seguir mostram um código-fonte e
o respectivo código-objeto
3
Relocação
4
Relocação
5
Relocação
6
Relocação
• Cada registro de modificação especifica o
endereço inicial e o tamanho do campo cujo
valor deve ser alterado
• Em seguida descreve a modificação que será
realizada (soma com o símbolo COPY, que
representa o endereço inicial do programa)
• Registro de modificação é conveniente mas
não se adapta bem a todas as máquinas
7
Relocação
• Considere o programa da Figura a seguir
• É o mesmo do exemplo anterior, exceto que
está escrito para SIC standard que não usa
endereçamento relativo
• Então o endereço de todas as instruções,
exceto RSUB têm que ser modificados
• Isto exigiria o uso de 31 registros de
modificação, e o PO mais que dobraria de
tamanho
8
Relocação
9
Relocação
10
Relocação
• Num computador que use principalmente
endereçamento direto, será mais eficiente
especificar a relocação através de bits de
relocação, sem necessidade de registro de
modificação
• Nesse método são usados bits de relocação
associados a cada palavra do código-objeto (1 bit
de relocação para cada instrução possível)
• Os bits relocação são unidos numa máscara de
bits
11
Relocação
12
Relocação
• Se o bit de relocação for 1, o endereço inicial
do programa será somada a esta palavra
• Se for 0, nenhuma modificação será
necessária
• Alguns computadores possuem o recurso de
relocação controlada por hardware, o que
elimina a necessidade de se atribuir ao loader
essa tarefa de relocação de programas
13
Link de programas
• O programador tem uma inclinação natural a
enxergar o programa como uma entidade
lógica que combina todas as seções de
controle iterrelacionadas
• Mas sob o ponto de vista do loader existem
apenas seções de controle que devem ser
interligadas, relocadas e carregadas
• O loader não tem como saber quais são as
seções que foram montadas ao mesmo tempo
14
Link de programas
• Considere os 3 programas (montados
separadamente) a seguir, cada um deles
contendo uma única seção de controle
• Cada programa contém uma lista de itens
(LISTA, LISTB, LISTC), o final destas listas é
assinalado pelos labels ENDA, ENDB, ENDC
• Os labels no início e no fim das listas são
símbolos externos
15
Link de programas
16
Link de programas
17
Link de programas
18
Link de programas
• Programa-objeto de PROGA
19
Link de programas
• Programa-objeto de PROGB
20
Link de programas
• Programa-objeto de PROGC
21
Link de programas
• No 1º programa (PROGA), REF1 é uma referência
a um label dentro do programa, então é montada
de maneira tradicional
• No PROGB o mesmo operando se refere a um
símbolo externo
– O assembler usa uma instrução no formato estendido
com o campo de endereço definido como 000000
• Esta referência é tratada de modo exatamente
igual em PROGC
22
Link de programas
• A REF2 no PROGA é formada por uma
referência externa mais uma constante
– O assembler armazena o valor da constante no
campo de endereço da instrução e um registro de
Modificação instrui o loader para que some a este
campo o valor de LISTB
• REF3 é um operando imediato cujo valor
deverá ser a diferença entra ENDA e LISTA
(tamanho da lista em bytes)
23
Link de programas
• PROGA dispõe de todas as informações para
calcular REF3
• Enquanto que em PROGB e PROGC os valores
dos labels são desconhecidos, assim a
instrução tem que ser montada como
referência externa (com 2 registros de
modificação)
24
Link de programas
• O assembler do PROGA consegue avaliar todas
as expressões em REF4 menos o valor de LISTC
– Assim, chega-se ao valor 000014 (hexa) e um
registro de modificação
• A mesma expressão em PROGB não contém
nenhum termo, assim o CO contém 000000 e
3 registros de modificação
• Em PROGC, o assembler pode fornecer o valor
de LISTC com relação ao início do programa
25
Link de programas
• O valor desta palavra em PROC contém o
endereço relativo de LISTC 000030 (hexa)
• REF4 representa uma referência externa
simples em PROGA, uma referência externa
complicada para PROGB e uma combinação de
relocação e referência externa para PROGC
• A fig. a seguir mostra os 3 programas na
memória, tal como estariam depois da carga e
do link
26
Link de programas
27
Link de programas
28
Link de programas
• PROGA foi carregado a partir do endereço
4000, com PROGB e PROGC imediatamente
após
• Repare que de REF4 a REF8 (depois da
relocação e do link) os valores resultantes em
todos os programas foram iguais
• No caso de referências que são operandos de
instruções, os valores calculados depois da
carga nem sempre parecem iguais
29
Link de programas
• Isso acontece porque há um passo a mais no
cálculo do endereço envolvido em instruções
que usam o endereçamento relativo ao
contador de programa ou à base
• Nesses casos, são os endereços-alvos que
ficam iguais
30
Referências
• Leland L Beck. “Desenvolvimento de software
básico”. 2ª ed. Rio de Janeiro: Campus, 1993.
525p.
31
Download