******************************************* ********** ARQ - Resumo Memórias ********** ******************************************* Data : 30/05/2003 a 17/06/2003 Versão : 04/07/2007 Professor: Francisco Aurélio de Souza Grossi Autor : Leandro Salvador ( leandrosalvador.com.br ) * Hierarquia de Memória - Lei de Nathan - o software é como um gás, expande-se até ocupar inteiramente o recipiente que o contém - necessidades de memória sempre tendem a crescer, mas o programa não tem a necessidade de ter todo o seu código residente na memória mais rápida - princípio da Localidade Temporal - se uma célula é referenciada, ela tende a ser referenciada novamente dentro de um intervalo "curto" de tempo - princípio da Localidade Espacial - se uma célula é referenciada, células com endereços ao redor (vizinhas) tendem a ser referenciadas em seguida - isto é uma aplicação da lógica galinácea, mas a falha do evento esperado não traz conseqüências tão drásticas (panela) - como a necessidade de memória é grande, mas o programa não necessita de todo o código ao mesmo tempo, uma hierarquia de memória com diferentes velocidades de acesso e preços ajudam a otimizar os recursos - hierarquia de memória - Nível Memória Tipo Tempo de Acesso (ns) US$/MB (1997) - 1 Cache SRAM 05 a 25 100 a 250 - 2 Principal DRAM 60 a 120 5 a 10 - 3 Secundária Disco 10 a 20 milhões (ms) 0,10 a 0,20 - o cache pode ter um ou dois níveis - dois níveis melhoram o desempenho do sistema de memória - há também um outro nível de memória, que não é considerado parte da hierarquia, que são os registradores do processador - é o acesso mais rápido à informação - quando o processador precisa de uma informação - se está no nível mais próximo (Cache), diz-se que há um acerto (cache hit) - senão, ocorre uma falha (cache miss) - em caso de miss, o nível mais baixo na hierarquia é acessado - CHR - CHR --> Cache Hit Ratio - fórmula CHR = % hits = nº de hits / nº de acessos * 100 - ou seja, o CHR é a probabilidade de achar uma informação no cache - ele é usado como um dos fatores de desempenho do sistema de memória - a implementação de uma hierarquia de memória deve dar a impressão ao usuário de que ele esteja usando uma memória tão grande quanto a de maior capacidade (nível mais baixo) e tão rápida quanto a de melhor desempenho (nível mais alto) - hierarquia + rápida processador + cara cache memória principal - rápida memória secundária - cara - o processador só se comunica com o cache, nunca acessa diretamente a memória principal ou secundária - de forma semelhante, o cache acessa a memória principal somente - se o processador não achar o dado requerido no cache, é necessário que a informação venha de outros níveis para o cache antes que a instrução seja completada * Cache - "um lugar seguro para se esconder coisas" - vocábulo vem do francês "cacher" = esconder - memória de alta velocidade (cara) usada como nível 1 na hierarquia - ela é rápida por ser estática, ou seja, não há perdas de tensão e, por isso, não há necessidade de "refreshes" como nas memórias dinâmicas (normalmente 100 vezes/segundo) - na CACHE cada bit é implementado com 6 transistores - na DRAM cada bit é implementado com 1 transistor e 1 capacitor - capacitor perde voltagem - além disso, os mecanismos de buscas são mais sofisticados (mais hardware), daí o custo mais alto - endereçamento da cache - mapeamento direto - associatividade total - associatividade por conjunto - mapeamento direto da cache - fórmula endereço da cache = (endereço do bloco) % (nº de blocos da cache) - obs: % é o resto da divisão inteira - bloco (ou entrada) é a unidade de armazenamento no cache - pode ser uma ou mais palavras - o número de blocos na cache é sempre uma potência de 2 - e o resto da divisão pode ser facilmente calculado pelos bits de mais baixa ordem do endereço - a quantidade de bits é o logaritmo da capacidade da cache - exemplo 1) Cache com 8 blocos 8 = 2³ --> usa 3 bits para índice da cache 000 001 010 011 100 101 110 111 X X --> cache ... 00001 ... 00101 ... 01001 ... 01101 ... 10001 ... 10101 ... X X X X X X --> memória - o que importa são os últimos 3 bits da memória - neste exemplo há muitas colisões, pois a cache é pequena e cada bloco de memória tem o seu lugar físico reservado na cache - este é o conceito do mapeamento direto e a razão de seu nome --> PAREI NA PÁGINA 7 ----------//----------