Introdução. Software Básico Aula 3. Prof. Dr. Rogério Vargas.



Documentos relacionados
Organização e Arquitetura de Computadores I

Fundamentos de Arquitetura e Organização de Computadores

Montadores e Compiladores

3. COMPILAÇÃO E ESTRUTURA BÁSICA DE UM PROGRAMA EM C

Introdução a Programação Aula 01

O Sistema de Computação

Oganização e Arquitetura de Computadores

Conteúdos: Debora, Edcarllos, livros! slides disponíveis!

Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Aula 03

Microcontroladores e Microprocessadores. Conversão de Bases Prof. Samuel Cavalcante

Projetando um Computador Parte II Arquitetura do Processador BIP

Projetando um Computador

Linguagem de Programação I

Construção de uma via de dados, abordagem monociclo, multiciclo e pipeline

Arquitetura e Organização de Computadores

Informática Aplicada

Arquitetura de Computadores - Operação da Unidade de Controle. por Helcio Wagner da Silva

Data Path / Control Path Controle do MIPS

Infra-Estrutura de Software. Introdução

Infraestrutura de Hardware. Funcionamento de um Computador

Do alto-nível ao assembly

Arquitetura de Computadores Moderna

Figura 8: modelo de Von Neumann

Histórico e Evolução da Computação

Linguagens de Programação:

O Conjunto de Instruções do Processador

Linguagem de Montagem Assembly

Organização de Computadores 1

MATA49 Programação de Software Básico

Infra-Estrutura de Software. Introdução

Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação.

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

Linux e Computação Científica

Introdução à Computação: Arquitetura von Neumann

Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO

Universidade Federal da Paraíba Centro de Informática Departamento de Informática

AULA 03: FUNCIONAMENTO DE UM COMPUTADOR

BC1424 Algoritmos e Estruturas de Dados I Aula 02: Ponteiros, estruturas e alocação de memória

AULA 3 Alocação dinâmica de memória: Ponteiros

Arquitetura de Computadores

Antes de deixarmos o hardware (1) Nível da Arquitetura do Conjunto das Instruções

Aritmética Computacional. Prof. Leonardo Barreto Campos 1

Trabalhos Práticos Arquitetura de Computadores I Prof. Fabian Vargas

Introdução à Informática. Alexandre Meslin

Linguagem C. Introdução à Programação C. Variáveis. Identificadores. Identificadores 12/03/2011 VARIÁVEIS E TIPOS DE DADOS

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

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

Gerenciamento de Memória Minix 3.1.7

AGT0001 Algoritmos Aula 01 O Computador

AJProença, Sistemas de Computação, UMinho, 2017/18 1

Programação Estruturada

16. Compilação no Linux

Infraestrutura de Software. CIn.ufpe.br

ORGANIZAÇÃO DE COMPUTADORES

TECNOLOGIA EM MECATRÔNICA INDUSTRIAL CONTROLADORES LÓGICOS PROGRAMÁVEIS

Lic. Engenharia de Sistemas e Informática

Organização e Arquitetura de Computadores INTRODUÇÃO

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

Tipos Abstratos de Dados (TAD)

Arquitetura de Computadores II MIPS64. Prof. Gabriel P. Silva

Arquitetura de Computadores - Módulos de E/S. por Helcio Wagner da Silva

Microprocessadores CPU. Unidade de Controle. Prof. Henrique

Prova Modelo. Nome: Número:

SSC510 Arquitetura de Computadores 1ª AULA

Introdução à Programação de Computadores Parte I

Arquitetura FPU: Implementação MIPS32. Guilherme Fernandes Raphanelli Diogo D. Fonseca dos Santos

1. Estrutura de Dados

Arquitetura de Computadores EL66C 1a. Prova - Gabarito 26/04/10

Microcontroladores. Curso Engenharia de Controle e Automação. Alex Vidigal Bastos alexvbh@gmail.com

Introdução à Informática

Maratona de Programação - Dicas Para Iniciantes

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES A UNIDADE LÓGICA ARITMÉTICA E AS INSTRUÇÕES EM LINGUAGEM DE MÁQUINA

Algoritmo e Lógica de Programação. Conceitos de Linguagens de Programação

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

Processador. Processador

