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])

Transcript of Software Básico (INF1612) 2008.2 inf1612 Turma 3WA – Roberto Ierusalimschy...

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)