MEMÓRIAS E TIPOS DE MEMÓRIA Aula 08 – Arquitetura de Computadores Gil Eduardo de Andrade O conteúdo deste documento é baseado no livro “Princípios Básicos de Arquitetura e Organização de Computadores” – Linda Null e Julia Labur. 1. Introdução A maioria dos computadores são construídos utilizando o modelo Von Neumman, centrado na memória. Os programas que realizam processamento são armazenados na memória. As memórias são estruturadas como arrays (vetores) lineares de posições, com endereços de 0 até o tamanho máximo da memória que o processador pode endereçar. 2. Tipos de Memória Os vários tipos de memória existentes em um computador estão ligados ao fato de que a tecnologia evoluiu ao longo dos anos e novos tipos de memória mais avançados foram criadas com isso, aumentando sua capacidade e velocidade de acesso. Embora exista um grande número de tecnologias de memória, existem somente dois tipos básicos: RAM (random access memory) e ROM (ready-only memory). As memórias RAM são ditas de acesso aleatório, porém é um termo errôneo, ela seria mais bem definida como memória de leitura e escrita. A memória RAM é aquela a qual as especificações de um computador se referem. Quando compramos um computador de 128 megabytes de memória, isso significa que ele tem 128 MB de RAM. Ela também é conhecida como memória principal. Na memória de escrita-leitura temos armazenados os programas e dados que o computador necessita durante a sua execução. Contudo a RAM é uma memória volátil, perdendo suas informações quando a energia do computado é desligada. Exstem dois tipos gerais de chips usados para construir a maior parte das memórias RAM nos computadores atuais: SRAM (static) e DRAM (dynamic random access memory). A DRAM é construída com minúsculos capacitores que deixam escapar eletricidade, a DRAM requer uma recarga a cada poucos milissegundos para manter os seus dados. A tecnologia estática (SRAM), em contraste, mantém o seu conteúdo enquanto a alimentação estiver disponível. A SRAM consiste em circuitos similares aos flip-flops D. A SRAM é muito mais rápida e cara que a DRAM, entretanto os projetistas usam DRAM porque ela é muito mais densa (pode armazenar muito mais bits por chip), usando menos energia e gerando menos calor que a SRAM. Frequentemente ambas as tecnologias são combinadas: DRAM para memória principal e SRAM para memória cache. Além da RAM, a maioria dos computadores contém uma pequena quantidade de ROM que armazena informações importantes, necessárias para operar o sistema, tal como o programa necessário para a carga inicial do computador. A ROM não é volátil e sempre retém seus dados. Este tipo de memória é também usado em sistemas embarcados ou em quaisquer sistemas onde a programação não necessita ser alterada. Existem 5 tipos de ROM: ROM, PROM, EPROM, EEPROM e memória Flash. A memória flash é uma evolução da EEPROM, onde dados podem ser escritos ou apagados em blocos, removendo a limitação de um byte de cada vez. Isto torna a memória flash mais rápida do que a memória EEPROM. 3. Hierarquia de Memória Umas das considerações mais importantes para a compreensão da capacidade de desempenho de um processador moderno é a hierarquia da memória. Como existem tipos e tipos de memória (velocidade / custo), os sistemas de computação atuais usam uma contribuição de tipos de memória para fornecer um melhor desempenho ao melhor custo. Essa abordagem é designada memória hierárquica. Como regra temos: quanto mais rápida for a memória, mais cara ela se torna por bit armazenado. Os tipos básicos que normalmente constituem o sistema de memória hierárquica incluem registradores, cache, memória principal e memória secundária. Atualmente cada computador possui uma pequena quantidade de uma memória rápida, chamada cache. Esta memória está conectada a uma memória principal muito maior, que é geralmente uma memória de média velocidade. Esta memória é complementada por um memória secundária bastante grande, composta por um disco rígido e diversos meios removíveis. Ao usar tal esquema é possível melhorar a velocidade de acesso efetivo à memória usando chips rápidos e caros, permitindo aos projetistas criar um computador com uma performance aceitável. Classificamos a memória com base na sua “distância” do processador, sendo medida pelo número de ciclos de máquina necessários para o acesso. Quanto mais próxima do processador mais rápida ela deve ser. Portanto tecnologias mais lentas são usadas paras memórias mais distantes da UCP e tecnologias mais rápidas são usadas para memórias mais próximas da UCP. Sendo assim memórias mais rápidas tendem a ter menos capacidade em relação a memórias mais lentas devido ao alto custo. Figura 01: Hierarquia de Memória 3.1 Localidade de Referência Quando uma posição de memória X é acessada em um tempo t, existe uma alta probabilidade de que a posição de memória X+1 também será acessada em um futuro próximo. Este conjunto de referências à memória em grupos é um exemplo de localidade de referência. Existem três formas básicas de localidade: • Localidade temporal – Itens recentemente acessados tendem a ser acessados novamente em um futuro próximo; • Localidade espacial – Acessos tendem a ser agrupados no espaço de endereçamento (por exemplo, como arrays ou laços); • Localidade sequencial – Instruções tendem a ser acessadas sequencialmente O princípio da localidade fornece para um sistema a oportunidade de usar uma pequena quantidade de memória muito rápida para acelerar efetivamente a maioria dos acessos à memória. Normalmente, somente uma pequena quantidade de espaço total de memória está sendo acessada em um dado momento, e os valores neste espaço estão sendo acessados repetidamente. Entretanto podemos copiar esses valores de uma memória mais lenta para uma memória mais rápida, que reside em um nível mais alto da hierarquia. 4. Memória Cache Um processador de computador é muito rápido e está constantemente lendo informações da memória, o que significa que frequentemente tenha que esperar que uma informação chegue, porque os tempos de acesso à memória são mais lentos do que a velocidade do processador. A memória cache é uma memória pequena, temporária, porém rápida, que o processador usa para informações que, provavelmente, serão necessárias a curto prazo. O tamanho da cache pode variar bastante. Em um computador pessoal típico a cache de nível 2 (L2) possui 256K ou 512K. A cache de nível 1 (L1) é menor, normalmente 8k ou 16K. A cache L1 reside no processador, enquanto a cache L2 reside entre a UCP e a memória principal. A cache L1 é contudo mais rápida que a cache L2. O objetivo da cache é acelerar os acessos a memória, armazenando dados recentemente usados mais próximo da UCP em vez de armazenálos na memória principal. O que torna a cache especial é que ela não é acessada por endereço; ela é acessada por conteúdo. Por esta razão, a cache é, algumas vezes, chamada de memória “endereçável” por conteúdo. Na maioria dos esquemas de cache, as entradas na cache devem ser verificadas ou pesquisadas para saber se o valor sendo requisitado está armazenado na cache. Diversos algoritmos são utilizados para simplificar este processo. 4.1 Mapeamento direto Como existem mais blocos de memória principal do que de blocos de cache, fica claro que blocos a memória principal competem por posições na cache. O mapeamento direto mapeia o bloco C da memória principal no bloco Y da memória cache. Por exemplo se a cache contém 10 blocos, então o bloco 0 da memória principal mapeia o bloco 0 da cache, o bloco 1 da principal mapeia o 1 da cache e assim por diante, como mostra a imagem abaixo. Figura 02: Mapeamento direto de blocos da memória principal para blocos da cache. 4.2 Quando a Cache não funciona Quando programas apresentam localidade, a cache funciona muito bem. Entretanto, se programas apresentam pouca localidade, a cache não funciona bem e a performance de uma hierarquia de memória é ruim. Em particular, a programação orientada a objetos pode fazer com que programas exibam uma localidade abaixo do ideal. Outro exemplo são arrays (matrizes) que possuem várias linhas de dados. Caso o programa acesse uma linha do array de cada vez, o primeiro acesso a linha produz uma falha. 4.3 Níveis de Cache Como visto anteriormente a cache L1, ou cache interna encontra-se dentro do processador, sendo a cache com velocidade de acesso mais rápido na casa de 4ns. Caso um dado não seja encontrado na cache L1 uma busca é efetuada na cache L2. A cache L2 é normalmente localizada externamente ao processador e tem velocidades de acesso de 15-20ns. A cache L2 pode ser encontrada na placa mãe dos sistemas de computação. A cache L2 normalmente é maior porém mais lenta que a cache L1. Caso um dado não seja encontrado em L1, mas sim em L2, esse dado é carregado para L1. Arquiteturas modernas já possuem a cache L2 dentro da UCP tendo uma velocidade de acesso de aproximadamente 10ns. Nessas arquiteturas o termo cache L3 é usado para se referir a uma cache externa entre o processador e a memória. Em arquiteturas com cache L3, estas normalmente variam de tamanho entre 2MB a 256MB 5. Memória Virtual O objetivo da memória virtual é usar o disco rígido como extensão da memória RAM, aumentando assim o espaço de endereçamento disponível que um processador pode usar. A maioria dos computadores possui uma quantidade relativamente pequena de memória principal, não sendo suficiente para suportar diversas aplicações concorrentes, tais como uma aplicação de processamento de texto, um programa de e-mail e um programa gráfico, além do próprio sistema operacional. Esta área de disco é chamada de arquivo de páginas porque contém porções da memória principal.