Buscar

Memória

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Memória
O que é memória?
	É o componente dentro da arquitetura e organização do computador com a função de armazenar os programas e os dados eu serão manipulados pelo sistema operacional dentro dos ciclos de instrução. A memória não pode ser considerada um componente único, mas sim um subsistema. Para o perfeito funcionamento otimizado do computador, vários tipos de memória são envolvidos a fim de compensar a velocidade da CPU, que é sempre superior à da velocidade da memória. Caso dentro do sistema de computação existisse somente um tipo de memória, para que o processamento fosse aceitável, sua velocidade teria que ser compatível à velocidade da CPU. Isso inviabilizaria a construção da máquina, pois, com esta velocidade e com alta capacidade de armazenamento, a tecnologia utilizada seria de alto custo e não acessível ao mercado. 
Velocidade de processamento
	Para ficar mais clara a diferença de velocidade de processamento, vamos falar dos números. Dentro da CPU, um dado é processado em aproximadamente 5 nanossegundos (5 bilionésimos de segundo), ao contrário do processamento da memória principal (memória RAM) que leva aproximadamente 60 nanossegundos. Tudo que está sendo processado fica armazenado na memória RAM e é requisitado pela CPU, quando a CPU recebe este conteúdo e processa em 5ns, a CPU fica mais 55ns ociosa aguardando o envio de uma nova informação por parte da memória principal. Por esse e por outros motivos, surgiram outras memórias que auxiliam nesta compensação. 
Memória primária X secundária
	Para entender a diferença dessas divisões, é importante conhecer o conceito de volatilidade. Uma memória é volátil quando ela perde o conteúdo, quando não há alimentação de energia. Resumindo, se o equipamento é desligado, seu conteúdo é perdido. Abaixo, temos umas definições:
· Memória primária
	São componentes que fornecem dados e instruções para o uso imediato, sendo voláteis. Basicamente, é formada pelos seguintes componentes: registradores, memória cache e memória principal.
· Memóra secundária
	São os componentes que provêm capacidade de armazenamento permanente (não voláteis). Exemplos: discos rígidos, discos óticos (CD, DVD etc.) e fitas.
	Assim, podemos considerar como hierarquia de memória a estrutura apresentada a seguir:
Registradores
	Quando estudamos o ciclo de instrução, ou ciclo de busca-decodificação e execução, verificamos a presença de registradores, que são dispositivos de armazenamento temporário, localizados na CPU, utilizados constantemente dentro do processo de execução das instruções. Por serem usados na CPU, entende-se que são memórias muito rápidas. Na verdade, são consideradas as memórias mais rápidas existentes no sistema de computação. Porém, como seu objetivo é o armazenamento do conteúdo de memória a ser processado pela CPU, sua capacidade de armazenamento se limita à palavra daquele processador, normalmente variando de 8 a 64 Bits. Mesmo sendo de baixa capacidade de armazenamento, os registradores são sempre construídos internamente no chip do processador. O que faz com que sua tecnologia de construção seja cara e não permita o uso de muitos registradores. Contudo, isso permite que seu tempo de acesso seja compatível com a velocidade da CPU, entre 1 e 5 nanossegundos. O conceito de registrador surgiu na necessidade da CPU armazenar temporariamente dados que serão usados em seu processamento. 
	Por estarem dentro da CPU, entende-se que os registradores são voláteis, isto é, precisam ser alimentados constantemente pela energia elétrica para manter o conteúdo armazenado.
