Arquitetura de Computadores Celso Alberto Saibel Santos Professor do Depto. Informática UFES - Universidade Federal do Espírito Santo 1 O que é a Arquitetura de um Computador? Arquitetura de Computadores = Conjunto de Instruções (ISA - Instruction Set Architecture) + Organização da Máquina 2 Arquitetura Básica dos Computadores Atuais CPU: ALU (datapath) + control interrupts Cache main bus Main Memory I/O Controller I/O Controller I/O Controller Graphics display Keyboard 3 Implementação um pipeline Busca Instrução Decodifica instrução Ordem de execução 1 Executa Operação Acessa Memória Escreve resultado 1 clock 2 1 3 2 4 3 5 4 1 2 1 3 2 1 5 4 3 2 1 5 4 3 2 5 4 3 5 4 5 tempo 4 Problemas a vista: conflitos do pipeline • Conflitos estruturais: com uma memória única para dados e instruções, existe um conflito entre o ciclo de busca de instrução e escrita em memória; a solução é usar duas memórias independentes (design) • Conflitos de controle: obrigam a parada do pipeline − Instruções de desvio − Paradas geram bolhas no pipeline Ordem de execução add $4,$5,$6 beq $1,$2,40 lw $3,300($0) busca di ULA mem w reg busca di ULA mem bolha bolha bolha busca di w reg bolha ULA bolha mem w reg tempo 5 Outros conflitos • Conflitos por dados: a próxima instrução utiliza um operando da instrução anterior que ainda não está pronto: add $s0, $t0, $t1 sub $t2, $s0, $t1 Ordem de execução add$s0,$t0,$t1 sub $t2,$s0,$t3 busca di ULA busca di mem w reg di ULA mem w reg tempo 6 Soluções clássicas para conflitos • Reordenação do código (compilador): mudar a ordem de execução sem que o resultado da execução global seja alterado pode evitar as bolhas • Incluir instruções do tipo NOP • Adiantamento de instruções • Pré-suposição da realização do desvio condicional (if) • Predição dinâmica em loops e desvios baseado em dados armazenados (história) • E em pipelines superescalares? Mais complexidade... 7 Próximo passo... • Hierarquia de Memória: reduzindo o tempo de acesso aos dados 8 Os componentes clássicos de um computador Computer Processor Memory Devices Control Input Datapath Output • O processador deve buscar cada dado e instrução na memória durante a execução de um programa: o tempo de acesso é fundamental para o desempenho! 9 Desafios para a memória... • Desempenho da CPU aumenta 25-50% p.a. • Desempenho das memórias, cerca de 7% p.a. Capacidade Lógica: 2x em 3 anos Velocidade 2x em 3 anos DRAM: 4x em 3 anos 1.4x em 10 anos Disco: 2x em 3 anos 1.4x em 10 anos • Valores típicos em 2004: 10 Características das memórias DRAM 11 Tipos de Memória Baseada em Semicondutores Reflexões Sobre Arquiteturas de Memórias • A “velocidade” de memória aumenta muito menos rapidamente que a dos processadores (Lei de Moore) • Para máquinas + rápidas, é necessário projetar um sistema de memória de forma a não desperdiçar os ganhos adquiridos com o processador • Solução: hierarquia de memória e caches • É desejável que o usuário “acredite” que ele tem um espaço de memória enorme, mesmo se a quantidade de memória é sabidamente limitada • O SO precisa suprir o mesmo espaço de memória para vários usuários sem que haja conflito • Solução: Memória Virtual 13 Melhorando o desempenho: Princípio da localidade • Localidade Temporal − Uma palavra de memória que acaba de ser referenciada, tende a ser novamente referenciada • Localidade Espacial − Itens cujos endereços estão próximos daqueles que acabam de ser referenciados tendem a ser referenciados também brevemente • Conclusão: usar mecanismos que permitam armazenar temporariamente o material com que se trabalha • Observar a estrutura dos programas: − Programas acessam somente uma pequena porção de memória num curto espaço de tempo variáveis - temporal laços - temporal e espacial percurso de arrays - espacial 14 Idéia de hierarquia para a memória • Dividir o espaço de memória em níveis com tamanhos, velocidades e custos diferentes por nível • O princípio da localidade pode ser aplicado diretamente à hierarquia de memória: quanto mais rápida a memória, mais próxima ao processador Processador Velocidade Tam + rápida menor Custd: $/bit Exemplo + alto 128K SRAM Memória Nível 1 Memória Nível 2 1G DRAM Memória Nível 3 + lenta maior + baixo 500 G Mag. Disk capacidade 15 Hierarquia de Memória atualmente Capacidade Tempo de Acesso Registradores CPU ~100 Bytes ~10 ns Cache K Bytes 10-100 ns Estágio Unidade + rápido Registradores Operandos Inst. SO 512-64K bytes Disco Arquivos Tape infinito sec-min contr. cache 8-128 bytes Memória Páginas Disco G Bytes ms prog./compil. 1-8 bytes Cache Blocos Memória Principal M Bytes 100ns-1us Nível + Alto Tape, ... user/operador Mbytes Maior Nível + baixo Fonte: Slides Patterson 16 Funcionamento a hierarquia (1) • Unidades de mapeamento entre níveis: blocos • Se um bloco está no nível i, ele também estará presente no nível i+1 da hierarquia 17 Funcionamento a hierarquia (1) • Pode conter diversos níveis: a gerência é feita entre apenas entre níveis adjacentes • Se a informação solicitada pelo processador estiver presente no nível superior da hierarquia, ocorre um “acerto” (hit) • Se a informação não puder ser encontrada nesse nível, ocorre uma “falha” (miss) e um nível mais baixo é acessado para que o bloco desejado seja recuperado • A medida de desempenho da hierarquia é relacionada à taxa de acertos dos acessos: fração dos acessos à memória encontrados no nível superior • Outra medida: taxa de falhas = 1 – taxa de acertos 18 Funcionamento a hierarquia (2) Desempenho ~ tempo de acesso à memória 1. Tempo de acerto (ta): tempo para acessar o nível superior da hierarquia (RAM) + tempo necessário para se determinar se o acesso é ou não um acerto 2. Penalidade por falta (tf): tempo para substituir um dos blocos do nível superior pelo bloco do nível inferior com a informação desejada + tempo para enviar o dado ao processador ta << tf: tempo de acesso ao nível inferior é muito maior • Hierarquia de memória tem influência direta na gerência de memória feita pelo SO, no código gerado pelo compilador e até mesmo no tipo de aplicação a ser executada na máquina. 19 Conceitos básicos sobre Memória Cache • Cache: esconderijo! ☺ • De maneira abrangente: qualquer memória gerenciada que tira proveito das propriedades de localidade • Como fazer para guardar os dados e instruções recentemente usados numa cache: − Como saber se um item de dado está ou não na cache? − Se estiver, como achá-lo? • Caches com mapeamento direto mapeiam cada endereço de memória numa locação específica da cache − Várias locações de memória têm a mesma locação na cache − Usa um mecanismo modulo N (N é potência de 2) − Precisa de uma tag indicando o endereço atualmente armazenado − Precisa de um bit de validade indicando se o dado está na cache 20 Cache com mapeamento direto simples Memória 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Cache diretamente mapeado Tamanho = 4 0 1 2 3 •Cache de 4 (22) palavras •Endereços de memória “mod 4” mapeiam locações de cache •Muitos endereços de memória são mapeados p/ uma mesma locação •Usa log2N bits de endereços para a indexaçao da cache 21 Acesso à cache: Rótulo (tag) e Índice (index) Considerando endereços de memória de 32-bits : Uma cache com mapeamento direto de 2N bytes: − Índice (index): Os N bits mais baixos dos endereços de memória − Rótulo (tag): Os (32-N) bits mais altos dos endereços de memória 31 Endereços de Memória Cache Tag Bit validade N Ex: 0x50 Armazenados como parte do cache “state” 0x50 : : 0 Cache Index 2 N Bytes Cache com Mapeamento Direto Byte 0 0 Byte 1 1 Byte 2 2 Byte 3 3 : Byte 2N -1 Fonte: Slides do Patterson Ex: 0x03 2 N- 1 22 Alguns comentários… • Cache com mapeamento direto precisa ser grande suficiente , por ex, para que as últimas instruções num laço de execução não se sobreponham sobre as anteriores (a cache com 4 blocos é apenas exemplo) • Podem existir 2 caches o numa arquitetura: uma para instruções e outra para dados − Em geral, não é mais eficiente que apenas uma cache para um tamanho fixo de cache − Mas, o dobro de vazão pode ser compensar • No start-up, a cache está vazia (ou inválida) e tem-se uma taxa de falhas elevada inicialmente • A abordagem trata assim da localidade temporal, mas não da localidade espacial 23 Cache com 64KB (DECStation 3100) Endereços de Memória 31 30 29 28 ... ... 19 18 17 16 15 14 13 12 ... 14 Index 16 V Tag ... 7 6 5 4 3 2 1 0 Deslocamento Data-32bits 16k entradas Tag 16 Valid 32 EQ AND Data HIT 24 Sequência de acessos para leitura numa cache (1) (1) Estado inicial da cache, após inicialização da máquina 25 Sequência de acessos para leitura numa cache (2) (2) Referência ao endereço 10110 provoca uma falta 26 Sequência de acessos para leitura numa cache (3) (2.1) Tratamento da falta: buscar no nível inferior (ex. memória principal) o bloco com endereço 10110 27 Sequência de acessos para leitura numa cache (4) (3) Referência ao endereço 11010 provoca uma falta 28 Sequência de acessos para leitura numa cache (5) (3.1) Tratamento da falta: buscar no nível inferior (ex. memória principal) o bloco com endereço 11010 29 Sequência de acessos para leitura numa cache (6) (4) Referência ao endereço 10000 provoca uma falta 30 Sequência de acessos para leitura numa cache (7) (4.1)Tratamento da falta: buscar no nível inferior (ex. memória principal) o bloco com endereço 10000 31 Sequência de acessos para leitura numa cache (8) (5) Referência ao endereço 00011 provoca uma falta 32 Sequência de acessos para leitura numa cache (9) (5.1) Tratamento da falta: buscar no nível inferior (ex. a memória principal) o bloco com endereço 00011 33 Sequência de acessos para leitura (6) Referência ao endereço 10010 provoca uma falta 34 Sequência de acessos para leitura (9) (6.1) Tratamento da falta = buscar no nível inferior (ex. memória principal) o bloco com endereço 00011, escrevendo-o na posição 010 da cache 35 Localidade temporal • A cache mostrada anteriormente apenas explora a localidade temporal • Para tratar com a localidade espacial um bloco de mais de uma palavra é transferido para a cache no caso de uma falha (miss) • No exemplo seguinte, a cache tem o mesmo tamanho (64KB), mas 4K entradas para blocos de 16 bytes cada: − Os próximos devem gerar acertos ao invés de faltas − Isso pode provocar um aumento significativo na taxa de acertos, mesmo com pequenos tamanhos de blocos 36 Cache com 64KB (DECStation 3100) Endereços de Memória 31 30 29 28 ... ... 19 18 17 16 15 14 13 12 ... ... 7 6 5 4 3 2 1 0 Block offset Index V Tag Data-0 Data-4 Data-8 Data-12 4k entries Tag Valid EQ Select AND HIT Data 37 Outro exemplo de cache 16KB 38 Resultados de desempenho das duas caches Programa Tam. Bloco TaxaI-miss Taxa D-miss Taxa Comb. miss gcc 1 4 6.1% 2.0% 2.1% 1.7% 5.4% 1.9% spice 1 4 1.2% 0.3% 1.3% 0.6% 1.2% 0.4% Fonte: Livro P&H p. 329 Tamanho da cache: 128KB (64KB Dados + 64KB Instruções) 39 Tamanho do Bloco de Cache • Em geral, um tamanho maior leva a vantagem da localidade espacial dos dados, MAS: − Maior tamanho de bloco significa maior penalidade de falhas (miss penalties) – mais tempo para encher um bloco − Se o tamanho do bloco é muito grande em relação ao tamanho da cache, a taxa de falhas irá aumentar TMédio de Acesso = tacerto x (1 – taxa_acerto) + penalidade_falha x tfalhas Taxa de Acerto Taxa de Falhas Explora a Localidade Espacial Poucos blocos: compromete a localidade temporal Tam. Bloco Tam. Bloco Tempo Médio de Acesso Aumenta Miss Penalty & Miss Rate Tam. Bloco Fonte: Patterson slides 40 Taxa de Falha x Tamanho de Bloco - SPEC92 Fig.7.8 – p.481 41 Acessos para escrita • Não são tão simples em se tratando de cache − Deve-se assegurar que o dado foi escrito na memória − Do contrário, memória e cache podem se tornar inconsistentes • Solução mais simples: write-through − Memória e cache escritas ao mesmo tempo − Mas se for necessário uma espera para isso, os valores da cache serão perdidos! Usar um buffer (FIFO) no caminho de escrita para a memória Buffers permitem “equalizar” o serviço quando a taxa de chegada de requisições é variável (algo como cadeiras num banco para os clientes esperarem…) 42 Outras soluções para escrita… • Escrita somente no retorno: write-back − Atualização quando o bloco for susbstituído e se houver ocorrido alteração • Escrita somente uma vez : write-once − Ideal para sistemas multiprocessadores, que compartilham um mesmo barramento − O controlador da cache escreve a atualização na memória principal sempre que o bloco for atualizado pela primeira vez na cache – ou seja, faz um writethrough e ainda alerta os demais componentes ligados ao barramento que houve a alteração 43 Comparando as três soluções • write-through : pode acontecer uma grande quantidade de escritas desnecessárias na memória… • write-back : minimiza o problema, mas a memória pode ficar temporariamente desatualizada, obrigando que outros dispositivos acessem os valores via cache… • write-once : conveniente, mas apenas em sistemas com múltiplas CPUs; utilização excessiva do barramento pode ser um fator de queda de desempenho… 44 Indo mais adiante... • Outros Modelos de mapeamento − Conjunto Associativo; Totalmente Associativo − Direto = one-way associativo 45 Indo mais adiante... 46 Indo mais adiante... 47 Indo mais adiante... • Elementos de Projeto de uma Cache − Definição do tamanho − Função de mapeamento de dados Memória/cache − Algoritmos de substituição de dados na cache − Política de escrita na cache 48 Próximo passo... • Hierarquia de Memória: Memória Virtual, Paginação, Aumento de Desempenho 49 Requisitos de um Sistema de Memória • Dar a ilusão de um vasto espaço de memória total memória para todos os jobs simultâneos > memória real um job pode usar um espaço de endereços > memória atual • Acesso rápido à memória • Transparência: − Livrar os programadores da tarefa de otimizar da utilização da memória → cache:memória:disco • Espaço de endereçamento uniforme: − Não se pode saber onde os programas serão carregados nem quais partes dos programas serão mudadas e recarregadas durante a execução − Ideal: os endereços situados entre 0 e 2N-1 50 Endereço virtual x endereço físico • O programador usa um espaço de endereçamento virtual “imenso”, por ex. 263 bytes − Ele pode escrever programas como se todas essas posições de memória existissem realmente! − O SO e a arquitetura de memória gerenciam o mapeamento endereço virtual – físico − Se o programa é realmente muito grande, deve existir uma forma de armazená-lo na memória da máquina – seja em memória ou em disco (“memória de massa”) • A memória real é normalmente muito menor que o espaço virtual de endereçamento − o tanto quanto puder ser suportado… − endereços físicos ou reais? 51 Memória Virtual • Mapeamento endereços virtuais – memória real é feita em blocos – tipicamente de 1 a 8KB • Blocos de memória virtual são chamados páginas • Páginas de memória virtual que estão no disco são chamadas de paginadas-fora (paged-out) • Uma referência feita a uma página que não está na memória principal é chamada de falha de página (page fault) • A transformação entre endereços virtuais em endereços físicos (memory mapping) é feito através de uma tabela de paginação (page table) 52 Mapeamento de endereços virtuais Prog A Virtual Addresses 0x0000 Physical Memory Addresses Prog B Virtual Addresses Unused Unused 0x1000 0x2000 Unused Memory address space 0x3000 0x4000 0x5000 0x6000 0x7000 Virtual Address Space No memory ::: Disk Addresses ::: 0xD000 0xE000 0xF000 53 Mapeamento de Memória • O mapeamento Endereço Virtual x Endereço Físico é também chamado de translação de endereço • No INTEL 80386: espaço de end. lógico de 4GB (232) – 220 páginas de 4KB – endereços de 12 bits. Uma tabela de página poderia ocupar 4MB de memória (entradas de 4 bytes) • Endereços virtuais são divididos em Número da Página Virtual (NPV) e offset da página (12 bits, nesse caso) • Mapeamento de memória feito observando-se o NPV na tabela de páginas e concatenando com o offset da página • Nas arquiteturas atuais, o tamanho das tabelas de página varia (esquema de diretório de tabelas) 54 Processo de Mapeamento • Considere um espaço de endereçamento virtual de 4 GB e um espaço físico em memória de 1 GB 4GB 31 30 29 28 .. .. 15 14 13 12 11 10 9 Número da Página Virtual .. .. 3 2 1 0 Deslocamento Translação 29 28 .. .. 15 14 13 12 11 10 9 Número da Página Física .. .. 3 2 1 0 Deslocamento 1GB 55 Falhas com Memória Virtual • Custo de uma falha é muito alto: em torno de ms para acessar um bloco de disco • As páginas devem ser grandes o suficiente para amortizar o alto custo de acesso (4 KB, 8 KB, e mesmo MB …) − Mas não tão grandes para evitar a fragmentação… − Tamanho fixado pelo hardware (MMU) • Re-estruturação de programas reduz taxa de falhas • Processar as falhas de página por SW e não por HW − Algoritmos sofisticados podem ser empregados − Pequenos aumentos na miss rate podem ser recompensadas pela redução de custos do algoritmo • Evitar a política write-through: − Escritas em níveis mais baixos são muito demoradas 56 Tabelas de Páginas (1) • As páginas deveriam poder ser localizadas em qualquer lugar conveniente na memória − Qualquer página virtual pode ser mapeada em qualquer página física disponível − Chamado mapeamento totalmente associativo − Tabela de páginas faz o mapeamento e reside na memória − Cada programa tem sua própria tabela de página − O hardware tem um registrador de tabela que aponta para a tabela de página • O diagrama anterior de mapeamento torna-se, então: 57 Tabelas de Páginas (2) 4GB 31 30 29 28 .. .. 15 14 13 12 11 10 9 Número da Página Virtual Validade .. 3 2 1 0 Deslocamento 20 Registrador da tabela de página .. Endereço Virtual 12 Número da página física Page table 18 Se Zero : Falha de página 1GB 29 28 .. .. 15 14 13 12 11 10 9 Número da página física .. .. 3 2 1 0 Deslocamento Endereço Físico 58 Falhas de Página (Page Faults) (1) • Quando o valid bit é zero ele indica que a página não está na memória principal • O controle deve ser passado ao SO para buscar a página (ou criar a página, para páginas de dados…) − Tipicamente o SO cria uma imagem do programa no disco quando o programa começa − Busca as partes relevantes quando é preciso − Onde olhar? – um mapeamento é necessário para mostrar onde estão as imagens no disco − Pode ser parte da tabela de páginas ou ser feita em separado 59 Falhas de Página (Page Faults) (2) • Se todas as páginas na memória física estão em uso e o S.O. precisa substituir uma – Qual será escolhida? • Política de substituição de páginas − Localidade Temporal é um critério normal − Menos recentemente usada (MRU ou LRU) i.e., sendo os acessos recentes às páginas: 10, 12, 9, 7, 11, 10. MRU numa falha de página trocaria a página 12; na próxima falha, substituiria a página 9, etc. • Tabelas de páginas tem um bit de uso ou referência − “Levado a 1” quando a página é acessada − Pode ser periodicamente “levado a 0” pelo S.O. − Possibilita que o S.O. tenha uma visão aproximada das páginas recentemente utilizadas 60 Falhas de Página (Page Faults) (3) • Para um endereço virtual de 32-bits, páginas de 4KB (12-bits) com 4 bytes por entrada na tabela de página − 220 pag x 4 bytes = 4MB − Isto para cada programa ativo → muito memória “presa” em tabelas de páginas não usadas • Existem soluções para o problema, não abordadas nesse curso − Ex: registradores de limites 61 Operações de escrita • Write-through para o nível mais baixo da hierarquia (o disco nesse caso) é impraticável nesse caso devido ao alto custo para a escrita no disco • A idéia é “salvar as escritas” para depois executá-las • Write-back quando a página é substituída! • Entretanto... − Custoso e desnecessário fazer write-back para páginas para as quais não forem feitas escritas (por ex., páginas de programa) − Assim, as tabelas de páginas têm um bit de sujeira (dirty bit) por entrada que é setado quando dados são escritos na página − Se esse dirty bit é setado quando a página precisa ser substituída, ele é escrito em write-back para a imagem do programa no disco 62 Fazendo isso rápido… • Tabela de páginas em máquinas atuais está na memória principal: − 2 registradores: um de base da tabela na memória e outro indicando o no. de entradas • Portanto ... − Cada acesso à memória lógica de um programa necessita de dois outros acessos à memória fícia para achar a tabela de páginas • Como agilizar isso? − Localidade de referências novamente • Inserir numa cache as tabelas de página mais recentementes utilizadas: − Translation-lookaside buffer = cache inserida dentro da MMU (memory management unit) 63 Translation-Lookaside Buffer (TLB) Número da página virtual Validade Rótulo End. Página Física TLB Validade Página Física ou End. Disco Memória Física Tabela de Página Disco 64 Outro exemplo de TLB 65 Translation-Lookaside Buffer • TLB é uma cache • Se não existir a entrada na TLB, é preciso buscá-la na tabela de páginas que está na memória principal • A tabela de páginas tem uma entrada para cada página • O TLB e a página usam o dirty bit e o reference bit • Usar a abordagem write-back para esses bits da TLB para a página de tabelas numa falha é muito eficiente 66 Exemplos de Sistemas de Memória Characteristic Virtual address Physical address Page size TLB organization Intel Pentium Pro 32 bits 32 bits 4 KB, 4 MB A TLB for instructions and a TLB for data Both four-way set associative Pseudo-LRU replacement Instruction TLB: 32 entries Data TLB: 64 entries TLB misses handled in hardware Characteristic Cache organization Cache size Cache associativity Replacement Block size Write policy Intel Pentium Pro Split instruction and data caches 8 KB each for instructions/data Four-way set associative Approximated LRU replacement 32 bytes Write-back PowerPC 604 52 bits 32 bits 4 KB, selectable, and 256 MB A TLB for instructions and a TLB for data Both two-way set associative LRU replacement Instruction TLB: 128 entries Data TLB: 128 entries TLB misses handled in hardware PowerPC 604 Split intruction and data caches 16 KB each for instructions/data Four-way set associative LRU replacement 32 bytes Write-back or write-through 67 Memória x área do processador 68 Próximo passo... • Arquiteturas Avançadas: multicomputadores e multiprocessadores 69 Sistemas Multiprocessadores (I) • Mais que uma CPU • Em geral confinadas a um mesmo espaço físico (gabinete, rack, ...) • Fortemente acoplados • Comunicação via memória compartilhada 70 Sistemas Multiprocessadores (II) CPU CPUcache Bus Mem 71 Sistemas Multiprocessadores (III) CPU Switch (Ômega) Mem 72 Sistemas Multiprocessadores (IV) CPU Mem Crossbar 73 Sistemas Multicomputadores (I) • Mais que uma CPU • Máquinas podem estar geograficamente distantes • Sistemas fracamente acoplados • Cada processador possui sua memória local própria e a comunicação é feita por passagem de mensagens 74 Sistemas Multicomputadores (II) Mem local CPU Rede 75 Sistemas Multicomputadores (III) MALHA TRIDIMENSIONAL (k=3, n=3) Mem local CPU 76 Desafios • • • • • Balanceamento de carga entre processadores Adequação aplicação x arquitetura Coerência de memória (cache) Linguagem de programação e compiladores Limitações físicas: temperatura, comprimento das ligações, custo 77 “Cadeia alimentar dos computadores” até 1990 (chegando ao limite) Mini Computer Workstation (futuro incerto) PC Mainframe Vector Supercomputer MPP 78 Cadeia alimentar dos computadores: Clusters substituem as “grandes máquinas” 79