310 likes | 392 Views
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. Características dependentes da máquina.
E N D
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
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
Relocação • Os loaders que permitem relocação são chamados de loadersrelocadores 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
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
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
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
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
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
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
Link de programas • Programa-objeto de PROGA
Link de programas • Programa-objeto de PROGB
Link de programas • Programa-objeto de PROGC
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
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)
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)
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
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
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
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
Referências • Leland L Beck. “Desenvolvimento de software básico”. 2ª ed. Rio de Janeiro: Campus, 1993. 525p.