Arquitetura de Computadores Moderna Eduardo Barrére ([email protected]) DCC/UFJF Baseado no material do prof. Marcelo Lobosco Agenda Visão Geral Objetivos do Curso Ementa Bibliografia Avaliações Datas Importantes Histórico e Evolução Abstrações e Tecnologias Computacionais Linguagem de Máquina Visão Geral Estudo da organização e projeto de computadores (hardware e software) com a finalidade de entender/buscar o desempenho Objetivos do Curso Permitir ao aluno: Avaliar arquiteturas e SOs em busca de obter desempenho para finalidades específicas. Estudar e “pensar” o hardware como elemento facilitador/limitador do desempenho da aplicação Estudar e “pensar” o SO como elemento facilitador/limitador do desempenho da aplicação Ementa da parte de Hardware Revisão de: Abstrações e Tecnologias Computacionais; Instruções: a Linguagem de Máquina; Aritmética Computacional; Avaliando e Compreendendo o Desempenho; O Processador: Caminho de Dados e Controle; Pipelining; Hierarquia de Memória Armazenamento, redes e outros periféricos Bibliografia Básica PATERSON, David A. e HENESSY, John L. Organização e Projeto de Computadores: a Interface Hardware/Software. 3ª. Edição. Ed. Campus, 2005. PATERSON, David A. and HENESSY, John L. Arquitetura de Computadores: Uma Abordagem Quantitativa, Ed. Campus, 2003 (3ª ed.) Bibliografia Complementar TANEMBAUM, Andrew S., Organização estruturada de computadores. 5ª. Edição. LTC, 2008. Outras bibliografias no plano da disciplina. Avaliações da 1a parte Uma prova, provavelmente no dia 11/abril, valendo 30 pontos Seminário, provavelmente no dia 15/abril, valendo 20 pontos sobre desempenho de hardware. von Neummann 1952: John von Neumann (1903-1957) projeta a máquina IAS Projeto lógico ainda é a base dos computadores digitais Memória UC ULA acumulador von Neumann E S Transistores 1948: Bell Labs desenvolve o transistor MIT desenvolve TX-0 Primeiro computador transistorizado PDP-1 (US$120,000) Menor, mais rápido e duradouro que as válvulas Primeiro video-game PDP-8 (US$16,000) Único barramento Circuitos Integrados Década de 1960 Chip (vários transistores em uma única pastinha de silício) IBM System/360 Multiprogramação Emulação 16 MB de memória VLSI, ULSI e Computadores Pessoais Década de 1980: Very Large Scale Integration Dezenas/centenas de milhares de transistores em um único chip Década de 1990: Ultra Large Scale Integration Milhões de transistores em um único chip Classes de computadores Desktop Uso individual Ênfase em bom desempenho por um baixo custo Acesso via teclado/mouse Servidor: Múltiplos usuários Projetados para suportar grandes cargas de trabalho (única aplicação complexa/múltiplas tarefas pequenas) Acesso via rede Abrangem faixa mais ampla em termos de custo e capacidade Classes de computadores Computadores embarcados/embutidos: Maior classe de computadores Microprocessadores encontrados em micro-ondas, celular, automóveis, máquinas de lavar, aviões... Projetados para executar aplicações / conjunto de aplicações relacionadas com um único sistema Necessidades específicas: desempenho mínimo com limitações rígidas em relação ao custo ou potência Possuem maior tolerância a falhas Obtida por simplicidade e/ou redundância Por Baixo do Seu Programa Aplicações típicas podem consistir de milhares de linhas de código e se basear em bibliotecas de software que implementam funções complexas Hardware só pode executar instruções extremamente simples Camadas de software interpretam instruções de alto nível nas instruções simples que o hardware compreende Organizadas de modo hierárquico Muitos tipos de software de sistema SO e compilador fundamentais Por Baixo do Seu Programa Compiladores Realizam outra função fundamental: tradução de programas escritos em linguagem de alto nível em instruções que o hardware possa executar Processo complexo devido à sofisticação das linguagens modernas e às instruções simples executadas pelo hardware Disciplina específica para estudar Compiladores Por Baixo do Seu Programa Por Baixo do Seu Programa Linguagens de Alto Nível oferecem vários benefícios Permitem que o programador pense em uma linguagem mais natural Uso de palavras em inglês e notação algébrica Permitem que linguagem seja projetada de acordo com uso pretendido Fortan, Cobol, Lisp... Maior produtividade do programador Linguagens independentes do computador onde serão executadas Falácias e Armadilhas Armadilha: Ignorar o inevitável progresso do hardware ao planejar uma nova máquina Você planeja introduzir um computador revolucionário, 3 vezes mais rápido do que os atuais Prazo para entrar no mercado: 3 anos Você terá sucesso? Provavelmente não Taxa de crescimento anual de desempenho: 50% Falácias e Armadilhas Máquina com desempenho x hoje três anos, 1,53x = 3,4x Nova máquina não teria qualquer vantagem de desempenho Em Falácias e Armadilhas Linguagem de Máquina Instruções: “Palavras” da linguagem de um computador Conjunto de instruções: vocabulário dos comandos entendidos por uma determinada arquitetura Veremos conjunto de instruções de um computador real: MIPS Linguagens de computador são muito semelhantes Aprendendo uma, fácil entender as outras Operações do Hardware do Computador Todo computador precisa ser capaz de realizar aritmética Todas as instruções aritméticas MIPS possuem três operandos A ordem do operando é fixa (destino primeiro) Notação assembly do MIPS para soma add a, b, c #a = b + c Operações do Hardware do Computador Por que não quatro parâmetros? Princípio de projeto 1: a simplicidade favorece a regularidade Hardware com número variável de operandos é mais complexo do que hardware para número fixo Como operar com mais parâmetros? add a, b, c add a, a, d # a = b + c + d; Operações do Hardware do Computador Notação assembly do MIPS para subtração sub d, a, e # d = a – e Compilando atribuição C complexa no MIPS f = (g+h)-(i+j); Uso de variável temporária add t0, g, h add t1, i, j sub f, t0, t1 Operandos do Hardware do Computador Ao contrário dos programas nas linguagens de alto nível, operandos das instruções aritméticas são restritos Registradores Tamanho do registrador MIPS: 32 bits Palavra (word) Quantidade limitada MIPS: 32 registradores Princípio de projeto 2: menor significa mais rápido Operandos do Hardware do Computador Convenção MIPS para representar registradores Sinal de cifrão($) seguido por dois caracteres Veremos o porque dos nomes ao longo do curso Por enquanto: $s0, $s1, ... para registradores que correspondem às variáveis dos programas $t0, $t1, ... para registradores temporários Operações do Hardware do Computador Tarefa do compilador associar variáveis do programa aos registradores Considere exemplo anterior f = (g+h)-(i+j); f, g, h, i e j associados a $s0, $s1, $s2, $s3 e $s4 add $t0, $s1, $s2 # $t0 contém g + h add $t1, $s3, $s4 # $t1 contém i + j sub $s0, $t0, $t1 # f recebe $t0 - $t1 Operações do Hardware do Computador E quanto aos programas com muitas variáveis? E estruturas de dados complexas? Processador só pode conter pequena quantidade de dados nos registradores Compilador tenta manter variáveis mais utilizadas nos registradores (acesso mais rápido) Demais dados mantidos em memória (acesso mais lento) Processo chamado de spilling registers Em MIPS, operações aritméticas só ocorrem com registradores Necessária instruções de transferência de dados entre memória e registradores Para acessar palavra na memória, precisamos de localização: endereço Operações do Hardware do Computador Memória vista como sequência grande e unidimensional, com endereço atuando como índice para esse array Ex: Endereço da terceira posição de memória = 2, conteúdo = 10 Operações do Hardware do Computador Load: instrução que copia dados da memória para registrador (lw: load word) Três parâmetros: Registrador destino: local onde os dados serão copiados Deslocamento (ou offset): distância, a partir do endereço inicial da memória, onde dado se encontra Registrador base: endereço inicial da memória Ex: g = h + A[8] g em $s1, h em $s2 e endereço inicial de A em $s3 lw $t0, 8($s3) add $s1, $s2, $t0 Operações do Hardware do Computador No MIPS, uma word tem 32 bits (4 bytes) 1 byte = 8 bits Endereços reais diferentes dos endereços da figura anterior Endereço em bytes da 3a. palavra é 8 12 8 4 0 32 bits de dados 32 bits de dados 32 bits de dados 32 bits de dados Operações do Hardware do Computador Words em MIPS precisam começar em endereços que sejam múltiplos de 4 Requisito denominado restrição de alinhamento Deslocamento apropriado no exemplo anterior (A[8]): 4 x 8 = 32 Little endian x Big endian Endereço da word definida como o endereço do byte mais à esquerda (big) ou mais à direita (little) MIPS: big endian Operações do Hardware do Computador Store: copia dados de um registrador para a memória (sw: store word) Formato semelhante ao load Registrador a ser armazenado Deslocamento Registrador base Ex: A[12] = h + A[8] lw $t0, 32 ($s3) # $t0 = Memória [$s3+32] add $t0, $s2, $t0 # $t0 = $t0 + $s2 sw $t0, 48($s3) # Memória [$s3+48] = $t0 Operações do Hardware do Computador Quantos endereços temos disponíveis no MIPS? 230 words com endereços de byte 0, 4, 8, ... 4 GB de memória (230 words x 4 bytes por word) Usando instruções vistas até aqui, se quiséssemos usar constante em uma operação, necessário armazená-la em memória Uso de operações com constantes muito comum Custo alto no acesso a memória Alternativa: instruções imediatas Operações do Hardware do Computador Add imediato (addi): constante no lugar de um operando addi $s3, $s3, 4 # $s3 = $s3 + 4 Princípio de projeto 3: agilize os casos mais comuns Operandos constantes ocorrem com frequência Mais rápido incluí-las dentro das instruções aritméticas do que lê-las da memória