CPU. Funções: Componentes: Processamento; Controle. UC (Unidade de Controle); Registradores; ALU s, FPU s etc. Arquitetura de Computadores 3

Unidade Central de Processamento UCP (CPU)

Hardware: Componentes Básicos. Sistema de Computador Pessoal. Anatomia de um Teclado. Estrutura do Computador. Arquitetura e Organização

O Funcionamento do Processador

Aula 01. Breve História dos Computadores Informatiquês O Computador Software vs. Hardware. Introdução à Informática. Prof. Fábio Nelson.

MICROPROCESSADORES. Aula 10

MC Teste de Mesa e Comandos Repetitivos

Introdução aos Sistemas Computacionais 2008/09

INFORMÁTICA. Introdução à Informática Hardware CONHECIMENTOS BÁSICOS EM INFORMÁTICA

MAC2166 Introdução à Computação Aula 1 Como Funciona um Computador

Arquitetura de Computadores. Prof. João Bosco Jr.

Algoritmos APRENDENDO A PROGRAMAR COM C#

Algoritmos e Programação : Conceitos e estruturas básicas. Hudson Victoria Diniz

Caminho de Dados e Controle. Prof. Leonardo Barreto Campos 1

- Campus Salto. Disciplina: Sistemas de Arquivos Docente: Fernando Santorsula

Software Básico (INF1018)

Organização de Computadores

Sistemas Operacionais

Programando em Assembly

Sistemas de Computação

Arquitetura e Organização de Processadores. Aula 2. Processadores RISC Apresentação do processador MIPS

ARQUITETURA DE COMPUTADORES. Professor: Clayton Rodrigues da Siva

Organização Básica de Computadores. Organização Básica de Computadores. Organização Básica de Computadores. Organização Básica de Computadores

Algoritmos e Estruturas de Dados I. Variáveis Indexadas. Pedro O.S. Vaz de Melo

INTERFACE PARALELA. Área: Eletrônica Nível de conhecimento necessário: básico. Autor:

Transcrição:

Introdução Software Básico Aula 3 Prof. Dr. Rogério Vargas http://rogerio.in

Provocação Você já se perguntou como é que os programas que você escreve são traduzidos em instruções executáveis pelas estruturas elementares em uma Arquitetura de Von Neumann?

Objetivo da disciplina Entender como funciona um computador Nível de Linguagem de Montagem e de Máquina Ideia Geral Compreender a interação entre componentes de hw e sw Entender a hierarquia de abstrações implementada por esses sistemas

Hierarquia de Abstrações

Assembly (não é Assembler ) Uso de mnemônicos Cada linha do código fonte possui apenas uma instrução para o processador (CPU) ex.: mov %eax, %edx

Assembly X Assembler Sufixo ER em inglês Programa assembly: usa o sistema operacional (por exemplo para E/S) Um montador ou assembler traduz: assembly linguagem de máquina Nós queremos: lidar com aspectos da programação assembly e linguagem de máquina. Hardware: nos interessa na medida em que influencia essa programação

Geração de um Executável É necessário traduzir o programa para linguagem de máquina Isto é feito em 4 etapas

Geração de um Executável É necessário traduzir o programa para linguagem de máquina Isto é feito em 4 etapas A propósito: eu usarei o compilador GCC do Linux!

