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