Você está na página 1de 10

CURSO: LICENCIATURA EM INFORMATICA A DISCIPLINA: ORGANIZAO DE COMPUTADORES PROFESSOR: CLIO RODRIGUES.

ALUNOS (a): ADRIANE SANTOS, ANDR FILIPE, Liu Kim. 30 DE MAIO DE 2012

Mapeamento da Memria Cache

Introduo

Memria Cache nada mais do que um bloco de memria de tamanho reduzido e com tempo de acesso menor, se comparado memria principal, que se interpe entre esta e o processador com o objetivo de diminuir o tempo mdio de acesso a dados que esto na memria principal. Ela armazena uma pequena parte dos dados que esto em memria, aqueles com a maior probabilidade de serem usados em um breve perodo de tempo. Entenda-se com maior probabilidade aquelas informaes que se encontram em posies de memria subsequentes que est sendo acessada em um dado momento. Isso ocorre graas ao Princpio da Localidade que existe em mquinas determinsticas. O funcionamento da Cache, seja qual for o seu nvel de refinamento, se d basicamente da seguinte forma : A CPU inicia a execuo de uma instruo que requer busca ou escrita de dados em uma certa posio de memria. Antes de ir Memria Principal, a CPU faz uma consulta Memria Cache para saber se a posio de memria em que ela deve operar est l. Caso esteja, ela nem mesmo chega a ir Memria Principal, efetuando a operao na prpria Cache e dando sequncia ao fluxo de execuo do programa. Caso contrrio, ela vai at a Memria Principal realiza a operao

desejada e traz mais um determinado bloco de memria, com posies que tem grandes chances de serem acessados nos prximos ciclos de mquina.

A Cache formada por linhas (frame), cada uma capaz de armazenar uma certa quantidade de clulas da Memria Principal. Conforme ilustra a Figura 1, cada linha possui alguns bits de controle. O bit Vlido(V) indica se o contedo da linha vlido e o bit Modificado(M) informa se ela sofreu alguma alterao por parte da CPU. Existe tambm o campo TAG que contm parte do endereo que indica de que lugar da Memria Principal pertence o dado carregado na linha da Cache. Para a Memria cache como se a Memria Principal estivesse dividida em blocos com o mesmo nmero de clulas existentes em cada uma de suas linhas.

Figura 1: Organizao Interna da Memria Cache e da Memria Principal

Memria Cache com Mapeamento Direto

Nesta organizao, cada bloco da Memria Principal s pode ser carregado numa determinada linha da Cache, no sendo possvel carreg-lo em uma outra linha. O Bloco 0 carregado na linha 0, o bloco 1 na linha 1 e assim sucessivamente. Como a Memria Principal muito maior que a Memria Cache, haver muito mais blocos do que linhas. Neste caso, quando um

determinado bloco mapeado para a ltima linha da cache, o bloco seguinte volta a ser mapeado na primeira linha dando a criao dos ciclos de mapeamento. Veja a Figura 2

Figura 2: Memria Cache de Mapeamento Direto Diferentes endereos de blocos de memria podem estar mapeados na mesma linha. Como saber de que regio da memria pertence o contedo de uma determinada linha da cache? a que entra o campo TAG. Ele guarda os bits mais significativos do endereo que representam o nmero do ciclo, permitindo que a cache identifique com exatido de que lugar da Memria Principal pertence o contedo carregado naquela linha. Normalmente, o carregamento do bloco na linha se d sob demanda, isto , conforme a necessidade. No momento que a CPU solicita o contedo de uma determinada clula da Memria Principal, a Memria Cache identifica qual o nmero do bloco na Memria Principal e examina o TAG da linha correspondente. Se o TAG armazenado na linha coincidir com os bits mais significativos do endereo (TAG_CPU), teremos um HIT, e neste caso a Memria Cache fornece o seu contedo numa velocidade muito superior caso o acesso tivesse sido feito Memria Principal. Agora, se o TAG no coincidir com os bits mais significativos do endereo (TAG_CPU), teremos um MISS, e neste caso a Memria Cache ter que carregar todo o bloco em questo para a respectiva linha, atualizando o valor do TAG. Ou seja, Acerto (hit) ocorre quando o dado solicitado est na memria cache. Falta (miss) ocorre quando o dado solicitado no se encontra na memria cache, preciso traz-lo da MP. Repare que neste caso aguardaremos o tempo necessrio para acessar a Memria Principal. Outra observao importante que ao carregar todo o bloco na linha de cache, est sendo feita a suposio, baseando-se no conceito de localidade espacial e temporal, de que todos os dados deste bloco sero utilizados pela CPU. Caso a CPU no os utilize, teremos desperdiado tempo e espao de cache.

