terça-feira, 13 de maio de 2014

FORMAS DE EXECUÇÃO DE PROGRAMAS



O que é : Tradução, Compilação  e  Interpretação.


Execução de programas 

Um programa de computador não é escrito em uma linguagem que a máquina entende, por isso é necessário haver uma tradução do programa para a linguagem binária. 


1) Montagem (Assembler = Montador)

Tradução de um programa em linguagem de montagem (código fonte) para linguagem binária (código objeto).

O programa que faz a tradução é o montador (ou Assembler)


Funções básicas: 

  • Examinar a correção de cada instrução
  • Substituir códigos de operações simbólicos por valores numéricos
  • Substituir nomes simbólicos de endereços por valores numéricos
  • Converter valores de constantes para binários
  • Reservar espaço de memória para armazenamento de instruções e dados


2 ) Compilação

Traduz o programa-fonte escrito em linguagem de alto nível (linguagem fonte) para o programa-objeto escrito, por exemplo, em linguagem de máquina (binária). Pode-se gerar um programa intermediário no meio do processo escrito em Assemply, por exemplo.

O tempo para realizar esta tarefa é chamado tempo de compilação. Em seguida executa o programa-objeto. O tempo para realizar esta tarefa é chamado tempo de execução.

O programa que faz a tradução é o compilador.

Compilador executa duas funções básicas: análise e síntese


Análise:

  • Análise léxica: decompõe o programa fonte em seus elementos individuais distintos e verifica se estão de acordo com as regras da linguagem
    (ex: associa strings de caracteres a comandos, operadores, variáveis,....)
    Resultado: conjunto de tokens

  • Análise sintática: cria as estruturas para os comandos e verifica a correção das estruturas (ex: tem int antes de main, tem abre e fecha parênteses)
    Resultado: árvore sintática representando a estrutura do programa

  • Análise semântica: verifica as regras semânticas estáticas da linguagem (ex: estar atribuindo valores do tipo correto para uma variável: Parcela1=1.5, poderia dar erro pois variável Parcela1é do tipo int)
Síntese: gera o programa-objeto 

  • Geração de código: gera o programa-objeto

  • Otimização de código: tenta tornar o programa-objeto mais eficiente

Exemplo de linguagem compilada: C, Pascal


Montagem x Compilação:

Diferença está na complexidade. Na montagem existe uma relação 1:1 entre o código na linguagem de montagem e o código na linguagem de máquina. Já na compilação a relação é múltipla, cada instrução do código fonte gera múltiplas instruções no código de máquina.


3) Ligação ou link-edição

Algumas rotinas já existem codificadas no sistema, por exemplo, rotinas para entrada e saída de dados, de modo que o programador não precisa codificá-las.
 
Exemplo: printf(), readln(), rotinas matemáticas como seno e coseno.
 
Estas rotinas são armazenadas em bibliotecas que são incluídas no código objeto gerado pelo compilador.
 
Para que o código da subrotina externa seja anexado ao código objeto utiliza-se o processo de ligação. Este processo examina todo o código objeto e procura por referências externas não resolvidas assinaladas pelo compilador.
 
Ele procura pela rotina no sistema e se a encontra, inclui seu código no código objeto, caso contrário, gera uma mensagem de erro.


4) Interpretação

A partir do código fonte realiza as três fases (compilação, ligação e execução) comando a comando. Lê uma instrução, compila, liga e executa. Depois lê a próxima instrução e faz os mesmos 3 passos.

O programa executa estas três fazes é o interpretador.

Exemplo de linguagem interpretada: Java


Compilação X Interpretação


Tempo de execução:

É maior no na interpretação pois cada vez que o programa é executado, o interpretador executa as três fases. Já o compilador é só executar o programa-objeto já gerado na primeira vez.



Consumo de memória:

O interpretador precisa permanecer na memória durante todo o tempo de execução. Já o compilador fica na memória somente durante o tempo de compilação. Quando o programa é executado, somente o programa-objeto fica na memória.

Repetição da interpretação:
Sempre que um programa for utilizado, terá que ser interpretado novamente. Isso é um problema para os programas que são muito utilizados.

No caso de loops, cada instrução do loop é interpretada em todos os passos do loop. No caso da compilação, a tradução para código-objeto ocorre só uma vez pois o loop não e executado enquanto a tradução é feita.

Por tanto, o método de interpretação torna-se mais lento que o de compilação.

Detecção de erros:

No método de compilação, a identificação de erros durante a fase de execução fica sempre difícil, pois não há mais relação entre comandos do código fonte e instruções do executável.
 
No método de interpretação, cada comando é interpretado e executado individualmente, a relação entre código fonte e executável é mais direta e o efeito da execução (certa ou errada) é direta e imediatamente sentido.

Por tanto, erros são detectados de forma mais fáci

Nenhum comentário:

Postar um comentário