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... ProblemaAlgoritmo NÍVEL CONCEITUAL Estruturas de dados Linguagem Assembly Representação numérica Arquitetura de Computadores HIERARQUIA DE LINGUAGENS HARDWARE Quem gerencia os recursos do computador? SISTEMA OPERACIONAL SOFTWARE DE SISTEMA
MEMÓRIA COMPUTADOR UC BANCO DE REGISTRADORES UAL CPU Interf. Entrada/Saída DMA 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.
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
1980: MS-DOS Sistema Operacional Evolução
1985: WINDOWS 1.0 Evolução Sistema Operacional
1990: WINDOWS 3.0 Sistema Operacional Evolução
WINDOWS 95 Sistema Operacional Evolução
2007/2008: S.O. MOBILE Sistema Operacional Evolução
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. SOFTWARES DE SISTEMA HARDWARE SOFTWARE DE SISTEMA SOFTWARE DE APLICAÇÃO USUÁRIOS A estes programas denominamos... Sistema Operacional
Quatro outros programas completam a lista dos softwares de sistema: MONTADORES CARREGADORES COMPILADORES Foco deste tópico Próximo tópico Tema da disciplina EA879 Softwares de Sistema LIGADORES Próximo tópico
EndConteúdo 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. MOV R1, R2 SUB R2, #3 MUL R3, R1, R2 LDR R3, [R1]! STR R1, [R2,R3] AND R1, #3 ROT:MOV R2, #4 MONTADOR 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 Tabela de instruções EndConteúdo MOV R1, R2 SUB R2, #3 MUL R3, R1, R2 LDR R3, [R1]! STR R1, [R2,R3] AND R1, #3 ROT:MOV R2, #4 AND R1, #3 1A 150B 1B 1F0A 1C AB3F 1D 237C 1E 1A1B 1F FFFA 20 EA86 OBSERVAÇÃO! Como os processadores trabalham com palavras de 16, 32 e até de 64 bits, não é conveniente representar os valores da memória em binário. A partir de agora, para mostrar a memória, iremos usar, tanto para o endereço quanto para o conteúdo, a representação hexadecimal. 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 de máquina (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
EndConteúdo Vamos entender melhor o funcionamento do montador a partir de um exemplo. Seja o programa abaixo. Queremos montá-lo na memória do processador: 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. MOV R1, #5 SUB R2, A A: AND R1, #3 Montadores
Em resumo, pseudo-instruções são regras que ajudam o montador a definir o conteúdo de cada posição da memória ao instalar um programa. PSEUDO-INSTRUÇÕES É um tipo especial de instrução não executável, que insere valores em posições de memória, reserva espaço e organiza na memória o local de instalação das instruções. Quem lê e “executa” as pseudo- instruções é o montador ao alocar o programa Assembly na memória. 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 pseudo- instruçã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. Vamos entender melhor o funcionamento do montador a partir de um exemplo. Seja o programa abaixo. Queremos montá-lo na memória do processador: EndConteúdo MOV R1, #5 SUB R2, A A: AND R1, #3 ORG 1F 2. Montando o programa na memória 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: EndConteúdo 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. MOV R1, #5 SUB R2, A A: AND R1, #3 ORG 1F 2. Montando o programa na memória 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: EndConteúdo MENÔNICOCOMP (BYTES) ROTINA DE TRAT. ORG-RORG DW1RDW DSiRDS ENDREND... TABELA DE PSEUDO-INSTRUÇÕES Relaciona a pseudo-instrução com a rotina que o montador deve chamar para processá-la. 1F MOV R1, #5 SUB R2, A A: AND R1, #3 ORG 1F 2. Montando o programa na memória 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: EndConteúdo 2. Montando o programa na memória MNCC. M.COMP (BYTES) ROT. DE TRAT AND R12A2RANDR2 MOV R11E2RMOVR1 SUB R2F32RSUBR2... TABELA DE INSTRUÇÕES DE MÁQUINA Associa o mnemônico de uma instrução com o seu código de máquina. 1F 20 2A 03 MOV R1, #5 SUB R2, A A: AND R1, #3 ORG 1F 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: EndConteúdo 2. Montando o programa na memória 1F 20 2A E 05 MOV R1, #5 SUB R2, A A: AND R1, #3 ORG 1F MNCC. M.COMP (BYTES) ROT. DE TRAT AND R12A2RANDR2 MOV R11E2RMOVR1 SUB R2F32RSUBR2... TABELA DE INSTRUÇÕES DE MÁQUINA Associa o mnemônico de uma instrução com o seu código de máquina. 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: EndConteúdo 2. Montando o programa na memória 1F 20 2A E F3 1F MOV R1, #5 SUB R2, A A: AND R1, #3 ORG 1F MNCC. M.COMP (BYTES) ROT. DE TRAT AND R12A2RANDR2 MOV R11E2RMOVR1 SUB R2F32RSUBR2... TABELA DE INSTRUÇÕES DE MÁQUINA Associa o mnemônico de uma instrução com o seu código de máquina. 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 Busca Instruções de execução na tabela TIP Pseudo- Instrução Monta inst. na memória Define endereços / monta dados na memória Montadores
EndConteúdo Vamos agora para um novo exemplo. Seja o programa abaixo. Queremos montá-lo na memória do processador: MOV R1, DADO ORG 1F SUB R2, ROT DADO: DS 3 1F ROT: DW 10 Montadores MNENÔNICOCOMP (BYTES) ROTINA DE TRAT. ORG-RORG DW1RDW DSiRDS END-REND... MNCC. M.COMP (BYTES) ROT. DE TRAT AND R12A2RANDR2 MOV R11E2RMOVR1 SUB R2F32RSUBR2... TABELA DE PSEUDO-INSTRUÇÕES (TPI) TABELA DE INSTRUÇÕES DE MÁQUINA (TIM)
EndConteúdo Vamos agora para um novo exemplo. Seja o programa abaixo. Queremos montá-lo na memória do processador: ORG 1F SUB R2, ROT DADO: DS 3 MNENÔNICOCOMP (BYTES) ROTINA DE TRAT. ORG-RORG DW1RDW DSiRDS END-REND... MNCC. M.COMP (BYTES) ROT. DE TRAT AND R12A2RANDR2 MOV R11E2RMOVR1 SUB R2F32RSUBR2... TABELA DE PSEUDO-INSTRUÇÕES (TPI) TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) 1F ROT: DW 10 MOV R1, DADO Montadores
EndConteúdo Vamos agora para um novo exemplo. Seja o programa abaixo. Queremos montá-lo na memória do processador: ROT: DW 10 MOV R1, DADO ORG 1F SUB R2, ROT DADO: DS 3 1F E 1F Montadores MNENÔNICOCOMP (BYTES) ROTINA DE TRAT. ORG-RORG DW1RDW DSiRDS END-REND... MNCC. M.COMP (BYTES) ROT. DE TRAT AND R12A2RANDR2 MOV R11E2RMOVR1 SUB R2F32RSUBR2... TABELA DE PSEUDO-INSTRUÇÕES (TPI) TABELA DE INSTRUÇÕES DE MÁQUINA (TIM)
EndConteúdo Vamos agora para um novo exemplo. Seja o programa abaixo. Queremos montá-lo na memória do processador: ROT: DW 10 MOV R1, DADO ORG 1F SUB R2, ROT DADO: DS 3 1F A 1F F3 ??? Nest e momento, o montador ainda não conhece o endereço de ROT! Como solucionar?! MNENÔNICOCOMP (BYTES) ROTINA DE TRAT. ORG-RORG DW1RDW DSiRDS END-REND... MNCC. M.COMP (BYTES) ROT. DE TRAT AND R12A2RANDR2 MOV R11E2RMOVR1 SUB R2F32RSUBR2... TABELA DE PSEUDO-INSTRUÇÕES (TPI) TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) 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. 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 MOV R1, DADO ORG 1F SUB R2, ROT DADO: DS 3 ROT: DW 10 Montadores
MONTADOR DE DOIS PASSOS - Para realizar a tradução, os montadores são geralmente implementados como Montadores de dois Passos; - Os dois passos significam que o Montador deverá ler o programa fonte duas vezes: PASSO 1 - Montador lê o código fonte e determina os endereços para as referências simbólicas (rótulos) a partir das pseudo-instruções, construindo a TABELA DE SÍMBOLOS. PASSO 2 O código fonte é lido novamente e os mnemônicos das instruções e rótulos são substituídos por códigos de máquina. EndConteúdo ROT: DW 10 MOV R1, DADO ORG 1F SUB R2, ROT DADO: DS 3 1F E 1F Montadores MNENÔNICOCOMP (BYTES) ROTINA DE TRAT. ORG-RORG DW1RDW DSiRDS END-REND... MNCC. M.COMP (BYTES) ROT. DE TRAT AND R12A2RANDR2 MOV R11E2RMOVR1 SUB R2F32RSUBR2... TABELA DE PSEUDO-INSTRUÇÕES (TPI) TABELA DE INSTRUÇÕES DE MÁQUINA (TIM)
EndConteúdo ROT: DW 10 MOV R1, DADO ORG 1F SUB R2, ROT DADO: DS 3 1F E 1F Vamos então executar o passo 1 e definir a TABELA DE SÍMBOLOS antes de prosseguir com a montagem. TABELA DE SÍMBOLOS (TS) SÍMBOLOENDEREÇO ROT DADO 1F 26 MNENÔNICOCOMP (BYTES) ROTINA DE TRAT. ORG-RORG DW1RDW DSiRDS END-REND... MNCC. M.COMP (BYTES) ROT. DE TRAT AND R12A2RANDR2 MOV R11E2RMOVR1 SUB R2F32RSUBR2... TABELA DE PSEUDO-INSTRUÇÕES (TPI) TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) Montadores
EndConteúdo ROT: DW 10 MOV R1, DADO ORG 1F SUB R2, ROT DADO: DS 3 1F E 1F F3 Vamos então executar o passo 1 e definir a TABELA DE SÍMBOLOS antes de prosseguir com a montagem. 26 Montadores TABELA DE SÍMBOLOS (TS) SÍMBOLOENDEREÇO ROT DADO 1F 26 MNENÔNICOCOMP (BYTES) ROTINA DE TRAT. ORG-RORG DW1RDW DSiRDS END-REND... MNCC. M.COMP (BYTES) ROT. DE TRAT AND R12A2RANDR2 MOV R11E2RMOVR1 SUB R2F32RSUBR2... TABELA DE PSEUDO-INSTRUÇÕES (TPI) TABELA DE INSTRUÇÕES DE MÁQUINA (TIM)
EndConteúdo ROT: DW 10 MOV R1, DADO ORG 1F SUB R2, ROT DADO: DS 3 1F E 1F F3 Vamos então executar o passo 1 e definir a TABELA DE SÍMBOLOS antes de prosseguir com a montagem TABELA DE SÍMBOLOS (TS) SÍMBOLOENDEREÇO ROT DADO 1F 26 MNENÔNICOCOMP (BYTES) ROTINA DE TRAT. ORG-RORG DW1RDW DSiRDS END-REND... MNCC. M.COMP (BYTES) ROT. DE TRAT AND R12A2RANDR2 MOV R11E2RMOVR1 SUB R2F32RSUBR2... TABELA DE PSEUDO-INSTRUÇÕES (TPI) TABELA DE INSTRUÇÕES DE MÁQUINA (TIM) 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 ROT: DW 10 MOV R1, DADO ORG 1F SUB R2, ROT DADO: DS 3 MENÔNICOCOMP. ORG- DW1 DSi END- MNCC. M.COMP. AND R12A2 MOV R11E2 SUB R2F32 TPI TIM SÍMBOLOEND. TS IiCPL 1 1F DADO ROT 1F 26 Montadores
ALGORITMO DO PASSO 2 – GERANDO O CÓDIGO ROT: DW 10 MOV R1, DADO ORG 1F SUB R2, ROT DADO: DS 3 MENÔNICOCOMP. ORG- DW1 DSi END- MNCC. M.COMP. AND R12A2 MOV R11E2 SUB R2F32 TPI TIM SÍMBOLOEND. TS EndConteúdo IiCPL 1 1F DADO ROT 1F 26 1F E 1F F Montadores
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 EQUB 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 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 CARREGADOR LIGADOR