Buscar

intro-so

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

22/02/2011
1
EA876 - Prof. Eleri Cardozo -
FEEC/Unicamp
EA876 - Introdução a Software de Sistema 
Software de Sistema: conjunto de programas utilizados para tornar o hardware 
transparente para o desenvolvedor ou usuário. Preenche um “gap de abstração”.
Hardware
Software de Sistema
instruções
registradores
endereçamento
interrupções
....
programas executáveis
arquivos & diretórios
chamadas de sistema
....
algoritmos
estruturas de dados
decomposição funcional
...
EA876 - Prof. Eleri Cardozo -
FEEC/Unicamp
Principais Softwares de Sistema:
Compilador: traduz uma notação em alto nível em outra comumente de mais 
baixo nível (exemplo: C � Assembly).
Sistema operacional: controla os recursos de hardware fornecendo uma 
interface de alto nível para manipulá-los. É o mais complexo software de 
sistema.
Montador: traduz um programa em linguagem simbólica para linguagem de 
máquina.
Ligador: combina vários módulos em linguagem de máquina em um único 
módulo executável.
Carregador: transfere e adapta um programa armazenado em memória 
secundária para execução em memória primária. 
22/02/2011
2
EA876 - Prof. Eleri Cardozo -
FEEC/Unicamp
COMPILADORES
Definição abstrata: um compilador é um programa que traduz um texto T1 
descrito em um formalismo F1 em um texto T2 descrito em um formalismo 
F2, mantendo o mesmo significado semântico entre T1 e T2.
P: Por que T1 e T2 devem ser descritos por formalismos?
R: Para que o compilador possa utilizar no processo de tradução um 
procedimento algoritmico e computacionalmente viável.
Exemplos de compiladores (F1 � F2)
� C++ � Assembly x86
� SDL � C
� Java � JVM bytecode
� NesC � Assembly ARM
Se o compilador é um programa, como ele é compilado?
EA876 - Prof. Eleri Cardozo -
FEEC/Unicamp
Compilador X Tradutor X Interpretador
Compilador: gera um texto a partir de outro, usualmente em nível mais baixo 
de abstração (diferença de níveis de abstração).
Exemplo: Compiladores de linguagens de programação.
Tradutor: altera um texto para outro mais apropriado para manipulação em um 
determinado contexto.
Exemplos: JAXB (XML � Java), Tradutor Fortran � C
Interpretador: processa cada fragmento de um texto (linha, comando, etc.) e 
produz um resultado imediato (impressão, armazenamento, etc.).
Exemplos: MATLAB, C Shell.
Compiladores, tradutores e interpretadores utilizam as mesmas técnicas de 
compilação.
22/02/2011
3
EA876 - Prof. Eleri Cardozo -
FEEC/Unicamp
Construção de Compiladores
Raramente se constrói um compilador “do zero”, mas a partir de ferramentas tais 
como:
� Analisadores léxicos e sintáticos. Exemplo: Flex, Bison.
� APIs (Application Programming Interfaces). Exemplo: Java string tokenizer, 
Java scaner, Java regex.
� Pré-processadores. Exemplo: cpp.
� Toolkits. Exemplo: Cocktail, Eli.
Importante: Técnicas de compilação não são utilizadas apenas na construção de 
compiladores de linguagens de programação. O Engenheiro de Computação 
deve entender estas técnicas para o desenvolvimento de código a partir de 
especificações (isto impacta no custo e na qualidade do software !!!).
EA876 - Prof. Eleri Cardozo -
FEEC/Unicamp
Uso de Compiladores
Via IDEs (Integrated Development Environment): o compilador está integrado 
com outras ferramentas: editores, depuradores, ferramentas de teste, 
analisadores estáticos, etc. O usuário tem pouco controle sobre o processo 
de compilação.
Via linha de comando: o usuário tem pleno controle sobre o processo de 
compilação, por exemplo, fornecendo opções de otimização de código, 
linguagens de origem e alvo, arquitetura alvo, etc. (man gcc).
Compilação cruzada (cross compiling): o compilador irá gerar código para 
outra arquitetura (ARM, M68xx, etc.) diferente daquela que o compilador 
executa. Um toolchain é um conjunto de ferramentas para cross compiling 
composto de:
� compilador (usualmente gcc)
� montador para a arquitetura alvo
� ligador para a arquitetura alvo
� biblioticas de runtime para a arquitetura alvo
22/02/2011
4
EA876 - Prof. Eleri Cardozo -
FEEC/Unicamp
Aplicações de Técnicas de Compilação
� Análise e mineração de dados. Exemplos: detecção de padrões e eventos 
em logs, filtragem de informação.
� Construção de ferramentas de software “in-house”. Exemplo: BeanBuilder.
� Construção de linguagens específicas: Exemplos: CSP (C Server Pages), 
XMLIpthru.
� Extensões de linguages para hardware dedicado. Exemplo: Cuda.
� Automação de processos de software: Exemplo: tradução de modelos em 
processos MDA (Model Driven Architectures).
EA876 - Prof. Eleri Cardozo -
FEEC/Unicamp
O Processo de Compilação
A tradução de um texto de entrada em outro de saída requer:
� Formalismos para especificar os textos de entrada e saída. Estes formalismos 
são denominados gramáticas. Exemplo: gramática de especifica a linguagem C, 
gramática que especifica a estrutura de documentos XML, gramática do 
assembly do x86.
� Subdivisão em atividades sequenciais: análise (lexica, sintática, semântica) e 
síntese (otimização e geração de código).
� Estabelecimento de algoritmos e heurísticas para a análise e síntese. Exemplo: 
algoritmo de deslocamento e redução.
� Estruturas de dados para armazenas as transformações do texto de entrada. 
Exemplos: árvores, pilhas, tabelas. 
� Interação de outros software básicos. Exemplos: montador, ligador. 
22/02/2011
5
EA876 - Prof. Eleri Cardozo -
FEEC/Unicamp
Fases do Processo de Compilação
� Análise: Verifica se o texto de entrada está em conformidade com a 
linguagem de origem. Se estiver, gera uma representação intermediária 
apropriada para a síntese. Esta fase é realizada pelo Front-End do 
compilador.
� Síntese: Tranforma a representação intermediária em uma notação 
apropriada para gerar o texto alvo (código intermediário). Este código 
intermediário é traduzido em código de montagem (assembly). Esta fase é 
realizada pelo Back-End do compilador.
Passo adicional na análise:
� Pré-processamento: substituição de diretivas tipo #include, #define, etc.
Passos adicionais na síntese:
� Otimização de código: redução do número de instruções, redução da 
memória requerida, uso de co-processadores.
� Inserção de informação para depuração.
EA876 - Prof. Eleri Cardozo -
FEEC/Unicamp
Exemplo
Texto de origem:
int x, y, z, w;
w = (x + y) * z;
Gramática:
E � id
E � id = E
E � E + E
E � E - E
E � E * E
E � E / E
E � - E
E � ( E )
E
E=
E E* E
( E )
E E+ E
x y
w
z
Código intermediário:
temp1 := x + y
temp2 := temp1 * z
w := temp2
Código otimizado:
temp1 := x + y;
w := temp1 * z
Código de montagem:
MOVE.L x, D0
ADDI.L y, D0
...
Árvore sintática

Outros materiais