EA876 - Introdução a Software de Sistema

Documentos relacionados
COMPILAÇÃO. Ricardo José Cabeça de Souza

Compiladores. Introdução

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Compiladores I Prof. Ricardo Santos (cap 1)

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Noções de compilação

Noções de compilação

Compiladores. Introdução à Compiladores

Linguagens de Programação Classificação

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

Ferramentas Programação. UDESC - Prof. Juliano Maia 1

INE5421 LINGUAGENS FORMAIS E COMPILADORES

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

Prof. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior

Introdução aos Compiladores

Projeto de Compiladores

Métodos de implementação de linguagens. Kellen Pinagé

Programação de Computadores:

Desenvolvimento de Aplicações Desktop

FACULDADE ZACARIAS DE GÓES SISTEMAS DE INFORMAÇÃO ADRIEL ALMEIDA CAFÉ PROCESSO DE COMPILAÇÃO

Conclusões. Baseado no Capítulo 9 de Programming Language Processors in Java, de Watt & Brown

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 32. Instituto de C

Projeto de Compiladores

Compiladores. Conceitos Básicos

FACULDADE LEÃO SAMPAIO

Introdução à Programação

Puca Huachi Vaz Penna

PROGRAMAÇÃO I. Introdução

Compiladores. Fabio Mascarenhas

Linguagens de Programação

Autômatos e Linguagens

Existem três categorias principais de linguagem de programação: linguagem de máquina, linguagens assembly e linguagens de alto nível.

Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação

Sistema Computacional

Infraestrutura de Hardware. Funcionamento de um Computador

Introdução à Computação: Máquinas Multiníveis

As fases de um compilador

Apresentação. Informação geral + Conceitos iniciais

Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

As fases de um compilador

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38

Paradigmas de Programação

Linguagens e Compiladores

INE5622 INTRODUÇÃO A COMPILADORES

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Compiladores Aula 1. Celso Olivete Júnior.

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Compiladores. Geração de Código Objeto

Linguagens de Programação

Introdução à Computação

Introdução à Computação

Introdução parte II. Compiladores. Mariella Berger

1.1 Linguagens de Programação

Introdução à Programação de Computadores Fabricação Mecânica

Introdução à Computação

Sistemas Operacionais

Programação: Compiladores x Interpretadores PROF. CARLOS SARMANHO JR

IFSC/Florianópolis - Programação Orientada a Objetos com Java - prof. Herval Daminelli

3. Linguagem de Programação C

CP Compiladores I Prof. Msc.. Carlos de Salles

Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1

CAP. VI ANÁLISE SEMÂNTICA

Compiladores. Prof. Bruno Moreno

Ferramenta para Desenvolvimentode Sistemas EmbarcadosUtilizando Linguagem de Alto Nível p.1/25

Conceitos de Linguagens de Programação

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Capítulo 1. Aspectos Preliminares

Introdução a Ciência da Computação

Tecnólogo em Análise e Desenvolvimento de Sistemas. Sistemas Operacionais (SOP A2)

OFICINA DA PESQUISA PROGRAMAÇÃO APLICADA À CIÊNCIA DA COMPUTAÇÃO

Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte Lista de Exercícios para a Terceira Unidade

Introdução aos computadores, à Internet e à World Wide Web. Prof. Marcelo Roberto Zorzan

Introdução (Aula 2) Introdução Arquitetura de Hardware. Organização Estruturada de Computadores. Introdução Conceitos (2) Introdução Conceitos (1)

Introdução à Computação Parte 2

Tópicos Avançados em Sistemas Computacionais: Infraestrutura de Hardware Aula 06

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.

Universidade Federal de Alfenas

Introdução. (Aula 2) Organização Estruturada de Computadores

Algoritmos e Programação

16. Compilação no Linux

Breve Histórico & Conceitos Básicos

Memória. Arquitetura de Von Neumann. Universidade do Vale do Rio dos Sinos Laboratório I Prof.ª Vera Alves 1 CPU. Unidade de controle ULA

II.1 Conceitos Fundamentais. Uma delas é programar o =>

Algoritmos Computacionais

Linguagem de Programação

Procedimentos. Sistemas de Computação

Introdução à plataforma Java

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

Programação de Computadores

Algoritmos e Programação

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Aula 23: Noções de Compilação, Montagem, Link-edição, e Interpretação

Introdução a Programação de Jogos

1) Considere a situação atual da memória do sistema computacional abaixo discriminada.

ORGANIZAÇÃO DE COMPUTADORES

Transcrição:

A876 - 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. algoritmos estruturas de dados decomposição funcional... Software de Sistema programas executáveis arquivos & diretórios chamadas de sistema... Hardware instruções registradores endereçamento interrupções... 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. 1

COMPILADORS 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. xemplos de compiladores (F1 F2) C++ Assembly x86 SDL Java C JVM bytecode NesC Assembly ARM Se o compilador é um programa, como ele é compilado? 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). xemplo: Compiladores de linguagens de programação. Tradutor: altera um texto para outro mais apropriado para manipulação em um determinado contexto. xemplos: 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.). xemplos: MATLAB, C Shell. Compiladores, tradutores e interpretadores utilizam as mesmas técnicas de compilação. 2

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. xemplo: Flex, Bison. APIs (Application Programming Interfaces). xemplo: Java string tokenizer, Java scaner, Java regex. Pré-processadores. xemplo: cpp. Toolkits. xemplo: Cocktail, li. Importante: Técnicas de compilação não são utilizadas apenas na construção de compiladores de linguagens de programação. O ngenheiro 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!!!). Uso de Compiladores Via IDs (Integrated Development nvironment): 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 3

Aplicações de Técnicas de Compilação Análise e mineração de dados. xemplos: detecção de padrões e eventos em logs, filtragem de informação. Construção de ferramentas de software in-house. xemplo: BeanBuilder. Construção de linguagens específicas: xemplos: CSP (C Server Pages), XMLIpthru. xtensões de linguages para hardware dedicado. xemplo: Cuda. Automação de processos de software: xemplo: tradução de modelos em processos MDA (Model Driven Architectures). 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. stes formalismos são denominados gramáticas. xemplo: 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). stabelecimento de algoritmos e heurísticas para a análise e síntese. xemplo: algoritmo de deslocamento e redução. struturas de dados para armazenas as transformações do texto de entrada. xemplos: árvores, pilhas, tabelas. Interação de outros software básicos. xemplos: montador, ligador. 4

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. sta fase é realizada pelo Front-nd do compilador. Síntese: Tranforma a representação intermediária em uma notação apropriada para gerar o texto alvo (código intermediário). ste código intermediário é traduzido em código de montagem (assembly). sta fase é realizada pelo Back-nd 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. xemplo Texto de origem: int x, y, z, w; w = (x + y) * z; Gramática: id id = + - * / - ( ) w = ( ) x + * y Árvore sintática 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: MOV.L x, D0 ADDI.L y, D0... 5