No Mapeamento Direto, se um processo referenciar repetidamente endereos de memria que so mapeados na mesma linha, porm pertencentes a localizaes diferentes (ciclos diferentes), haver uma grande ocorrncia de misses forando ao repetido carregamento destes dados, provocando uma grande queda no desempenho do processador. Este problema conhecido como Ping-Pong. Por exemplo: suponha que dentro de um determinado looping, existam chamadas a vrias funes ou procedimentos do programa. Se houver a coincidncia de duas ou mais destas funes ou procedimentos estarem mapeadas na mesma linha da Memria Cache, haver a ocorrncia de diversos misses devido alternncia entre estas funes ou procedimentos. Na poltica de mapeamento direto, o endereo do programa dividido em trs partes: deslocamento dentro da linha (Coluna), nmero da linha e TAG. O nmero da linha junto com o valor do TAG formam o endereo na Memria Principal de um bloco de clulas. Veja a Figura 3.

Figura 3: Formato do Endereo da Memria Principal visto por uma Memria Cache com Mapeamento Direto

Memria Cache Puramente Associativa

Neste tipo de cache, o bloco da Memria Principal pode ser carregado em qualquer uma das linhas existentes (veja a Figura 4). Esta versatilidade resolve o problema de endereos conflitantes mencionado na Memria Cache de Mapeamento Direto. Sendo assim, a variedade de blocos da Memria Principal que podem vir a ser carregados em uma determinada linha bem maior que a da cache de Mapeamento Direto, necessitando ento de um TAG com mais bits. Enquanto no Mapeamento Direto o TAG armazenava o nmero do ciclo, neste caso, o TAG ir armazenar o endereo do bloco, j que pode ser carregado em uma determinada linha qualquer bloco da Memria Principal.

Figura 4: Memria Cache Puramente Associativa

O carregamento do bloco da Memria Principal na linha da cache se d sob demanda. Quando a CPU solicita o contedo de uma determinada clula da Memria Principal, a Memria Cache verifica se algum TAG j contm o endereo. Como o bloco pode estar carregado em qualquer linha, a Memria Cache (que do tipo associativa) compara o endereo do bloco, com os TAGs de todas as linhas simultaneamente. Caso ocorra alguma coincidncia, ento teremos um hit, e neste caso a cache fornece o contedo correspondente numa velocidade muito superior ao da Memria Principal. Contudo, se nenhum TAG contiver o endereo do bloco, ento teremos um miss, forando a Memria Cache a carregar este bloco em uma de suas linhas. Diferente do Mapeamento Direto esta cache possui uma vasta opo de linhas para carregar o bloco, sendo ento necessrio estabelecer um mtodo de escolha da linha. a que foram criadas as polticas de substituio. No mapeamento Puramente Associativo, o endereo da Memria Principal dividido em dois campos: deslocamento dentro da linha (Coluna) e o TAG. Veja a Figura 5.

Figura 5: Formato do Endereo da Memria Principal Visto por uma Memria Cache Puramente Associativa

Polticas de Substituio

