software básico (inf1612) 2008.2 inf1612 turma 3wa – roberto ierusalimschy...

21
Software Básico (INF1612) 2008.2 http://www.inf.puc-rio.br/~ inf1612 Turma 3WA – Roberto Ierusalimschy ([email protected]) Turma 3WB – Markus Endler ([email protected])

Upload: ana-morais-zagalo

Post on 07-Apr-2016

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Software Básico (INF1612)2008.2

http://www.inf.puc-rio.br/~inf1612

Turma 3WA – Roberto Ierusalimschy([email protected])

Turma 3WB – Markus Endler([email protected])

Page 2: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Material básico de referência• Computer Systems, A

Programmer's Perspective. Randal Bryant and David O'Hallaron. Prentice Hall. 2003. (CS:APP)

• Resumos, slides e exercícios no site do curso http://www.inf.puc-rio.br/~inf1612

Page 3: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Critério de avaliação• Cada Grau é calculado como a média

geométrica de uma prova (peso 2) e um trabalho (em dupla)– G1 = (P1^2 x T1)^{1/3} – G2 = (P2^2 x T2)^{1/3}

• M = (G1 + G2)/2 – Se G1 e G2 ≥ 3.0 e M ≥ 6.0, M é a nota final

(NF)– Caso contrário:

• NF = (G1+G2+2xPF)/4

Page 4: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Objetivo do curso• Entender em profundidade como funciona um

computador típico, como visto pelo nível de Linguagem de Montagem e pela Linguagem de Máquina.

• Próximo do que seria um curso de “Arquitetura de Computadores”, mas focando no programador, e não no projetista de computadores– Conhecendo mais sobre o que está “por baixo” do

programa, você pode escrever programas mais eficientes e confiáveis.

Semanalmente: aula teórica (2ª) e aula de laboratório (4ª feira).

Page 5: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Hierarquia de abstrações em um sistema de computação

Programa “final” do usuário hardware

Aplicações:jogos, editores de texto, sistemasbancários, etc.

Escritos geralmente em linguagem de alto nível (C, C++, Java, etc).

Linguagem de máquina: binária (0’s e 1’s) – não muito legível por humanos.

ProgramaAssembly

SistemaOperacional

Page 6: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Linguagem Assembly

• A linguagem de montagem (assembly language) é um mapeamento bastante direto da linguagem de máquina, mas que introduz várias facilidades para o programador. – Uso de mnemônicos* para representar as instruções

• "apelidos" das instruções, mais fáceis de guardar na memória do que seu valor hexadecimal exigido pelo processador

• cada linha do código fonte possui apenas uma instrução para o processador (CPU)

– Ex.: MOV EAX, EDX

mnemônico * Que facilmente se grava na memória(Diciionário Michaelis).

Page 7: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Assembly e Assembler• Um programa assembly também fica acima da

camada do sistema operacional, podendo fazer chamadas a ele para requisitar serviços, por exemplo de entrada e saída.

• Um programa montador ou assembler faz a tradução da linguagem assembly para a linguagem de máquina (uma espécie de compilador, porém bastante restrito).

• Esse curso lida com os aspectos de software da programação em assembly e da linguagem de máquina. O hardware só nos interessa na medida em que influencia essa programação.

Page 8: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Processo geral de um executável

• Hello world

Page 9: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Processo geral de um executável

• Modifica o programa em C de acordo com diretivas começadas com #– Ex.: #include <stdio.h> diz ao pré-processador para

ler o arquivo stdio.h e inseri-lo no programa fonte (o resultado é um programa expandido em C, normalmente com extensão .i, em Unix)

(usaremos o compilador gcc doLinux no curso)

Page 10: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Processo geral de um executável

• Compilador traduz o programa .i em programa assembly. É o formato de saída comum para os compiladores nas várias linguagens de programação de alto nível– I.e., programas em C, Java, Fortran, etc vão ser

traduzidos para a mesma linguagem Assembly.

Page 11: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Processo geral de um executável

• Transforma o programa assembly em um programa binário em linguagem de máquina (chamado programa objeto – extensão .o).

Page 12: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Processo geral de um executável

• 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.

Page 13: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Por que o curso?• 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?

Page 14: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

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.

• x2 > 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 (){ long int a[2]; double d = 3.14; a[2] = 1073741824; /* Referência “out of bounds” */ printf("d = %.15g\n", d); exit(0);}

Page 15: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

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

Page 16: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Arquitetura típica de uma máquina

Page 17: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

CPU – Central Processing Unit• Unidade de Controle• Unidade Aritméticae Lógica• Conjunto de registradores

– Funcionam como uma memória de acesso extremamente rápido dado que não dependem da memória principal (cujo acesso requer uso do barramento) pois estão contidos na própria CPU

• instruções de transferência de dados transferem dados entre memória e registradores

– Em muitas máquinas os operandos de diversas instruções devem obrigatoriamente estar em registradores

– Exemplos de registradores• PC (program counter): contém o endereço da próxima instrução a ser

executada• IR (Instruction register): onde é copiada cada instrução a ser

executada • Registradores de propósito geral

Page 18: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

CPU – Central Processing Unit• CPU seguidamente executa instruções

requisitadas à memória. Ciclo fetch-decode-execute:

1. busca nova instrução na memória (e copia para IR)2. atualiza PC 3. decodifica instrução

• busca operandos da memória

4. executa instrução• escreve resultado na memória• seta flags de status

Tipos de instruções:• aritméticas e lógicas• transf. Reg Mem• desvio de fluxo

Page 19: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Barramentos e Dispositivos de E/S

• Barramentos:– “conduítes” elétricos que carregam a informação entre os

vários componentes da máquina– Projetados para transportar “pedaços” de tamanho fixo de

bytes (chamados palavras). Ex.: Intel Pentium tem palavras de 4 bytes (32 bits), e mais recentemente, passou a ter 64.

– Adotaremos a Intel Architecture 32 bits (IA32)• Dispositivos de E/S:

– Conexão da máquina com o mundo externo– Conectados ao barramento de E/S por controladores

(chipsets no próprio dispositivo ou na placa mãe) ou adaptadores (quando placa separada).

Page 20: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Memória• Logicamente, a memória principal corresponde a um

enorme array de bytes (conjuntos de 8 bits), cada um com seu endereço (o índice do array). Os endereços começam de 0.

• Os registradores da CPU muitas vezes são usados para armazenar endereços de memória. Assim, o número de bits em cada registrador limita o número de posições de memória endereçáveis.

• Na IA32, cada registrador tem a capacidade de 32 bits (4 bytes) – e esta será a unidade de acesso à memória

Page 21: Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus

Programa do cursoPróximos assuntos:1. Armazenamento e Representação de tipos básicos e

tipos compostos2. Linguagem de Montagem3. Conjunto típico de instruções4. Modelo de Execução de Uma Linguagem de Alto

Nível (C) Implementação de instruções5. Chamada de procedimentos, Pilha de execução e

passagem de parâmetros6. Representação de números em ponto flutuante e

Processamento em Ponto Flutuante7. Link-edição 8. Interação com o Sistema Operacional (interrupções)