EA869 Montadores Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato Objetivos • Introduzir o conceito de software de sistema. • Conhecer as funções básicas de um sistema operacional. • Conhecer a função e o modo de operação do montador (Assembler). Recordando a disciplina... Problema Estruturas de dados Representação numérica Algoritmo NÍVEL CONCEITUAL Linguagem Assembly HIERARQUIA DE LINGUAGENS Arquitetura de Computadores HARDWARE Quem gerencia os recursos do computador? SISTEMA OPERACIONAL SOFTWARE DE SISTEMA Sistema Operacional O que é? É um programa ou um conjunto de programas cuja função é gerenciar os recursos do sistema (definir qual programa recebe atenção do processador, gerenciar a memória, criar um sistema de arquivos, etc), fornecendo uma interface segura e simples entre o computador e o usuário. CPU COMPUTADOR UC MEMÓRIA BANCO DE REGISTRADORES UAL DMA Interf. Entrada/Saída Sistema Operacional O que é? É um programa ou um conjunto de programas cuja função é gerenciar os recursos do sistema (definir qual programa recebe atenção do processador, gerenciar a memória, criar um sistema de arquivos, etc), fornecendo uma interface segura e simples entre o computador e o usuário. Quais são suas funções? GERENCIAMENTO DE PROCESSOS Garantir multiprocessamento (multicore). Pipeline. Definir tempo para cada processo e alterná-los quando necessário (threads). GERENCIAMENTO DE MEMÓRIA Acesso completo à memória do sistema. Permitir que os processos do usuário tenham acesso seguro à memória. Criar e gerenciar memória virtual. INTERFACE COM O USUÁRIO Os SOs fornecem uma abstração de hardware para que seus recursos possam ser usados de maneira correta e padronizada. Há uma interface para que o usuário possa desfrutar dos recursos do sistema. Sistema Operacional Evolução Primeiro SO: Pessoas! Sistema Operacional Evolução 1980: MS-DOS Sistema Operacional Evolução 1985: WINDOWS 1.0 Sistema Operacional Evolução 1990: WINDOWS 3.0 Sistema Operacional Evolução WINDOWS 95 Sistema Operacional Evolução 2007/2008: S.O. MOBILE Sistema Operacional • O Sistema Operacional faz parte de um conjunto de programas que define a maneira como os diversos elementos de hardware devem operar de modo a tornar o computador funcional. • A estes programas denominamos... SOFTWARES DE SISTEMA USUÁRIOS SOFTWARE DE APLICAÇÃO SOFTWARE DE SISTEMA HARDWARE Softwares de Sistema Quatro outros programas completam a lista dos softwares de sistema: MONTADORES Foco deste tópico CARREGADORES Próximo tópico LIGADORES Próximo tópico COMPILADORES Tema da disciplina EA879 Montadores • Um dos processos mais importantes de um computador é a montagem, ou seja, a tradução de um programa em linguagem Assembly para a linguagem de máquina, e a preparação para seu carregamento na memória principal para ser executado. MONTADOR AND R1, #3 MOV R1 , R2 SUB R2, #3 MUL R3 , R1, R2 LDR R3 , [R1]! ROT:MOV R2 , #4 STR R1 , [R2,R3] End Conteúdo Montadores • Um dos processos mais importantes de um computador é a montagem, ou seja, a tradução de um programa em linguagem Assembly para a linguagem de máquina, e a preparação para seu carregamento na memória principal para ser executado. OBSERVAÇÃO! MONTADOR AND R1, #3 MOV R1 , R2 SUB R2, #3 MUL R3 , R1, R2 LDR R3 , [R1]! ROT:MOV R2 , #4 STR R1 , [R2,R3] End 1A 1B 1C AND R1, #3 1D 1E 1F 20 Tabela de instruções Como os processadores trabalham com Conteúdo palavras de 16, 32 e até de 64 bits, não é 150B conveniente representar os valores 1F0A da memória em binário.AB3F A partir de agora, para mostrar a memória,237C iremos usar, tanto para o endereço 1A1B quanto para o conteúdo, a FFFA representação hexadecimal. EA86 Montadores O QUE É? É um programa cujos dados de entrada são sequências de caracteres que constituem o programa em linguagem de montagem ou Assembly, e cujo resultado é um conjunto de palavras (sequências de bits) que constituem o programa em linguagem de máquina. O programa gerado, em linguagem de máquina, pode ser carregado na memória e executado ("load and go"), ou, então, ser a entrada de outro programa, o carregador, que após algum processamento para adequar os endereços ao bloco de memória disponível, carrega-o na memória principal para ser executado. COMO É FEITA A TRADUÇÃO? O montador possui Tabelas com os mnemônicos de todas as instruções do computador e os símbolos (rótulos) manipuláveis. Além disso, pseudo-instruções auxiliam na tomada de decisão dos endereços de montagem. Montadores • Vamos entender melhor o funcionamento do montador a partir de um exemplo. • Seja o programa abaixo. Queremos montá-lo na memória do processador: A: AND R1, #3 MOV R1 , #5 SUB R2, A 1. Onde o programa será montado? Para o montador saber o local (endereço de memória) que será montado um código, o programador precisa, ao escrever o programa, fornecer algumas informações através das pseudo-instruções. End Conteúdo Montadores • Vamos entender melhor o funcionamento do montador a partir de um PSEUDO-INSTRUÇÕES exemplo. É um tipo especial de instrução não executável, que • Seja o programa abaixo. Queremos montá-lo na memória do processador: insere valores em posições de memória, reserva ORG 1F e organiza na memória o local End Conteúdo espaço de instalação A: AND #3 das R1, instruções. Quem lê e “executa” as pseudoMOV R1 , #5 instruções é o montador ao alocar o programa SUB R2, A Assembly na memória. Em resumo, pseudo-instruções são regras que ajudam 2. Montando oo programa memória montador na a definir o conteúdo de cada posição da memória ao instalar um programa. DS X Reserva X palavras da memória a partir da posição da pseudo-instrução; DW V Posição de memória desta pseudoinstrução recebe o valor V; ORG Y A próxima instrução é alocada na posição Y de memória; ADR rótulo Posição recebe o endereço de “rótulo”; Rot: EQU Z Rótulo Rot está associado ao valor definido por Z. Montadores • Vamos entender melhor o funcionamento do montador a partir de um exemplo. • Seja o programa abaixo. Queremos montá-lo na memória do processador: ORG 1F A: AND R1, #3 MOV R1 , #5 SUB R2, A 2. Montando o programa na memória Montador lê linha a linha todas as instruções e/ou pseudo-instruções do programa. Ao ler uma pseudo-instrução, ele busca na TABELA DE PSEUDO-INSTRUÇÕES (TPI) informações para executá-la. Ao ler uma instrução, ele a busca na TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) o código de máquina correspondente e monta a instrução na memória. End Conteúdo Montadores • Vamos entender melhor o funcionamento do montador a partir de um exemplo. • Seja o programa abaixo. Queremos montá-lo na memória do processador: ORG 1F A: AND R1, #3 MOV R1 , #5 SUB R2, A End 1F 2. Montando o programa na memória TABELA DE PSEUDO-INSTRUÇÕES • Relaciona a pseudo-instrução com a rotina que o montador deve chamar para processá-la. MENÔNICO COMP (BYTES) ROTINA DE TRAT. ORG - RORG DW 1 RDW DS i RDS END ... REND ... ... Conteúdo Montadores • Vamos entender melhor o funcionamento do montador a partir de um exemplo. • Seja o programa abaixo. Queremos montá-lo na memória do processador: ORG 1F A: AND R1, #3 MOV R1 , #5 SUB R2, A 2. Montando o programa na memória TABELA DE INSTRUÇÕES DE MÁQUINA • Associa o mnemônico de uma instrução com o seu código de máquina . MNC C. M. COMP (BYTES) ROT. DE TRAT AND R1 2A 2 RANDR2 MOV R1 1E 2 RMOVR1 SUB R2 F3 2 RSUBR2 ... ... ... ... End Conteúdo 1F 2A 20 03 Montadores • Vamos entender melhor o funcionamento do montador a partir de um exemplo. • Seja o programa abaixo. Queremos montá-lo na memória do processador: ORG 1F A: AND R1, #3 MOV R1 , #5 SUB R2, A 2. Montando o programa na memória TABELA DE INSTRUÇÕES DE MÁQUINA • Associa o mnemônico de uma instrução com o seu código de máquina . MNC C. M. COMP (BYTES) ROT. DE TRAT AND R1 2A 2 RANDR2 MOV R1 1E 2 RMOVR1 SUB R2 F3 2 RSUBR2 ... ... ... ... End Conteúdo 1F 2A 20 03 21 1E 22 05 Montadores • Vamos entender melhor o funcionamento do montador a partir de um exemplo. • Seja o programa abaixo. Queremos montá-lo na memória do processador: ORG 1F A: AND R1, #3 MOV R1 , #5 SUB R2, A 2. Montando o programa na memória TABELA DE INSTRUÇÕES DE MÁQUINA • Associa o mnemônico de uma instrução com o seu código de máquina . MNC C. M. COMP (BYTES) ROT. DE TRAT AND R1 2A 2 RANDR2 MOV R1 1E 2 RMOVR1 SUB R2 F3 2 RSUBR2 ... ... ... ... End Conteúdo 1F 2A 20 03 21 1E 22 05 F3 1F 23 24 Montadores • Um montador é um programa que lê um código em Assembly (Código Fonte), traduz para o código de máquina (Programa em Linguagem de Máquina) e o monta na memória. • Algumas diretivas auxiliam o montador a decidir conteúdos de memória e em que local o código será instalado. Estas diretivas são conhecidas como pseudo-instruções. • Para traduzir e montar o código na memória, o montador segue alguns passos sequencialmente: Lê Linha do Código Assembly Instrução Busca o C.M., na tabela TIM PseudoInstrução Busca Instruções de execução na tabela TIP Monta inst. na memória Define endereços / monta dados na memória Montadores • Vamos agora para um novo exemplo. • Seja o programa abaixo. Queremos montá-lo na memória do processador: End Conteúdo 1F ORG 1F DADO: DS 3 MOV R1, DADO SUB R2, ROT ROT: DW 10 TABELA DE PSEUDO-INSTRUÇÕES (TPI) MNENÔNICO COMP (BYTES) ROTINA DE TRAT. ORG - RORG DW 1 DS TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) MNC C. M. COMP (BYTES) ROT. DE TRAT RDW AND R1 2A 2 RANDR2 i RDS MOV R1 1E 2 RMOVR1 END - REND SUB R2 F3 2 RSUBR2 ... ... ... ... ... ... ... Montadores • Vamos agora para um novo exemplo. • Seja o programa abaixo. Queremos montá-lo na memória do processador: ORG 1F DADO: DS 3 MOV R1, DADO SUB R2, ROT ROT: DW 10 End Conteúdo 1F 00 20 00 21 00 TABELA DE PSEUDO-INSTRUÇÕES (TPI) MNENÔNICO COMP (BYTES) ROTINA DE TRAT. ORG - RORG DW 1 DS TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) MNC C. M. COMP (BYTES) ROT. DE TRAT RDW AND R1 2A 2 RANDR2 i RDS MOV R1 1E 2 RMOVR1 END - REND SUB R2 F3 2 RSUBR2 ... ... ... ... ... ... ... Montadores • Vamos agora para um novo exemplo. • Seja o programa abaixo. Queremos montá-lo na memória do processador: ORG 1F DADO: DS 3 MOV R1, DADO SUB R2, ROT ROT: DW 10 End Conteúdo 1F 00 20 00 21 00 22 1E 23 1F TABELA DE PSEUDO-INSTRUÇÕES (TPI) MNENÔNICO COMP (BYTES) ROTINA DE TRAT. ORG - RORG DW 1 DS TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) MNC C. M. COMP (BYTES) ROT. DE TRAT RDW AND R1 2A 2 RANDR2 i RDS MOV R1 1E 2 RMOVR1 END - REND SUB R2 F3 2 RSUBR2 ... ... ... ... ... ... ... Montadores • Vamos agora para um novo exemplo. • Seja o programa abaixo. Queremos montá-lo na memória do processador: ORG 1F DADO: DS 3 MOV R1, DADO SUB R2, ROT ROT: DW 10 Como Neste momento, o montador ainda não conhece o endereço de ROT! solucionar?! End Conteúdo 1F 00 20 00 21 00 22 1E 23 24 1F F3 25 ??? TABELA DE PSEUDO-INSTRUÇÕES (TPI) MNENÔNICO COMP (BYTES) ROTINA DE TRAT. ORG - RORG DW 1 DS TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) MNC C. M. COMP (BYTES) ROT. DE TRAT RDW AND R1 2A 2 RANDR2 i RDS MOV R1 1E 2 RMOVR1 END - REND SUB R2 F3 2 RSUBR2 ... ... ... ... ... ... ... Montadores Problema: Muitas vezes, ao deparar-se com um rótulo, o montador pode não conhecer seu endereço ou significado por não ter processado este símbolo em instruções anteriores. ORG 1F DADO: DS 3 MOV R1, DADO SUB R2, ROT ROT: DW 10 Solução: Antes de começar a ler o código Assembly e montar o código de máquina na memória, o montador deve ler TODOS os SÍMBOLOS (RÓTULOS) do programa e definir previamente seus endereços. Os símbolos e seus endereços são alocados na TABELA DE SÍMBOLOS. Em seguida, o montador lê o código novamente e o monta na memória. MONTADOR DE DOIS PASSOS Montadores MONTADOR DE DOIS PASSOS End - Para realizar a tradução, os montadores sãoConteúdo geralmente ORG 1Fcomo Montadores de dois1F implementados Passos; 00 DADO: DS 3 - Os dois passos significam que o Montador deverá 00 ler o 20 MOV R1, DADO programa fonte duas vezes: SUB R2, ROT 21 00 ROT: DW 10 1E 22 • PASSO 1 1F 23 - Montador lê o código fonte 24 e determina os endereços para as referências simbólicas (rótulos) 25 a partir das pseudo-instruções, construindo a TABELA DE SÍMBOLOS. TABELA DE PSEUDO-INSTRUÇÕES (TPI) MNENÔNICO • PASSO COMP 2 (BYTES) ORG DW DS ROTINA DE TRAT. TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) MNC C. M. -O COMP ROT. DE (BYTES) TRAT mnemônicos RORG é lido novamente e os código fonte 1das instruções RDW AND R1 são2A substituídos 2 e rótulos porRANDR2 i códigos deRDS 2 RMOVR1 máquina. MOV R1 1E END - REND SUB R2 F3 2 RSUBR2 ... ... ... ... ... ... ... Montadores • Vamos então executar o passo 1 e definir a TABELA DE SÍMBOLOS antes de prosseguir com a montagem. End Conteúdo 1F 00 20 00 21 00 22 1E 23 24 1F ORG 1F DADO: DS 3 MOV R1, DADO SUB R2, ROT ROT: DW 10 TABELA DE SÍMBOLOS (TS) SÍMBOLO ENDEREÇO DADO 1F ROT 26 25 TABELA DE PSEUDO-INSTRUÇÕES (TPI) MNENÔNICO COMP (BYTES) ROTINA DE TRAT. ORG - RORG DW 1 DS TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) MNC C. M. COMP (BYTES) ROT. DE TRAT RDW AND R1 2A 2 RANDR2 i RDS MOV R1 1E 2 RMOVR1 END - REND SUB R2 F3 2 RSUBR2 ... ... ... ... ... ... ... Montadores • Vamos então executar o passo 1 e definir a TABELA DE SÍMBOLOS antes de prosseguir com a montagem. End Conteúdo 1F 00 20 00 21 00 22 1E 23 24 1F F3 25 26 ORG 1F DADO: DS 3 MOV R1, DADO SUB R2, ROT ROT: DW 10 TABELA DE SÍMBOLOS (TS) SÍMBOLO ENDEREÇO DADO 1F ROT 26 TABELA DE PSEUDO-INSTRUÇÕES (TPI) MNENÔNICO COMP (BYTES) ROTINA DE TRAT. ORG - RORG DW 1 DS TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) MNC C. M. COMP (BYTES) ROT. DE TRAT RDW AND R1 2A 2 RANDR2 i RDS MOV R1 1E 2 RMOVR1 END - REND SUB R2 F3 2 RSUBR2 ... ... ... ... ... ... ... Montadores • Vamos então executar o passo 1 e definir a TABELA DE SÍMBOLOS antes de prosseguir com a montagem. End Conteúdo 1F 00 20 00 21 00 22 1E 23 24 1F F3 25 26 26 10 ORG 1F DADO: DS 3 MOV R1, DADO SUB R2, ROT ROT: DW 10 TABELA DE SÍMBOLOS (TS) SÍMBOLO ENDEREÇO DADO 1F ROT 26 TABELA DE PSEUDO-INSTRUÇÕES (TPI) MNENÔNICO COMP (BYTES) ROTINA DE TRAT. ORG - RORG DW 1 DS TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) MNC C. M. COMP (BYTES) ROT. DE TRAT RDW AND R1 2A 2 RANDR2 i RDS MOV R1 1E 2 RMOVR1 END - REND SUB R2 F3 2 RSUBR2 ... ... ... ... ... ... ... Montadores • Conforme vimos anteriormente, o montador é um software de sistema, ou seja, por definição, um programa. • Apesar de termos visto intuitivamente o seu funcionamento, o montador é implementado em um computador a partir de algoritmos que executam o passo 1 e o passo 2. • Vamos conhecer esses dois algoritmos e montar o mesmo programa que montamos anteriormente... Montadores ALGORITMO DO PASSO 1 – PROCESSANDO SÍMBOLOS ORG 1F DADO: DS 3 MOV R1, DADO SUB R2, ROT ROT: DW 10 TPI MENÔNICO COMP. ORG - DW 1 DS i END - TIM Ii CP L 1 2 3 4 5 1F 22 24 26 27 3 2 2 1 TS MNC C. M. COMP. SÍMBOLO END. AND R1 2A 2 MOV R1 1E 2 DADO ROT 1F 26 SUB R2 F3 2 Montadores ALGORITMO DO PASSO 2 – GERANDO O CÓDIGO ORG 1F DADO: DS 3 MOV R1, DADO SUB R2, ROT ROT: DW 10 TPI MENÔNICO COMP. ORG - DW 1 DS i END - TIM Ii CP L 1 2 3 4 5 1F 22 24 26 27 3 2 2 1 TS MNC C. M. COMP. SÍMBOLO END. AND R1 2A 2 MOV R1 1E 2 DADO ROT 1F 26 SUB R2 F3 2 End Conteúdo 1F 20 21 00 00 00 22 1E 23 1F 24 F3 25 26 26 10 Montador de um passo • Realiza uma única passagem pelo código fonte. • A principal dificuldade em tentar montar um programa em uma única passagem envolve referências a rótulos/símbolos que ainda não foram definidos no programa fonte. • Como lidar com referências futuras? Quando o montador encontra um operando da instrução que é um símbolo ainda não definido, ele: Deixa o campo do operando da instrução vazio (tudo zero). Insere o símbolo usado como operando na tabela de símbolos, marcando esta entrada da tabela como não-resolvida. Adiciona o endereço do campo de operando da instrução que faz referência ao símbolo indefinido a uma lista de referências futuras associadas àquela entrada da tabela de símbolos. Quando o montador encontra a definição de um símbolo, ele insere o valor do contador de programa na entrada adequada dentro da tabela de símbolos. Se há uma lista de referências futuras associada a este símbolo, o montador insere o valor correto do símbolo em todas as instruções geradas previamente que estejam nesta lista. Desafio • Um montador de dois passos pode lidar com qualquer tipo de referência a símbolos futuros? • Exemplo: A EQU B A pseudo-instrução EQU associa a um rótulo (no caso, A) o valor do operando (B). Fácil de executar (passo 1) caso o valor de B tenha sido definido previamente. Mas e se B ainda não foi definido? O montador de dois passos que vimos não conseguiria lidar com esta situação. A razão desta limitação está associada ao fato de que as instruções são montadas no passo 2, quando todos os símbolos já estão na tabela de símbolos; as diretivas, porém, são “executadas” (têm efeito) apenas no passo 1, quando símbolos futuros ainda não foram encontrados. Por isso, pseudo-instruções, como EQU, não podem usar símbolos futuros. Observações • Tipicamente, o Montador executa sua atividade em dois passos: No Passo 1, constrói a Tabela de Símbolos, ou seja, determina os rótulos e seus endereços. No Passo 2, constrói o Programa em Linguagem de Máquina e o aloca na memória. • Por fim, nem sempre o programa em linguagem de máquina é alocado diretamente na memória pelo montador. Muitas vezes recorre-se a outro programa dedicado exclusivamente ao carregamento na memória. Esse programa é conhecido como CARREGADOR • Além disso, o programa pode utilizar recursos fornecidos por outras rotinas, desenvolvidas por outros programadores. Assim, é preciso realizar um outro processo que combina tais rotinas com o código montado. O programa que realiza esta tarefa é conhecido como LIGADOR