Memória Cache
	A CPU trabalha diretamente com a memória RAM. Sendo assim, todos os dados processados são recebidos dos módulos de memória RAM, para, dessa forma, serem decodificados e executados. Porém, o desenvolvimento constante na tecnologia de construção de processadores, a sua velocidade foi ficando cada vez maior quando comparada à velocidade foi ficando cada vez maior quando comparada à velocidade de transmissão da memória principal (não acompanhou da mesma forma que a evolução em velocidade, mas sim em capacidade de armazenamento). Com isso, surgiu um desequilíbrio entre a comunicação da CPU e a memória principal, de forma que a CPU processa dados mais rápido do que a memória RAM poderia enviar, resultando em longos períodos de ociosidade ou estados de espera (“wait states”) devido ao gargalo (“bottleneck”) criado por este desequilíbrio, o que logicamente resulta em um desperdício da capacidade de processamento da CPU. Por esse fato e também porque os registradores possuem alta velocidade mas baixa capacidade de armazenamento, foi necessário, dentro da hierarquia da memória, criar uma nova “camada” que possibilitasse a CPU usar melhor toda a sua capacidade de processamento: a memória cache.
	Portanto, a cache é uma memória criada justamente para diminuir os “estados de espera” entre CPU e memória principal, sendo muito mais rápida do que a memória RAM e com mais capacidade do que os registradores. Ela tem função de armazenar temporariamente conteúdos muito requisitados e fornecer as informações para a CPU de forma mais ágil, evitando que a memória principal tenha que ser consultada a todo momento, reduzindo a ociosidade da CPU.
	Certamente, o custo da memória cache é maior do que a da principal e menor do que o custo de registradores, o que justifica parte da solução encontrada. No entanto, o custo de fabricação da memória cache é muito maior do que o da principal, não justificando a extinção da principal, ou seja, não seria viável economicamente construir um computador somente com tecnologia de memória cache. A partir dos processadores 386, surgiu a inclusão de memória cache, localizada entre a CPU e a principal, e que funcionária como um espelho de parte do conteúdo dessa memória principal. Exemplo das primeiras placas-mãe lançadas com memória cache, localizada na própria placa-mãe. 
Princípio de localidade
	O funcionamento da memória cache se faz da seguinte forma: todo conteúdo consultado com mais frequencia na memória principal é mantido de forma espelhada na memória cache, ou seja, este conteúdo não é apagado na memória principal, somente espelhado. Esse conteúdo consultado com frequência é verificado pelo princípio da localidade. Por esse princípio, se um endereço, por exemplo, na memória principal, foi requisitado pela CPU, é bem provável que um endereço próximo ou vizinho a este seja o próximo a ser consultado pela CPU na memória principal. Dessa forma, antecipa-se não somente o conteúdo solicitado pela CPU, mas também o conteúdo solicitado pela CPU, mas também o conteúdo dos endereços próximos a esta localidade são espelhados da memória principal para a cache, de modo que, em uma próxima vez que for efetuada uma consulta por parte da CPU, este conteúdo possa ser acessado diretamente pela cache, otimizando o tempo de processamento. 
Tipos de princípio de localidade
· Princípio de localidade temporal: baseia-se no fato de que um dado acessado recentemente tem mais chances de ser usado novamente do que um dado usado há mais tempo. Isso é uma realidade pois, quando um programa está em execução, uma variável pode ser consultada diversas vezes durante seu processamento, por exemplo, se houver uma rotina de loop ou sub-rotinas. Sendo assim, o principio de localidade temporal tende a manter os dados e instruções recentemente acessados.
· Principio de localidade espacial: há uma grande probabilidade de acesso para dados e instruções em endereços próximos aqueles acessados recentemente pela CPU. Durante a execução de um programa, normalmente as variáveis são criadas e armazenadas nas próximas umas as outras, dentro da memória principal. 
O conteúdo estará disponível na memória cache de imediato?
	Logicamente, nem sempre, em uma consulta efetuada pela CPU, o conteúdo estará disponível na memória cache de imediato. Sendo assim, existem duas possibilidades:
· Se a CPU busca um determinado dado e o encontra na cache, dá-se o que chamamos de cache hit, ou seja, conteúdo é localizadona cache;
· Se o caso for negativo, ou seja, se o dado não estiver presente no cache, sendo necessário requisitar o conteúdo para a memória principal, dá-se o que chamamos de cache miss.
Independentemente de cache miss ou cache hit, dentro do processo de fabricação da memória cache e suas metodologias de gravação de dados, o índice de cache hit é geralmente de 90%.
Níveis de cache
· Cache L1 (nível 1): pequena memória inserida internamente no processador, ou seja, encapsula dentro do núcleo de processamento. Também conhecida como cache on-die (no núcleo), exatamente por estar dentro do processador. Alguns fabricantes identificam as memórias cache L1 como formada por dois elementos: memória de instrução: acionada quando o processador está buscando uma instrução. Memória para dados: acionada se o processador estiver buscando um dado.
· Cache L2 (nível 2): localizada fora do núcleo, mas muito próxima do mesmo, sendo construída normalmente dentro do processador.
· Cache L3 (nível 3): em algumas arquiteturas, encontramos ainda o nível 3 na placa-mãe. Em outras, dentro do processador. Porém, usada como cache compartilhada entre os núcleos de um processador. Foi criada originalmente pelo fabricante AMD.
Exemplo do processador Phenom II X3 da AMD
	Veja o exemplo abaixo, de um processador Phenom II X3 da AMD, de 6 núcleos, em que são mostradas suas especificações por meio de imagem microscópica.
