Vous êtes sur la page 1sur 5

ALUNA: Aline Porfro Teixeira Universidade Federal do Maranho Circuitos Eltricos 2

Mapeamento de Memoria Cache

O termo mapeamento indicado para relacionar os dados do nvel inferior com as posies da memoria cache que podem ser: Direto, associativo e conjunto associativo. O mapeamento direto um modelo de endereamento da memria principal na memria cache de forma que um dado endereo da primeira pode ser relacionado com um nico endereo da segunda. Uma vez que existe uma grande diferena entre o tamanho destas memrias, acaba-se criando grupos de posies da memria principal que podem ser levado apenas para uma nica posio da memria cache. Para ficar mais claro, imagine a seguinte situao: temos uma memria principal com 512 posies e uma cache com apenas oito. Cada uma dessas posies pode armazenar os dados de uma entre 64 posies da memria principal (64 = 512/8). Para se saber qual posio da memria principal guardada em qual da memria cach, o endereamento do dado na memria principal dividido em dois, uma parte guardando qual posio da cache procurar e o outra, chamada TAG, marca qual dado est salvo ali. A principal vantagem do mapeamento direto o seu baixo custo. necessrio apenas um decodificador para encontrar a posio da memria cache e um comparador para verificar a TAG. Entretanto, essa abordagem leva a muitos conflitos e assim a troca constante de dados entre a cache e a memria principal, diminuindo o desempenho da primeira. Uma forma de tentar se contornar isso inserir mais de um dado por linha (at agora chamada de posio ) da cache. o chamado mapeamento direto com bloco. Com a mesma memria principal de 512 posies e cache de oito linhas, imaginemos um bloco com 4 posies. Assim, ao se procurar um dado com um endereo de 9 bits, estaremos olhando em uma das 8 linhas (3 bits) se a TAG

corresponde a do dado que buscamos. Caso sim, iremos a uma das quatro posies do bloco (2 bits). A TAG nesse caso diminui de 6 para 4 bits( 4 = 9-3-2), assim, temos menos dados com a mesma TAG e logo, menos conflitos. O custo desta cache porm aumenta, com um decodificador a mais para achar o bloco desejado. mapeamento totalmente associativo age da seguinte forma, qualquer endereo da memria principal pode ser mapeado em qualquer posio da memria cache. Ou seja, basta haver espao em qualquer ponto da cache, para um dado da memria principal ser resgatado para a cache sem necessidade de uma reescrita na memria principal. Por exemplo, imagine uma cache com 8 posies e uma memria principal com 32. Assim, qualquer das configuraes abaixo vlida: Pos. Cache 1 2 3 4 5 6 7 8

End. RAM 3 5 14 26 5 8 8 12 8 28 28 15 12 3 15 8 14 14 3 1 22 22 1 3 26 26 26 12 28 12 12 5

Para acessar, portanto, qualquer posio da memria principal, iremos primeiramente receber o endereo buscado do processador. Esse endereo ser verificado em todas as posies da cache atravs de todos os seus bits, por isso o nome totalmente associativo. Note que isso no acontece no mapeamento direto, em que parte do endereo virava a posio do cache (ou linha) a ser consultada, e a outra era a tag que verificava se o valor naquela posio era do endereo buscado. No mapeamento totalmente associativo, a tag todo endereo. Dado ento uma cache, por exemplo, de 258Kb e uma memria principal de 1Gb, so necessrio 258 mil comparadores de 30 bits para se montar a estrutura de busca da cache, alm do espao gasto para salvar os dados e as TAGs, desde que cada posio da cach armazene um byte. Assim como no caso do mapeamento direto, possvel ainda ter mais de um dado por posio da cache. Assim, o endereo repassado pelo processador ser divido entre TAG e identificador do bloco. O nmero de linhas nesse caso diminui para o tamanho da cache dividido pelo nmero de bytes (ou blocos) de cada posio, diminuindo assim o nmero de comparadores, mas fazendo tornar-se necessrio um decode.