1. Pré-Processamento Muda o programa conforme diretivas (#) #include <stdio.h> Incluir o arquivo sdio.h Gera um programa expandido (normalmente com extensão.i)

2. Compilação Traduz o programa.i em assembly Formato típico de saída da maioria dos compiladores Compiladores é uma disciplina regular dos cursos de Ciência da Computação

3. Montagem Transforma o código em assembly para linguagem de máquina Programa objeto Armazenado como um arquivo binário Extensão:.o

4. Ligação O ligador (linker) gera o programa executável a partir do.o gerado pelo assembler. Porém, pode haver funções padrão da linguagem (por ex., printf) que não estão definidas no programa, mas em outro arquivo.o précompilado (no caso, printf.o). O ligador faz a junção dos programas objetos necessários para gerar o executável.

Pra que estudar isso? Programando em linguagem de alto nível (C, C++, etc.) o programador não se preocupa com o gerenciamento de memória, e compilador ajuda a detectar vários erros relacionados a sintaxe e tipos de dados. Porém, é importante conhecer linguagem assembly e o que está por baixo do programa para: 1. Otimizar desempenho de programas Um switch é sempre mais eficiente que uma cadeia de if-else? Por que loops funcionalmente equivalentes podem ter desempenhos significativamente diferentes na execução?

Pra que estudar isso? 2. Entender erros de ligação Costumam ser os erros mais chatos em programação: referências não resolvidas, etc. 3. Se tornar mais preparado para evitar bugs, por exemplo, devido às limitações das representações dos tipos e na manipulação da memória Representações finitas de tipos: int s não são inteiros e float s não são reais e máquina arredonda ou trunca números. x 2 > 0 int: 50000 * 50000 =??? (x + y) + z = x + (y + z) float: 1e20 + (-1e20 + 3.14) =?? Memória não é confinada (bounded) em C. Exemplo de possível erro: main main () () { { long long int int a[2]; a[2]; double double d d = = 3.14; 3.14; a[2] a[2] = = 1073741824; 1073741824; /* /* Referência Referência out out of of bounds bounds */ */ printf("d printf("d = = %.15g\n", %.15g\n", d); d); exit(0); exit(0); } }

Pra que estudar isso? 4. Ser capaz de fazer engenharia reversa entender como um compilador gera código, ou como (uma parte) de um executável funciona 5. Obter uma primeira noção de como programar sistemas embarcados processadores específicos controle de máquinas- para os quais não existe ainda linguagem de alto nível

Onde a gente vai se debruçar

Onde a gente vai se debruçar Representação de dados, mecanismos de controle, funções, pilha, variáveis locais

Onde a gente vai se debruçar Representação de dados, mecanismos de controle, funções, pilha, variáveis locais Linguagem de montagem

Onde a gente vai se debruçar Representação de dados, mecanismos de controle, funções, pilha, variáveis locais Linguagem de montagem Interrupções Interação com SO

Onde a gente vai se debruçar Representação de dados, mecanismos de controle, funções, pilha, variáveis locais Linguagem de montagem Interrupções Interação com SO Ligação

Executando um programa >./hello >hello, word > O programa binário (executável) possui instruções em código de máquina O shell do SO lê o conteúdo para a memória e dispara (run) a execução Isso depende do HW

Um programa na Anatomia da Máquina

CPU (Central Processing Unit) Unidade de Controle Unidade Aritmética e Lógica (ALU) Conjunto de registradores Memória muito rápida contidos na CPU Instruções transferem dados entre memória e registradores Operandos ficam em registradores Exemplos de registradores PC (program counter): endereço da próxima instrução IR (Instruction register): instrução a ser executada Registradores de propósito geral

Fetch-Decode-Execute (busca-decodifica-executa) Algoritmo básico da CPU Busca instrução (copia em IR) Atualiza PC (para a próxima instrução) Decodifica instrução Busca microprograma e operandos na memória Executa instrução Aritméticas e lógicas / transferência de dados / desvio de fluxo Escreve na memória Seta flags de status

Esquema de instruções da CPU load copia um dado da memória para um registrador store copia um dado de um registrador para a memória operate copia dados de registradores para a ULA e executa uma operação jump extrai um endereço de uma instrução e escreve no PC

Memória Armazena dados e instruções de um programa Uma espécie de array sendo que Instruções ocupam um espaço variável Espaço dos dados depende do tipo Os registradores podem armazenar endereços O tamanho dos registradores limita o número de endereços acessáveis Registradores de 32 bits: 2 32 = 4.294.967.296 Registradores de 64 bits: 2 64 = 18.446.744.073.709.551.616

Memória Virtual Cada processo possui uma memória próxima Mapeada em um espaço na memória real Pode extrapolar a memória RAM e usar parte do disco Responsabilidade do SO

Um programa na Anatomia da Máquina Hello, word \n Código de hello

Um programa na Anatomia da Máquina Hello, word \n Código de hello Hello word

O que queremos aprender? Armazenamento e representação dados Linguagem de Montagem (IA32) Conjunto típico de instruções Modelo de execução de linguagem de alto nível Expressões, atribuições, estruturas de controle Chamada de procedimentos Pilha de execução, registro de ativação, parâmetros Representação de ponto flutuante Interação com SO, interrupções Compilação e Ligação