As polticas de substituio tm por objetivo escolher qual das linhas ter o seu contedo descartado para que um outro bloco seja carregado. A esta linha damos o nome de Linha Vtima. Como na maioria das vezes, fazer o carregamento de um bloco implica no descarregamento das informaes referentes linha vtima, ento este mtodo de escolha ir influenciar no desempenho da Memria Cache. A seguir temos quatro mtodos de escolha da linha vtima. Aleatrio: Este mtodo faz uma escolha casual de uma linha para ser a linha vtima. Como este mtodo no leva em considerao os acessos anteriores Memria Cache, existir uma grande chance de se fazer uma m escolha. FIFO: Este mtodo faz a escolha da linha vtima de acordo com a ordem de carregamento (First-in First-out). O mtodo de escolha simples e levado em considerao a ordem de carregamento, que s atualizado quando a linha for carregada, isto , na ocorrncia de um miss. LFU (Menos Frequentemente Usada): Este mtodo usa como base para a escolha da linha vtima a quantidade de vezes que as linhas foram referenciadas. A linha que foi referenciada menos vezes, a linha vtima. Este mtodo usa como critrio a frequncia de acessos a uma determinada linha. LRU (Menos Recentemente Usada): O critrio de escolha deste mtodo a ordem dos acessos feitos s linhas de cache. A linha que no acessada a mais tempo a candidata a linha vtima.

Memria Cache Associativa por Conjunto

Neste tipo de cache, as suas linhas so agrupadas formando diversos conjuntos de linhas dentro da cache. O bloco da Memria Principal ser mapeado para um desses conjuntos de forma semelhante ao Mapeamento Direto. O bloco 0 ser carregado no conjunto 0, o bloco 1 no conjunto 1, e assim sucessivamente. Quando o bloco referente ao ltimo conjunto da cache for carregado, o bloco seguinte voltar para o conjunto 0 iniciando mais um ciclo. Veja a Figura 6

Figura 6: Memria Cache Associativa por Conjunto com grau de associatividade igual a quatro (four-way set associative)

Diferentes endereos de blocos de memria podem estar mapeados no mesmo conjunto. Neste tipo de cache, a TAG guarda os bits mais significativos do endereo que representam o nmero do ciclo, permitindo identificar de que posio da Memria Principal pertence o contedo carregado naquela linha dentro daquele conjunto. Considerando que este mapeamento feito para um conjunto de linhas, ento, podero ser carregados a mesma quantidade de blocos que linhas existentes no conjunto, diminuindo a possibilidade de misses na cache provocadas por coliso. Dentro de um determinado conjunto, o bloco pode ser carregado em qualquer uma das linhas. Apesar desta cache no ser to verstil quanto a Puramente Associativa, ela resolve o problema de endereos conflitantes mencionado na Memria Cache de Mapeamento Direto. Sendo assim, a variedade de blocos da Memria Principal que podem ser carregados em uma determinada linha bem inferior que a da cache Puramente Associativa, necessitando ento de um TAG com uma capacidade menor de bits. O carregamento do bloco na linha se d sob demanda. No momento que a CPU solicita o contedo de uma determinada clula da Memria Principal, a Memria Cache identifica qual o

nmero do bloco, o nmero do conjunto e o nmero do TAG (ciclo). Como este bloco pode estar carregado em qualquer linha do respectivo conjunto, a Memria Cache, atravs de um circuito do tipo associativo, compara os bits mais significativos do endereo, que representam o nmero do ciclo (TAG_CPU), com os TAGs de todas as linhas do grupo ao qual ele est mapeado. Caso haja alguma coincidncia, ento teremos um hit, e neste caso a cache fornece o seu contedo numa velocidade muito superior caso o pedido tivesse sido feito Memria Principal. Agora, se no for encontrado nenhum TAG igual aos bits mais significativos do endereo (TAG_CPU), teremos um miss, forando a Memria Cache a carregar este bloco em alguma das linhas do conjunto. Como esta Memria Cache possui varias linhas para colocar o mesmo bloco, tambm ser necessrio estabelecer alguma poltica de substituio. Neste tipo de Memria Cache, o endereo da Memria Principal ser dividido em trs partes: deslocamento dentro da linha (Coluna), nmero do conjunto e o TAG. O nmero do conjunto junto com o valor do TAG forma o nmero do bloco. Veja a Figura 7.

Figura 7: Formato do Endereo da Memria Principal visto por uma Memria Cache Associativa por Conjunto .