fcil perceber que o mapeamento totalmente associativo muito caro em termo de componentes utilizados. Para sanar esse alto custo, sem gerar os conflitos do mapeamento direto, que foi idealizado o mapeamento associativo por conjunto. Como j foi dito anteriormente, o mapeamento direto embora econmico em termos de peas utilizadas sofre bastante por conta dos conflitos de endereamento, que acaba forando mais buscas na memria principal. O mapeamento associativo por sua vez resolve esse problema, mas a custo de um grande conjunto de comparadores. Para pegar o melhor de cada um destes tipos de mapeamento, foi criado o mapeamento associativo por conjunto. Nele h vrios blocos que compartilham de uma mesma tag, diminuindo-se assim o nmero de conflitos por um endereo. Alm disso, para selecionar qual o bloco deve ser acessado, usa-se apenas um decoder, o que reduz significativamente o nmero de comparadores utilizados para acessar uma posio de memria. O mapeamento neste caso funciona da seguinte forma. Uma parcela dos bits de endereamento so destinadas para mostrar qual o bloco a ser acessado, o restante serve como tag. Por exemplo, em uma memria principal de 64Kb e 32 blocos, teremos ento um endereamento de 16 bits, sendo 5 para definir o bloco (2^5) e 11 para a tag. Resta apenas definir o nmero de linhas da memria cache, que ser dado de acordo o seu tamanho. Se tivermos nas condies acima uma memria cache com 1Kb de capacidade, ento teremos 2^5 linhas = 32 linhas. O custo total de uma cache com mapeamento associativo por conjunto : Linhas*(comparador(t bits)+ t) + decoder (b bits para 2^b posies)+ capacidadeDeArmazenamento onde NLinhas = log2 ((capacidade De Armazenamento)/(nmero DeBlocos)) b = log2( Nmero De Blocos) t =Nmero de bits da tag Como pode ser visto, o mapeamento associativo por conjunto uma sada simples para o problema de otimizao de endereamento da cache. Nas prximas postagens iremos falar sobre as polticas de atualizao de dados na cache e na memria principal.

Algoritmos de Substituio Cada Cache suporta uma certa estratgia para a substituio dos blocos correntemente contidos nela. No nicio da execuo de um programa, a Cache est geralmente vazia, i.e. todas as entradas no mapa esto "invalidadas". medida que as instrues do programa vo sendo executadas, o CPU gera referncias de memria que desencadeiam o progressivo preenchimento da Cache com os blocos referenciados. Sendo a Cache muito inferior, em capacidade relativamente memria central (e.g. tipicamente tem 256K, 512K ou 1024K bytes), coloca-se o problema de saber o que fazer quando, estando j

a Cache cheia (ou, no caso das associativas por grupos, um certo conjunto de blocos est cheio), h uma referncia a um bloco ausente da Cache. Antes de transferir o novo bloco de memria para a Cache, h possivelmente que seleccionar uma vtima, i.e. um dos blocos correntes da Cache ser esmagado pelo novo bloco. As estratgias de escolha da vtima dependem do tipo de Cache: nas de mapa directo a vtima est automaticamente identificada pela nica posio onde o bloco pode ser carregado; nas associativas puras, a vtima ter de ser escolhida dentro do conjunto de blocos ao qual o novo bloco estiver associado; nas associativas puras, qualquer bloco pode ser escolhido como vtima. Os algoritmos utilizados so muito variados, como se ilustra a seguir:

aleatrio ("random") - escolhe uma vtima ao acaso; apesar de poder parecer surpreendente, resultados experimentais e simulaes mostram que este mtodo funciona razoavelmente, i.e. o peso de eventuais situaes de injustia,em que um bloco "til" escolhido como vtima, no muito grande; FIFO ("first-in-first-out") - escolhe o bloco que foi carregado na Cache h mais tempo; a antiguidade no um bom critrio, se se refere apenas ao carregamento, pelo que a implementao mais custosa - em hardware - deste mtodo no se justifica; um bloco muito frequentemente usado, ainda que antigo, poderia ser escolhido como vtima; "menos recentemente usado ("least recently used" LRU) - escolhe o bloco menos recentemente usado; baseia-se no princpio da localidade: se o bloco foi recentemente usado, ento espera-se que tambm o seja num futuro prximo, caso contrrio no se espera que o seja; a implementao - em hardware - do mtodo exige que se mantenha, associado a cada entrada do mapa, um contador que indique o tempo da ltima referncia feita ao bloco correspondente, sendo escolhido o bloco com referncia mais antiga.

Dado o peso maior de implementao deste ltimo mtodo, aparecem frequentemente Caches que s recorrem ao mtodo aleatrio. Em alternativa, aparecem mtodos que tentam um compromisso entre a "justia" na escolha da vtima e a simplicidade da implementao. A ttulo de exemplo, descreve-se o mtodo denominado "segunda oportunidade" ("second chance"). Um apontador P (mantido num contador hardware) vai percorrer as entradas do mapa de endereos da Cache. No incio, a pesquida faz-se partindo de um apontador para a primeira entrada do mapa. Farse- uma pesquisa, a partir dessa entrada, at se seleccionar uma vtima. Uma vez seleccionada a vtima, o apontador ser mantido na posio em que a pesquisa parou e ser a partir da que a seleco se repetir, da prxima vez. Cada entrada do mapa tem um bit de "uso" que, inicialmente a 0, posto a 1 por cada referncia feita ao bloco correspondente a essa entrada. Quando a Cache est cheia, a deciso assim tomada: examina bit "uso" da entrada apontada por P:

se 0: escolhe esta como vtima; incrementa P;

se 1: pe bit de 'uso" a 0; incrementa P e continua a pesquisa at achar um bit "uso" igual a 0;

Vous aimerez peut-être aussi