· L! Cache: 128KB (64KB instrução + 64KB dados) em cada núcleo;
· L2 Cache: 512HB em cada núcleo;
· L3 Cache: 6MB L3 (compartilhando entre os núcleos).
Mapeamento de cache
	Mesmo com a memória cache, a localização das instruções ou dados a serem manipulados pela CPU continuam se relacionando a endereços da memória principal e não da memória cache. Se a CPU busca um determinado conteúdo, continua sendo referenciado o endereço da MP. Sabendo que a memória cache possui uma pequena porção de memória e que normalmente o índice de cache hit é de 90%, como esta memória é referenciada na cache, de forma a evitar que toda a memória cache tenha que ser varrida a fim de localizar um determinado endereço? O que seria ineficiente?
	A base disso é o processo de mapeamento da memória, ou seja, é feita uma divisão da memória principal em blocos de tamanho fixo, conhecidas como linhas de cache. Essas linhas possuem 4 bytes (32 bits) a 64 bytes (512 bits) e são endereçadas a partir do zero, de forma que, se a memória principal for dividida em 64 bytes, teríamos as linhas que iriam de 0 a 63 bytes, de 64 a 127 bytes, e assim por diante. Feito isso, já se tem uma forma de mapeamento que pode ser feito na cache. Veja algumas formas de mapeamento de cache:
Cache totalmente associativas
	Todas as linhas de cache da memória principal podem ser gravadas em qualquer localização da memória cache. É uma forma ineficiente porque a recuperação dos dados pode levar à varredura completa da cache para localizar o conteúdo. 
Caches de mapeamento direto
	Limita a gravação das linhas de cache em locais específicos na cache, porém esse índice pré-definido dos locais permite que a pesquisa do conteúdo na cache seja mais ágil. Abaixo mostra um esquema de mapeamento direto em que a linha de cache consiste em 32 bytes (256 bits)
Caches associativas de conjunto
	Este tipo de mapeamento é um esquema híbrido entre o mapeamento totalmente associativo e o mapeamento direto. Ele permite que os problemas do mapeamento totalmente associativo (em que a cache inteira precisa ser varrida à procura de um endereço) e do mapeamento direto (em que ocorrem colisões) sejam minimizados. Nele, um mesmo endereço na memória principal pode ser armazenado em mais de um local (por vez) da cache, através da criação de vias de cache, ou seja, cada linha pode possuir n vias de cache, onde normalmente são de 2 a 4 vias. 
	Utilizando o exemplo mencionado anteriormente, onde foi consultado pela CPU o endereço 195 e logo após o 65, que faziam parte da mesma linha de chave, a colisão seria evitada, pois, com 2 vias possíveis na linha de cache 0, ambas as linhas da memória principal poderão ser gravadas, cada uma em uma via especifica. Isso resolve parte dos problemas encontrados nos métodos anteriores e agiliza o mapeamento e a consulta de conteúdo na cache.
Métodos de substituição de dados
	No que se refere à memória cache, é importante lembrar que existe um momento em que sua capacidade está lotada e os dados precisam ser substituídos, como, por exemplo, os das vias de cache. Como optar por qual via de cache a ser excluída para uma nova substituição? Existem três métodos conhecidos de substituição de dados na cache:
	Quando for necessário substituir uma linha na cache, será retirada aquela cujo contador tiver o valor mais alto. Utilizando para substituição de dados no mapeamento de cache associativa de conjunto.
Políticas de escrita em cache na memória principal
	Logicamente, é necessário que, em algum momento, os dados atualizados na memória cache também sejam atualizados na memória principal. Afinal, uma deve ser o espelho da outra. Sendo assim, existem politicas que efetuam esta atualização:
· Write Through: consiste em atualizar o valor em cache e na MP simultaneamente.
· Write Black: consiste em atualizar a cache, porém ao enviar atualizações em blocos para a memória principal.

Outros materiais