A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Software Básico (INF1612) 2008.2 Turma 3WA – Roberto Ierusalimschy Turma 3WB – Markus.

Apresentações semelhantes


Apresentação em tema: "Software Básico (INF1612) 2008.2 Turma 3WA – Roberto Ierusalimschy Turma 3WB – Markus."— Transcrição da apresentação:

1 Software Básico (INF1612) 2008.2 http://www.inf.puc-rio.br/~inf1612 Turma 3WA – Roberto Ierusalimschy (abraposo@tecgraf.puc-rio.br) Turma 3WB – Markus Endler (endler@inf.puc-rio.br)

2 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 http://www.inf.puc-rio.br/~inf1612

3 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

4 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).

5 Hierarquia de abstrações em um sistema de computação Programa “final” do usuário hardware Aplicações: jogos, editores de texto, sistemas bancá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. Programa Assembly Sistema Operacional

6 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).

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

8 Processo geral de um executável Hello world

9 Processo geral de um executável Modifica o programa em C de acordo com diretivas começadas com # –Ex.: #include 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 do Linux no curso)

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

11 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).

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

13 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?

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

15 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

16 Arquitetura típica de uma máquina

17 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

18 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

19 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).

20 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

21 Hierarquia de Memória Dada o custo de se ler e escrever em memória, ela se organiza numa hierarquia

22 Execução do programa Ao digitar “hello”, os caracteres são passados para um registrador e depois para memória principal.

23 Execução do programa Ao clicar “Enter”, sabe-se que acabou o comando e então é realizada uma seqüência de instruções para copiar código e dados do programa objeto hello.o do disco para a memória principal

24 Execução do programa PC aponta para o endereço de memória onde o programa foi escrito Processador executa instruções em linguagem de máquina da “main” do programa

25 Programa do curso Próximos assuntos: 1.Armazenamento e Representação de tipos básicos e tipos compostos 2.Linguagem de Montagem 3.Conjunto típico de instruções 4. Modelo de Execução de Uma Linguagem de Alto Nível (C) Implementação de instruções 5.Chamada de procedimentos, Pilha de execução e passagem de parâmetros 6.Representação de números em ponto flutuante e Processamento em Ponto Flutuante 7.Link-edição 8.Interação com o Sistema Operacional (interrupções)


Carregar ppt "Software Básico (INF1612) 2008.2 Turma 3WA – Roberto Ierusalimschy Turma 3WB – Markus."

Apresentações semelhantes


Anúncios Google