Visão geral de montadores, ligadores e carregadores
Sistemas Operacionais
❚ Como um programa é construído até ser executado?
❙ Montadores (assemblers): responsáveis por traduzir programas escritos em
linguagem de montagem (assembly) para linguagem de máquina
! Compiladores: traduzem programa escrito em linguagem de programação
❙ Ligadores (linkers): une diferentes partes de um mesmo programa
! Permite desenvolvimento de forma modular
❙ Carregadores (loaders): transfere um programa para a memória principal para
que seja executado
Anexo A
Revisão: Fev/2003
Oliveira, Carissimi, Toscani
2a edição
Instituto de Informática - UFRGS
Montadores, ligadores e carregadores
2
Sistemas Operacionais
Montador, ligador e carregador (1)
Montador, ligador e carregador (2)
Módulo A
Fonte
Montador/Carregador
Montador
Carregador (SO)
Memória
Arquitetura 2 - Montador e carregador independentes
Sistemas Operacionais
3
Montador
Montador
Objeto A
Objeto B
Objeto C
Ligador
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
Fonte
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
Arquitetura 1 - Montador e carregador integrados
Executável
Módulo B
Memória
Executável
Carregador (SO)
Memória
Arquitetura 3 - Montador, ligador e carregador independentes
Sistemas Operacionais
4
Descrição de uma máquina hipotética
Conjunto de instruções da máquina hipotética
❚ Arquitetura:
Opcode
Formato 2:
Opcode
Endereço do operando
Formato 3:
Opcode
Endereço do primeiro operando
Endereço do segundo operando
Oliveira, Carissimi, Toscani
Formato 1:
Instituto de Informática - UFRGS
1 acumulador (acc) de 16 bits
1 apontador de instruções (program counter) de 16 bits
Memória de 216 palavras de 16 bits
3 formatos de instruções
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❙
❙
❙
❙
5
Sistemas Operacionais
Opcode
Simbólico
ADD
SUB
MUL
DIV
JMP
JMPN
JMPP
JMPZ
COPY
LOAD
STORE
INPUT
OUTPUT
STOP
Opcode
Numérico
01
02
03
04
05
06
07
08
09
10
11
12
13
14
Tamanho
2
2
2
2
2
2
2
2
3
2
2
2
2
1
Número de
Operandos
1
1
1
1
1
1
1
1
2
1
1
1
1
0
Ação
ACC ← ACC + mem(OP)
ACC ← ACC − mem(OP)
ACC ← ACC × mem(OP)
ACC ← ACC ÷ mem(OP)
PC ← OP
se ACC<0 então PC← OP
se ACC>0 então PC← OP
se ACC=0 então PC← OP
mem(OP2) ← mem(OP1)
ACC ← mem(OP)
mem(OP) ← ACC
mem(OP) ← entrada
saída ← mem(OP)
Suspende execução
6
Sistemas Operacionais
Montador (assembler)
Conceitos básicos
❚ Responsável por traduzir programas escritos em linguagem de
montagem (assembly) para linguagem de máquina
❚ Sintaxe típica de programas de montagem
❙ [rótulo:]
[operação] [operando1][,operando2] [;comentários]
Sistemas Operacionais
❙ Símbolo empregado para representar uma posição de memória
Oper
13
14
13
14
15
15
N1:
N2:
N3:
INPUT
INPUT
LOAD
ADD
STORE
OUTPUT
STOP
SPACE
SPACE
SPACE
N1
N2
N1
N2
N3
N3
❚ Operação:
7
❙ Opcodes simbólicos: representam instruções
❙ Pseudo-instruções(diretivas): operações que orientam a atuação do montador
Oliveira, Carissimi, Toscani
Opcode
12
12
10
01
11
13
14
??
??
??
Instituto de Informática - UFRGS
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❚ Rótulo:
End.
0
2
4
6
8
10
12
13
14
15
❚ Operandos:
❙ Posições de memória, registradores, constantes, etc...
❚ Comentário
Sistemas Operacionais
8
Funções básicas de um montador
Substituir opcodes simbólicos por opcodes numéricos
Substituir endereços simbólicos por endereços numéricos
Reservar espaço para dados
Gerar constantes em memória
❚ Demarcação de início/fim do programa fonte
❙ begin/end
❚ Reserva de espaço para variáveis
❙ e.g.: space, db, dw, dd
Sistemas Operacionais
❙ e.g.: const
❚ Contador de posições
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❚ Geração de constantes
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❚
❚
❚
❚
Diretivas básicas de montadores
9
❙ Reconhece todos os símbolos definidos pelo programador
! Armazena símbolos e o respectivo valor em uma tabela
❙ Geração do código objeto
Oliveira, Carissimi, Toscani
❚ Estruturas de dados empregadas:
Tabela de instruções
Tabela de diretivas
Tabela de símbolos
Contador de posições
11
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❚ Segunda passagem:
Instituto de Informática - UFRGS
❙ e.g.: equ, set
10
Primeira passagem
❚ Realiza duas leituras do arquivo fonte
❚ Primeira passagem:
Sistemas Operacionais
❚ Definições de sinônimos
Sistemas Operacionais
Algoritmo clássico de duas passagens
❙
❙
❙
❙
❙ e.g.: org, origin
00
03
06
08
10
12
14
16
18
20
22
25
28
30
32
33
34
35
36
37
09
09
12
13
10
01
11
02
07
13
09
09
05
13
14
00
01
??
??
??
38
??
??
??
??
??
??
??
??
??
??
??
??
??
10
??
??
??
COPY
COPY
INPUT
OUTPUT
FRONT: LOAD
ADD
STORE
SUB
JMPP
OUTPUT
??
COPY
??
COPY
JMP
FINAL: OUTPUT
STOP
ZERO: CONST
ONE:
CONST
OLDER: SPACE
OLD:
SPACE
NEW:
SPACE
Sistemas Operacionais
ZERO,OLDE
ONE,OLD
LIMIT
OLD
OLDER
OLD
NEW
LIMIT
FINAL
NEW
OLD,OLDER
NEW,OLD
FRONT
LIMIT
Tabela de Símbolos
Símbolo Valor
FRONT
FINAL
ZERO
ONE 34
OLDER
OLD 36
NEW 37
LIMIT
10
30
33
35
38
0
1
LIMIT: SPACE
12
38
??
33
34
38
36
35
36
37
38
30
37
36
37
10
38
35
36
COPY
COPY
INPUT
OUTPUT
FRONT: LOAD
ADD
STORE
SUB
JMPP
OUTPUT
35
COPY
36
COPY
JMP
FINAL: OUTPUT
STOP
ZERO: CONST
ONE:
CONST
OLDER: SPACE
OLD:
SPACE
NEW:
SPACE
ZERO,OLDE
ONE,OLD
LIMIT
OLD
OLDER
OLD
NEW
LIMIT
FINAL
NEW
OLD,OLDER
NEW,OLD
FRONT
LIMIT
❚ Valor absoluto são aqueles cujo valor final independem da posição
onde o programa será carregado na memória
Tabela de Símbolos
Símbolo Valor
FRONT
FINAL
ZERO
ONE 34
OLDER
OLD 36
NEW 37
LIMIT
❙ e.g.: opcodes, constantes
10
30
33
❚ Valor relativo são aqueles cujo valor final dependem da posição
onde o programa será carregado na memória
35
38
0
1
LIMIT: SPACE
Sistemas Operacionais
1
1
TIP
14
Atributos dos símbolos
end.
Opcode operando
0:
0:
2:
4:
6:
8:
10:
12:
14:
15:
16:
17:
12a
12a
10a
01a
01a
11a
13a
14a
??a
??a
06a
❚ Dois atributos básicos:
❙ Nome e valor
15r
16r
17r
15r
16r
17r
17r
❚ Outros atributos:
❙ Valor absoluto ou valor relativo
❙ Tamanho da variável
Instituto de Informática - UFRGS
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
N1:
N2:
N3:
6
N1
N2
N3
N1
N2
N3
N3
❙ Procedimento de relocação
Sistemas Operacionais
Exemplo valor absoluto versus relativo
SET
INPUT
INPUT
LOAD
ADD
ADD
STORE
OUTPUT
STOP
SPACE
SPACE
CONST
❚ Necessidade de corrigir parte do código (valores relativos) para ficar
coerente com o endereço de carga do programa
13
Sistemas Operacionais
TIP:
❙ e.g: labels, variáveis
Oliveira, Carissimi, Toscani
09
09
12
13
10
01
11
02
07
13
09
09
05
13
14
00
01
??
??
??
Instituto de Informática - UFRGS
00
03
06
08
10
12
14
16
18
20
22
25
28
30
32
33
34
35
36
37
Valor absoluto x relativo
15
Oliveira, Carissimi, Toscani
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
Segunda passagem
Sistemas Operacionais
16
Instrução não identificada
Número inválido de operandos
Tipo inválido de operandos
Símbolo redefinido
Símbolo indefinido
❚ Objetivo é economizar uma segunda passagem
❚ Geração de uma lista de pendências para conter as referências a
símbolos usados antes de serem definidos
Oliveira, Carissimi, Toscani
❙ Na tabela de símbolos, para uma referência ainda não definida, o valor da
entrada é um ponteiro para uma lista de posições onde o símbolo é utilizado
Instituto de Informática - UFRGS
❚
❚
❚
❚
❚
Montador de uma passagem
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
Tratamento de erros
17
Sistemas Operacionais
Sistemas Operacionais
Macros
Sub-rotinas versus macros
❚ Empregado para simplificar a construção de programas
❚ Construções semelhantes a subrotinas
❚ Sub-rotinas
❙ Código aparece na memória do computador apenas uma vez
❙ Chamada desvia a execução do programa para a sub-rotina
❙ Implementada por instruções de máquina
❙ Associação de nomes a trecho de códigos repetidos muitas vezes
❚ Macros
Fonte sem macros
Montador
19
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
Processador de Macros
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
Fonte com macros
Sistemas Operacionais
18
❙ Código aparece na memória do computador quantas vezes a macro for
chamada
❙ Chamada insere no programa o código da macro
❙ Implementada pelo montador
❚ Ambas admitem parâmetros
Sistemas Operacionais
20
Princípio de funcionamento
Ligadores
❚ Introdução de duas novas diretivas: MACRO e ENDMACRO
❚ Tarefas básicas:
❙ Delimitação do corpo da macro
❙ Juntar diversos arquivos objetos em um único arquivo executável
❙ Resolver referências cruzadas
! Quando o programador usa, em um módulo, um símbolo que foi definido
em outro módulo
Processador
de
macros
COPY
COPY
COPY
. . .
A, TEMP
B, A
TEMP, B
COPY
COPY
COPY
A, TEMP
B, A
TEMP, B
Sistemas Operacionais
Módulo A
Oliveira, Carissimi, Toscani
MACRO
COPY
A, TEMP
COPY
B, A
COPY
TEMP, B
ENDMACRO
. . .
TROCA
. . .
TROCA
Instituto de Informática - UFRGS
TROCA:
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❚ Chamada a macro corresponde a usar o seu nome como operação
❚ Operação de expansão
21
...
CALL SUBROT
...
SUBROT:
...
22
Tabela de uso
❚ Módulos são montados de forma completamente independente
❚ Inserida pelo montador no código objeto
❚ Indica quais símbolos externos ao módulo foram utilizados e onde,
no código objeto, eles foram referenciados
❚ Ligador utiliza informações da tabela de uso para realizar as
correções necessárias
❚ Formato do arquivo objeto (saída do montador):
❙ Módulos podem ser bibliotecas
! Código fonte não conhecido
❚ Símbolos não conhecidos/definidos dentro de um módulo são
denominados de referência cruzada ou referência não resolvida
23
❙ Ligador deve “conhecer” o formato
Código
objeto
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❙ Montador necessita “informar” essa situação
! Tabela de uso
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
...
Sistemas Operacionais
Características do procedimento de montagem
Sistemas Operacionais
Módulo B
Tabela de
uso
Sistemas Operacionais
24
Problemas com o algoritmo básico de montagem
Diretiva EXTERN
❚ Programador informa quais referências (símbolos) empregadas são
definidas em outros módulos
❙ Diferenciação entre erro “símbolo não-definido” e “simbolo não-conhecido” no
momento da montagem
❙ Opção 1: considerar toda referência não resolvida como símbolo externo
! Desvantagem: erro de montagem é detectado apenas na fase de ligação
❙ Opção 2: incluir diretivas de montagem que obriguem o programador a
declarar explicitamente que está utilizando um símbolo externo
❚ Símbolos declarados como EXTERN fazem parte da tabela de uso
❚ Noção de símbolos locais e símbolos globais
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❚ No algoritmo original do montador, uma referência não resolvida
(símbolo) é considerado erro de programação
❚ Agora existe a hipótese de que o símbolo é definido em outro
módulo
❚ Como agir ?
25
Sistemas Operacionais
Sistemas Operacionais
Diretiva PUBLIC
Código
objeto
Tabela de
Definições
27
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❙ Sub-conjunto da tabela de símbolos
❙ Incluída no arquivo objeto
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
26
Resumo
❚ Programador informa quais símbolos serão exportados por um
módulo, podendo ser referenciados por outros módulos
❚ Símbolo é definido localmente porém tem um escopo global
❚ Símbolos PUBLIC formam a tabela de definições
Sistemas Operacionais
❙ Símbolo é local ao módulo ao qual foi definido
❙ Símbolo é global quando for definido em um módulo e utilizado por outro
! Necessário indicar isso (outra diretiva: PUBLIC)
❚ Diretiva EXTERN permite informar quais símbolos são definidos
externamente (importação)
❚ Diretiva PUBLIC indica que um símbolo pode ser utilizado em outros
módulos (exportação)
❚ Tabela de uso mantém quais símbolos externos foram empregados
em um módulo e onde, no código, foram utilizados
❚ Tabela de definições reúne todos os símbolos (e respectivos
atributos) tornados públicos
Sistemas Operacionais
28
Alterações no algoritmo básico do montador
Exemplo de geração de módulos
❚ Tabela de símbolos deve informar se símbolo é local ou externo
❚ Incluir tratamento da diretiva EXTERN e PUBLIC
❚ Supor um programa que é composto por dois módulos A e B
Objeto A
Fonte A
❚ Tabela de uso e tabela de definições devem, após a montagem, ser
incluídas no arquivo objeto gerado
❚ Tratamento de erros:
❙ Redefinição de símbolos (locais e globais devem ter nomes distintos)
❙ Símbolo exportado mas não definido
❙ Simbolo externo foi exportado
29
Sistemas Operacionais
Montador
30
Módulo B
Tabela de Símbolos: Símbolo Valor Rel/Abs Externo
TAM - X
0
0
0
0
10
10
11
Tabela de Definições:Símbolo Valor
VAL
L1
Tabela de Uso:
11
10
r
a
a
a
a
r
r
VAL:
L1:
X:
Rel/Abs
r
r
Símbolo End.
Operação
Y
Y
Y
MOD_B
X
+
+
+
+
-
1
5
7
9
11
MOD_B:
n
s
s
s
n
n
n
Atenção: valores em decimal
Sistemas Operacionais
31
Oliveira, Carissimi, Toscani
L1:
VAL:
VAL
L1
10
Y
VAL
Y
Y + 2
MOD_B
MOD_A
X
Y
MOD_B
TAM
L1
VAL
Instituto de Informática - UFRGS
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
TAM:
BEGIN
EXTERN
EXTERN
EXTERN
PUBLIC
PUBLIC
EQU
INPUT
LOAD
ADD
STORE
JMP
STOP
CONST
END
Código
executável
Sistemas Operacionais
Módulo A
MOD_A:
X:
Y:
MOD_B:
Ligador
Objeto B
Fonte B
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
Montador
❙ Atributos da tabela de símbolo são copiados para a tabela de definições
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❙ Primeira passagem insere respectivo rótulo na tabela de uso (extern)
❙ Primeira passagem insere operando na tabela de definições (public)
Y:
TAM:
BEGIN
PUBLIC
PUBLIC
PUBLIC
EXTERN
EXTERN
EQU
OUTPUT
OUTPUT
OUTPUT
JMP
SPACE
CONST
END
Tabela de Símbolos: Símbolo Valor
MOD_B
VAL
L1
X
Y
TAM
X
Y
MOD_B
5
Y
VAL
TAM
L1
3
10
0
0
0
5
8
11
Tabela de Definições:Símbolo Valor
X
Y
MOD_B
Tabela de Uso:
5
8
0
Rel/Abs
Externo
r
a
a
a
r
r
n
s
s
n
n
n
Rel/Abs
a
r
r
Símbolo Endereço Operação
VAL
L1
3
7
+
+
Atenção: valores em decimal
Sistemas Operacionais
32
Algoritmo básico de ligação (estática)
Exemplo de ligação módulos A e B
MOD_A:
X:
Y:
MOD_B:
❚ Efetua duas passagens sobre os arquivos objeto
❚ Primeira passagem:
❙ Recolhe as informações contidas nas tabelas de definições e compõem uma
tabela global de definições
TAM:
12a
10a
01a
11a
07a
14a
10a
❚ Necessidade de realizar relocação
❙ Módulos são montados considerando endereço de origem como zero
33
Rel/Abs
11
10
5
8+12=20
0+12=12
r
r
a
r
r
Símbolo
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
VAL
L1
End.
12
14
16
18
20
21
22
23
Opcode
13a
13a
13a
05a
0a
0a
0a
10a
Sistemas Operacionais
Endereço (uso)
3 + 12 = 15
7 + 12 = 19
Operando
8r + 12 = 20r
0a
11r + 12 = 23r
0a
Operação
+
+
End.
12
14
16
18
20
21
22
23
Opcode
13a
13a
13a
05a
0a
0a
0a
10a
Operando
20r
11r
(0a+11r)
23r
10r
(0a+10r)
35
Oliveira, Carissimi, Toscani
Valor
VAL
L1
X
Y
MOD_B
VAL:
L1:
X:
VAL
L1
10
Y
VAL
Y
Y + 2
MOD_B
13a
13a
13a
05a
0a
10a
TAM - X
Tabela de Definições:
8r
0r
11r
0a
0a 0a Y:
TAM:
END
BEGIN
PUBLIC
PUBLIC
PUBLIC
EXTERN
EXTERN
EQU
OUTPUT
OUTPUT
OUTPUT
JMP
SPACE
CONST
Símbolo
Valor
Rel/Abs
VAL
L1
X
Y
MOD_B
11
10
5
8+12=20
0+12=12
r
r
a
r
r
X
Y
MOD_B
5
Y
VAL
TAM
L1
3
10
34
Arquivo executável (módulos A e B)
Instituto de Informática - UFRGS
Tabela de Uso (B):
Símbolo
L1:
VAL:
MOD_B:
Sistemas Operacionais
Ligação relativa ao módulo B (apenas)
Tabela de Definições:
0a
11r
0a
2a
0a
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❙ Cópia cada código objeto para o arquivo executável
❙ Consulta a tabela de uso de cada arquivo objeto e resolve a referência
consultando a tabela global de definições
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❚ Segunda passagem:
Sistemas Operacionais
BEGIN
EXTERN
EXTERN
EXTERN
PUBLIC
PUBLIC
EQU
INPUT
LOAD
ADD
STORE
JMP
STOP
CONST
END
End.
00
02
04
06
08
10
11
12
14
16
18
20
21
22
23
Opcode
12a
10a
01a
11a
07a
14a
5a
13a
13a
13a
05a
0a
0a
0a
10a
Sistemas Operacionais
Operando
20r
11r
20r
22r
12r
❚ Mapa de relocação somente é
inserido no executável quando o
carregador é relocador
20r
11r
23r
10r
36
Ligação dinâmica (load time)
Ligação dinâmica (run time)
❚ Ligação é executada durante a execução
❙ Flexibilidade para incorporar novas versões de módulos
! Não necessita religar todos módulos para gerar um executável
❙ Oferece mecanismo de base para compartilhamento de código
! Vários executáveis não precisam incorporar um mesmo módulo
❙ Facilita desenvolvimento de software por terceiros
! e.g.: conceito de módulos no linux (comandos insmod e rmmod)
Sistemas Operacionais
Oliveira, Carissimi, Toscani
❙ Dynamic Linking Libraries (DLL)
! Mecanismo baseado em stubs
Instituto de Informática - UFRGS
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❚ Módulo aplicativo é carregado na memória
❚ Referência a um módulo externo faz com que o carregador busque
o módulo “faltante” e realize a ligação
❚ Vantagens:
37
Verificar se programa existe
Dimensionar a quantidade de memória necessária
Solicitar ao sistema operacional a memória necessária
Copiar código executável do arquivo para a memória
Ajustar os endereços do código executável para refletir a posição onde o
programa foi carregado
❚ Tipicamente integrado ao sistema operacional
39
Oliveira, Carissimi, Toscani
❚ Carregador absoluto
❚ Carregador relocador
❚ Carregador dinâmico (run time)
Instituto de Informática - UFRGS
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
38
Tipos de carregador
❚ Módulo responsável por copiar um programa executável para a
memória e prepará-lo para execução
❚ Principais tarefas:
Sistemas Operacionais
❙ Economia de memória
! Mantém em memória porções realmente utilizadas
❙ Flexibilidade para incorporar novas versões de módulos
! Não necessita religar todos módulos para gerar um executável
Sistemas Operacionais
Carregador
❙
❙
❙
❙
❙
❚ Referências externas permanecem não resolvidas no módulo já
carregado na memória e em execução
❚ Chamadas a referências não resolvidas fazem o sistema
operacional localizar o módulo “faltante”, carregá-lo e ligá-lo
❚ Vantagem:
Sistemas Operacionais
40
Carregador absoluto
Carregador relocador
❚ Considera que um dado módulo é carregado sempre na mesma
posição
❚ Código (carregador) absoluto impõem restrições
❚ Solução é gerar código com endereços relativos a um ponto bem
definido
❚ Referências são definidas pelo programador ou em tempo de
compilação (montagem)
❚ Definidas pelo programador (desvantagens):
❚ Solução: definir referências em tempo de compilação (montagem)
❙ Uso de símbolos para representar referências
Sistemas Operacionais
❚ Carga na posição x implica em adicionar x a cada referência de
memória do módulo
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❙ Início do programa
❙ Programador deve conhecer previamente onde programa será carregado
❙ Inclusão/remoção de instruções no módulo implica em redefinir endereços
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❙ Todas referências são específicas a um endereço
41
Sistemas Operacionais
Carregador dinâmico (run time)
Amarração de endereços em tempo de carga
❚ Tempo de programação
❙ Movimento de processos entre memória e disco para maximizar uso do
processador (típico de sistemas multiprogramados)
❙ Processos não retornam necessariamente na mesma posição que
executavam anteriormente
! Relocação já foi feita na primeira carga (Que fazer ?)
❙ Todos os endereços são definidos diretamente pelo programador
❚ Tempo de compilação ou montagem
❙ Endereços devem ser na forma relativa ao início do módulo
❙ Uso de hardware específico
! e.g.: registradores de base
43
❚ Tempo de carga
❙ Compilador/montador gera endereços relativos aos quais são resolvidos pelo
carregador
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❙ Endereços são definidos através de símbolos e resolvidos no momento da
compilação/montagem
❚ Solução é executar a relocação no momento em que a posição for
referenciada
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❚ Carregador relocador não é adequado quando existe swapping
Sistemas Operacionais
42
❚ Tempo de execução
❙ Programa contém endereços relativos os quais são convertidos em tempo de
execução (dinamicamente) para end. absolutos por hardware específico
Sistemas Operacionais
44
Formas básicas de operação (1)
Formas básicas de operação (2)
❚ Forma 3:
❚ Forma 2:
❙ Não existe a fase de ligação
❙ Endereço de carga não é conhecido em tempo de montagem
❙ Montador gera código executável considerando endereço zero
! Necessidade de corrigir endereços
! Carregador Relocador
Sistemas Operacionais
❙ Existe a fase de ligação
❙ Endereço de carga é conhecido em tempo de ligação
❙ Ligador gera código executável para o endereço de carga
! Não há necessidade de corrigir endereços
! Carregador Absoluto
❚ Forma 4:
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❙ Não existe a fase de ligação
❙ Endereço de carga é conhecido em tempo de montagem
❙ Montador gera o código executável para um determinado endereço de carga
! Não há necessidade de corrigir endereços
! Carregador Absoluto
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❚ Forma 1:
45
Sistemas Operacionais
Características gerais de carregador
❚ Necessário corrigir o código
❙ e.g.: Sistema com paginação empregam carregadores absolutos
47
❚ Código gerado pelo montador (compilador) deve incluir informação
de quais posições devem ser corrigidas
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❙ Valores absolutos: não necessitam de correção
! e.g.: códigos de operação, constantes, etc...
❙ Valores relativos: necessitam correção
! e.g.: endereços
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
46
Príncipio básico carregador relocador
❚ Carregador independe da existência de ligador
❚ Tipo do carregador depende apenas do fato do endereço de carga
ser conhecido ou não no momento da geração do executável
❚ Fortemente relacionado com gerência de memória do sistema
operacional
Sistemas Operacionais
❙ Existe a fase de ligação
❙ Endereço de carga não é conhecido em tempo de montagem
❙ Ligador gera código executável para o endereço zero
! Necessidade de corrigir endereços
! Carregador Relocador
Sistemas Operacionais
48
Exemplo
Valor
0
10
15
18
10
N
INCR
N+1
INCR
N+2
N+1
N+2
3
DEZ
12a
01a
11a
01a
11a
13a
13a
14a
00a
00a
00a
10a
15r
18r
16a
18r
17a
16r
17r
Carga endereço 200:
12
01
11
01
11
13
13
14
00
00
00
10
❚ Imagem de memória
215
218
216
218
217
216
217
❙ Contém apenas o código a ser executado
❙ Carga consiste em copiar byte a byte o contéudo do arquivo para a memória
❚ Código objeto/executável mais informações adicionais
Rel./Ab
r
a
r
r
Sistemas Operacionais
49
Leituras complementares
❚ R. Oliveira, A. Carissimi, S. Toscani; Sistemas Operacionais. Editora
Sagra-Luzzato, 2001.
Anexo A
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
❙
Sistemas Operacionais
51
Oliveira, Carissimi, Toscani
Símbolo
PROG
DEZ
N
INCR
Código executável:
BEGIN
EQU
INPUT
ADD
STORE
ADD
STORE
OUTPUT
OUTPUT
STOP
SPACE
CONST
END
Instituto de Informática - UFRGS
N:
INCR:
Oliveira, Carissimi, Toscani
Instituto de Informática - UFRGS
PROG:
DEZ:
Formato de arquivos
❙ Número mágico
! Constante arbitrária que identifica o formato do arquivo
❙ Mapa de relocação
! bit-map, lista de endereços
❙ Tamanho total do programa
Sistemas Operacionais
50
Download

Anexo A