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