16. Compilação no Linux

Documentos relacionados
PROGRAMAÇÃO I. Introdução

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

Procedimentos. Sistemas de Computação

Linguagens de Programação Classificação

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

Programação I A Linguagem C. Prof. Carlos Alberto

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

Arquitetura e Organização de Computadores. Compiladores e processamento

Ambiente de desenvolvimento

Departamento de Engenharia Informática. Sistemas Operativos 1. Utilitário Make

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

3. Linguagem de Programação C

1.1 Linguagens de Programação

Sistemas Operacionais

Programação Estruturada Aula 2 - Introdução

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

Linguagem de Programação

Compiladores. Geração de Código Objeto

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

Programação Estruturada Aula - Introdução a Linguagem C

Desenvolvimento de Aplicações Desktop

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

TE091 Programação Orientada a Objetos Engenharia Elétrica

Programação. Module Introduction. Cap. 1 Fundamentos de Computadores

Universidade Católica de Pelotas Bacharelado em Ciência da Computação Linguagens Formais e Autômatos TEXTO 6 Introdução à Compilação

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Linguagem C Princípios Básicos (parte 1)

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

Aula 10: Funções (Parte III)

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

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO E DO DESPORTO CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS CEFET-MG UNIDADE DE ENSINO

Conceitos básicos sobre computadores (continuação)

Linguagem de Programação C

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

Introdução à Lógica de Programação

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

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

Compiladores. Conceitos Básicos

Linguagem C: diretivas, compilação separada. Prof. Críston Algoritmos e Programação

Métodos Computacionais

Compiladores I Prof. Ricardo Santos (cap 1)

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

Introdução à linguagem C

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

Implementação da programação modular II

INTRODUÇÃO À LINGUAGEM C

Linguagens de Programação

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

facilita o trabalho em equipe, com diferentes grupos trabalhando em cada módulo independente.

Ligação e Relocação. Noemi Rodriguez Ana Lúcia de Moura Raúl Renteria.

Introdução à Programação

INTRODUÇÃO À LINGUAGEM C

Conhecendo a Linguagem de Programação C

Capítulo 6 Nível do Sistema Operacional

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Introdução a Programação de Jogos

Algoritmos e Programação

A ferramenta make. A - Introdução. O C é orientado para a produção de aplicações informáticas de grande dimensão

Algoritmos e Estruturas de Dados I (DCC/003) Introdução à Programação de Computadores. Aula - Tópico 1

Linguagens de Programação Sistemas de Linguagens

Conceitos Básicos de Programação

Programação Estruturada

Aula 2 - Programação de Computadores - CI208 1/21

Algoritmos e Programação

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Laboratório de Introdução à Ciência da Computação I

Computadores podem ser úteis em problemas que envolvem: Grande número de dados. Grande número de cálculos. Complexidade. Precisão.

Aula teórica 7. Preparado por eng.tatiana Kovalenko

Nível da Linguagem de Montagem

Algoritmos e Técnicas de Programação Introdução Givanaldo Rocha de Souza

a) Calcule o valor médio de CPI apresentado na execução deste programa P, utilizando-se C1 sem e com otimização.

Fundamentos de Programação

Linguagem C: Introdução

a) Computador b) Estrutura do sistema i. Hardware ii.software c) Linguagens de Programação i. Paradigmas e Programação 1.

Sistemas Operacionais

Linguagem C. Eliane Pozzebon

INFORMÁTICA: Informação automática

Infra-Estrutura de Software. Introdução

Aula 1 Apresentação do curso e Conceitos Fundamentais. Objetivo do curso

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

Puca Huachi Vaz Penna

Arquitetura e Organização de Computadores. Compiladores e processamento

Métodos Computacionais em Física Noções Básicas de Linguag

Algoritmos e Linguagem de Programação em C. Professor: Bernard Cardoso Oliveira

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

LAPRO I. Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Informática - FACIN. Prof. Dr. Rafael Garibotti

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

MC-102 Aula 01. Instituto de Computação Unicamp

Introdução a Programação. Ponteiros e Passagem de Argumentos por Referência

Disciplina de Algoritmos e Programação

Introdução. Nível da Linguagem de Montagem. Linguagem de Montagem (2) Linguagem de Montagem (1) Linguagem de Montagem

Linguagem de Programação I. Aula 10 Funções

Curso de C. Introdução by Arnaldo V. Moura e Daniel F. Ferber 3/10/ :43 AM

Programação de Computadores I Introdução PROFESSORA CINTIA CAETANO

Disciplina: Arquitetura de Computadores

Introdução à Programação

EA876 - Introdução a Software de Sistema

Transcrição:

16. Compilação no Linux 16.1 Compilador X Interpretador Um código fonte pode ser compilado ou interpretado. Compiladores e interpretadores tratam o código de maneira diferente. Interpretador: Lê o código fonte, uma linha por vez, executando a instrução dessa linha. Deve estar presente toda vez que se quiser executar o programa. Ex.: Basic Como a cada execução, o código é examinado linha por linha, o processo é mais lento. Compilador: Lê o programa inteiro e o converte para código objeto. Código objeto é um código binário, também conhecido como código de máquina. Fica armazenado em um arquivo e pode ser executado pelo processador. O código compilado, após ser ligado, pode ser executado diretamente, sem necessitar de nova compilação e sem depender do compilador. 1