Polticas de Atualizao

Como as escritas feitas pela CPU so inicialmente realizadas na Memria Cache, de alguma forma estas informaes devero ser repassadas para a Memria Principal. Estas formas de repassar so chamadas de polticas de atualizao. Vou citar trs formas de realizar estas atualizaes: Write Through: Este mtodo faz a atualizao da Memria Principal no momento em que foi feita a escrita na Memria Cache. A vantagem deste mtodo de manter a Memria Principal sempre atualizada, s que para cada escrita feita pela CPU, ser consumido o tempo referente ao da Memria Principal. A vantagem da cache ser apenas para as operaes de leitura que por serem muito mais freqentes, ainda ter algum ganho com este mtodo, mas, suponha o seguinte caso: um determinado programa possui um looping baseado em uma varivel que alterada a cada iterao, por exemplo, a varivel i. Suponha que devido a um grande nmero de variveis existentes no looping, a varivel i

no pode ser mantida em registrador tendo que ter seu contedo transferido para a Memria Cache. Neste tipo de poltica de atualizao, a cada alterao feita na varivel i tambm ser feita uma alterao na Memria Principal levando a uma perda de tempo relativamente grande que poder se agravar mais ainda se este looping for muito repetitivo. O problema mencionado anteriormente no se aplica a Memria Cache de instrues (I- cache), j que no se faz escritas nas reas de cdigo. Se por ventura acontecer de haverem escritas, estas sero uma raridade dentre as operaes de leitura. Write Back: Para conseguir aumentar o desempenho nas operaes de escrita e com isso resolver o caso mencionado na tcnica Write Through, esta memria atrasa as atualizaes na Memria Principal, mantendo os dados mais recentes apenas na Memria Cache. A atualizao ser realizada somente no momento em que a respectiva linha tiver que ser substituda por outra, a no ser que ela no tenha sido alterada pela CPU. Um problema resultante desta poltica de atualizao a possibilidade da Memria Principal no ter as mesmas informaes que a Memria Cache. Se houver algum outro dispositivo neste equipamento que solicite informaes Memria Principal, ele corre o risco de receber dados desatualizados. Uma forma de resolver este problema selecionar algumas reas da Memria Principal para serem do tipo no cachevel, isto , seus contedos no so enviados para a Memria Cache. Desta forma podemos usar esta regio de memria para transferncias entre dispositivos que compartilham o uso da Memria Principal, por exemplo, o controlador de DMA (Acesso Direto Memria). Write Once: Esta poltica de atualizao uma mistura dos dois mtodos anteriores e tem como objetivo trazer vantagens tanto nas operaes de leitura como nas operaes de escrita em sistemas com mais de uma CPU. Este um caso em que mais de um dispositivo est acessando a Memria Principal. Para que no acontea o envio de uma informao errada para uma das CPUs, a Memria Cache utiliza do recurso da primeira escrita para avisar as demais caches do sistema que aquele bloco da Memria Principal passar a ser de uso exclusivo dela. A partir deste momento, todas as operaes de escrita e leitura naquele bloco da Memria Principal ficaro restritos a esta cache. Quando alguma outra CPU necessitar das informaes deste bloco, ser feita uma solicitao de atualizao cache portadora do bloco. Esta cache ir ento atualizar a Memria Principal possibilitando que as demais CPUs recebam o dado mais recente.

Bibliografia:

livro: Introduo Organizao de Computadores MARIO A. MONTEIRO, 5 ED. Cap.5. Sites:

www.regulus.pcs.usp.br/.../Aula%2004%20-%20Memoria%20Cache.pdf www.inf.ufes.br/~fscpereira/oec/aulas/06-memoria-cache.pdf www.dcc.ufam.edu.br/david/dmdocuments/mem_cache.pdf www.ime.uerj.br/professores/Mariaclicia/Oc2/Cap4_memoria.PDF www.ime.uerj.br/professores/Mariaclicia/Oc2/Cap4_memoria.PDF www.uniriotec.br/~morganna/oc/arquivos/oc_aula_05.pdf