16.2 - Tarefas do compilador Um compilador executa basicamente 3 tarefas: Pré-processamento Compilação: conversão de C para assembly Tradução: conversão de assembly para código de máquina (binário) Ligação-edição; junção dos arquivos objeto e bibliotecas para formar o arquivo executável. Pré-processamento e ligação-edição são tarefas executadas por dois programas, o pré-processador e o ligador respectivamente Em geral os compiladores mais novos contêm essas duas ferramentas acopladas. 1.6.21 - Pré-processamento O pré-processamento é feito antes da compilação e consiste em: Retirada de comentários Inclusão de arquivos de cabeçalhos (headers) Inclusão de macros no meio do código. Algumas otimizações: Funções pequenas do mesmo arquivo são inseridas no meio do código, pois a chamada de funções é um processo caro Valores constantes calculados dentro de um loop são movidos para fora. 2

16.2.2 - Compilação As instruções são convertidas para código de máquina (código objeto ; extensão.o) É feita a verificação da sintaxe do código, erros de sintaxe são detectados nessa fase. Ligações com outras funções e variáveis externas não é feita. As rotinas (bibliotecas) do sistema necessárias para executar o programa ainda não são incluídas. Obs.: Bibliotecas do sistema: Fornecem suporte em tempo de execução. Permitem acesso a serviços do SO, ex.: I/O Permitem acesso às rotinas de ponto flutuante. Durante a compilação de um programa, ocorrem os eventos de tempo de compilação. Exemplos: Avisar que uma variável não foi declarada. Código relocável: Pode ser executado em qualquer região da memória disponível. Contém informações de quantos bytes, a partir do inicio do arquivo, vai precisar para executar suas instruções. A produção de código relocável facilita o processo de ligação/edição. 3

16.2.3 - Ligação/edição Feita pelo ligador ou ainda linker ou loader. O ligador é responsável por ligar (linkar) as várias partes do código objeto: códigos objeto gerados pelo programador bibliotecas padrão da linguagem rotinas (bibliotecas) do sistema. Após a ligação/edição é gerado o código executável. Durante a ligação/edição são atribuídos os endereços das instruções de jump (desvio) e call (chamadas), ou seja, resolvem-se as referências externas. Exemplo: arquivo1.c arquivo2.c int count; /*declaraçoes*/ #include <stdio.h> void display(void); extern int count; /* decl */ /*programa principal*/ /*função display*/ void main(void) void display(void) { { count = 10; printf( %d \n, count); display(); } } Na compilação são criados dois códigos objetos: arquivo1.o e arquivo2.o. A localização da função display() no arquivo 1 fica em aberto após a compilação. Idem para a variável externa count no arquivo Essas localizações (endereços) serão resolvidas durante a fase de ligação. 4

O ligador avisa se algum símbolo está indefinido. Exemplos: Uso de uma função que não foi definida. Associação errada de bibliotecas. Os arquivos de biblioteca padrão (*.a) contêm um conjunto de códigos objetos (.o). Arquivos objetos são incluídos totalmente em um código executável. Arquivos de biblioteca são parcialmente incluídos. Somente as partes (*.o) que são utilizadas pelo programa são incluídas. 16.3 - Compilação separada Um programa pode estar contido em muitos arquivos. Se apenas uma parte do código é alterada, somente o arquivo correspondente necessita ser recompilado. A atualização e manutenção do programa é bem mais fácil e rápida. Porém existe o trabalho inicial de organizar o programa em diversos arquivos. 5

16.4 - Execução e mapa de memória Durante a execução de um programa, ocorrem os eventos de tempo de execução. Ex.: erro de divisão por zero, causando a interrupção do programa. Um compilador também oferece rotinas para gerenciar o ambiente durante o tempo de execução. Durante a execução são criadas e utilizadas 4 regiões distintas na memória com finalidades específicas: Região de armazenamento de código. Região de armazenamento das variáveis globais. Pilha: Armazena informações relacionadas com funções, por exemplo: endereço de retorno das chamadas às funções argumentos de funções variáveis locais Heap: Região de alocação dinâmica. Armazena dados criados em tempo de execução, ex.: listas encadeadas, árvores. A disposição física dessas 4 regiões varia em função do tipo da CPU e do compilador. Colisão entre pilha e heap: Funções recursivas são aquelas que chamam a si próprias. 6

A cada chamada, um novo conjunto de variáveis locais é criado e armazenado na pilha. Um grande número de chamadas recursivas podem estourar a pilha e causar o problema de colisão entre pilha e heap. Isto geralmente ocorre devido à erros de elaboração do código fonte. 16.5 - Ambientes integrados de programação O processo de programar consiste basicamente em: Criar o programa fonte através de um editor. Compilar (pre-processamento, compilação e ligação/edição). Fazer depuração através de um debbuger. Executar o programa. Alguns compiladores, fornecem um ambiente integrado de programação contendo: editor de texto make: programa para organizar a compilação separada de arquivos dependentes compilador debugger: permite acompanhar a execução do programa passo a passo, verificando o valor de variáveis, endereços e expressões. 7

Outros compiladores, por exemplo: gcc do Unix, executam somente a tarefa principal de compilar No entanto existem alguns utilitários destinados a executar as outras tarefas. Alguns desses utilitários são: vi e emacs: editores de texto. make: funciona de modo semelhante ao make dos ambientes integrados xxgdb, dbxtool: auxiliam a depuração. Programas muito extensos devem ser colocados em diferentes arquivos. Vantagens: É mais fácil trabalhar com arquivos pequenos. Permite reutilização. Se um arquivo com código fonte é modificado, somente este é recompilado. Os programadores do Unix utilizam uma maneira padrão para particionar o código. 8