TECNOLOGIAS MODERNAS DE MEMÓRIAS

Por Ricardo Zelenovsky e Alexandre Mendonça

Introdução

Quando o assunto é velocidade de computadores, os processadores são sempre citados, porém, é comum deixar a memória em segundo plano. Entretanto, elas são fundamentais para o desempenho. Não é raro vermos processadores com mais GHz serem ultrapassados por outros não tão velozes, mas que tiram partido de um sistema de memória bem sintonizado. O termo memória é muito impreciso, já que em geral ela se refere à memória principal. Entretanto, num computador, existem diferentes memórias. O presente artigo, dividido em duas partes, irá abordar os diversos tipos de memórias empregados e sua evolução. Nesta primeira parte, relembraremos as memórias empregadas em nossos computadores e, no próximo número, veremos com um pouco de detalhe as memórias dinâmicas e os lançamentos mais recentes.

Diferentes Tipos de Memória

Todo computador, para realizar suas tarefas, faz uso de diversos tipos de memória. A mais conhecida é a memória dinâmica, abreviada por DRAM, do inglês "Dinamic Random Access Memory". Essa é a memória principal, onde normalmente ficam os programas a serem executados e os dados a serem processados. Essa memória é barata, oferece boa densidade de integração (é pequena), porém não é tão rápida. Nos dias de hoje ela já atinge tamanhos de 256 a 512 MB. Normalmente, os "chipsets" empregados nas placas-mães ditam a quantidade máxima de memória dinâmica que pode ser empregada por um sistema.

A memória estática, abreviada por SRAM, do inglês "Static Random Access Memory", é empregada para construir os bancos de memória cache. Ela é rápida, mas oferece baixa densidade de integração (é grande), elevado consumo e é cara. Ela pode ser integrada junto com o processador, como é o caso das caches do Pentium 4, ou ser conectada através de um barramento especial, como aconteceu com os Pentium II e alguns Pentium III. Atualmente seu tamanho está entre 512 KB a 1 MB.

Essas duas memórias estão fortemente ligadas ao desempenho do computador. Quanto mais rápida for a DRAM empregada como memória principal, melhor será o desempenho do sistema. Para a memória cache, o item que mais pesa é o seu tamanho, pois tipicamente, as SRAM têm velocidades parecidas. Assim, quanto maior a quantidade de cache, maior é o desempenho, entretanto a relação não é linear, como veremos no próximo número.

O leitor deve ter notado que essas duas memórias trazem em seus nomes a palavra "random", que é traduzida como aleatória. O nome é assim mantido por motivos históricos, pois no passado havia dois tipos de memória, uma com acesso seqüencial e outra com acesso aleatório, e usava-se o termo "random" para designar a memória com acesso aleatório. Não foi possível progredir com a tecnologia de memória seqüencial, enquanto que a memória com acesso aleatório sofreu uma grande evolução e é largamente empregada.

Esses dois tipos de memória são voláteis, ou seja, perdem seus dados quando se desliga a energia do sistema. É fácil imaginar a necessidade de uma memória não volátil para poder oferecer as primeiras instruções ao processador, assim que o sistema é energizado. Esse tipo de memória recebe o nome de memória de apenas leitura, abreviada por ROM, do inglês "Read Only Memory". Numa memória do tipo ROM, é colocado o programa para ser executado assim que liga o computador. Tal programa não só recebe o processador quando se liga o computador, mas também faz o teste do hardware, inicializa o sistema e ainda oferece as rotinas de acesso mais elementares, e por esse motivo ele é chamado de sistema básico de entrada/saída, abreviada por BIOS, do inglês: "Basic Input/Output System". Na verdade, esse programa é uma coleção de rotinas básicas para acessar o sistema.

Os computadores mais antigos faziam uso de dois tipos de ROM. O primeiro é a EPROM, cuja característica principal é o recurso de poder ser apagada com luz ultravioleta. O segundo tipo é a WORM, que pode ser programada uma única vez. Com a evolução, surgiram outros tipos de ROM, denominados EEPROM e Flash ROM, que apesar de não serem voláteis, podem ser apagadas através de uma seqüência especial de pulsos elétricos. Esse recurso se mostrou muito útil, pois veio a permitir a atualização da BIOS pelo próprio usuário. Nos dias de hoje, essas memórias têm o tamanho típico de 128 KB.

O último tipo de memória que vamos abordar é a RAM-CMOS, onde o sistema guarda as principais informações de configuração. Essa memória é, na verdade, uma memória estática de baixo consumo cujos dados são mantidos através da energia fornecida por uma bateria. Ela é integrada junto com o circuito do relógio permanente. Seu tamanho típico é de 64 bytes, sendo que alguns desses bytes são usados para a construção dos contadores do relógio permanente.

O Que Faz a Diferença entre as Memórias

De maneira bem simples, podemos afirmar que toda memória é construída sob o arranjo matricial. A figura 1 apresenta o arranjo matricial para uma memória com N bits de endereços, ou seja, com 2N células. Deve-se notar que a metade mais significativa desses N bits forma o endereço de uma linha, enquanto que a outra metade forma o endereço da coluna. A interseção de uma linha com uma coluna, como marcado na figura, especifica uma célula da memória. Assim as células são acessadas através da habilitação de linhas e colunas da matriz. O arranjo matricial apresentado na figura 1 é de apenas um bit. O emprego de oito desses arranjos em paralelo permite a construção de memórias que operam com bytes.

Figura 1. O arranjo matricial de células de memória.

Os diferentes tipos de memória surgem em função das diferentes técnicas que podem ser usadas para a construção de uma célula de memória. A maneira mais simples é com a presença ou ausência de um diodo em cada célula. Quando o diodo está presente, o nível lógico da célula é levado para baixo, pois o diodo opera com um curto para a terra (nível de referência). Sua ausência permite que a célula vá para nível alto. Assim surgem as memórias do tipo ROM, cujos dados nunca se perdem. Normalmente, as ROMs são encomendadas (em grandes quantidades) diretamente nas fábricas de semicondutores. O cliente fornece o mapa da ROM, ou seja, uma grande tabela indicando, para cada endereço o dado ser gravado e com isso o fabricante, ao projetar o CI, integra um diodo em cada célula que deve ser igual a zero. Existe um tipo de ROM programável pelo usuário, denominado PROM, onde o fabricante integra um diodo e um pequeno fusível em cada célula da memória, ou seja, todas as células da memória são feitas iguais a zero. Através de um procedimento especial, o cliente deve queimar o fusível das células que ele quer tornar igual a um.

Já no caso da EPROM, o que existe em cada célula é um tipo especial de transistor (FET com porta flutuante). Este transistor, através da aplicação de um nível alto de tensão sofre uma rearrumação de portadores e é transformado em um curto para a terra, tal qual um diodo. Assim, uma EPROM nova (apagada) traz todos os bits iguais a 1. O programador deve aplicar essa tensão elevada nos transistores das células que devem ser transformadas em zero. O interessante dessa tecnologia é que esses transistores programados em zero podem ser "desprogramados" ou apagados através da aplicação de uma luz ultravioleta, que provoca a acomodação dos portadores de carga do transistor para sua configuração original. Por isso, toda EPROM traz uma janela de cristal para permitir a incidência da luz ultravioleta sobre o semicondutor. Uma memória desse tipo, mas sem essa janela de apagamento, pode ser programada uma única vez e recebe o nome WORM. A vantagem é que a ausência da janela permite baratear o custo do CI.

A EPROM tornou-se uma memória não volátil muito útil pois pode ser facilmente programada e apagada. Entretanto, essa forma de apagamento não é prática para o usuário final pois implica na remoção do chip de memória e no emprego de uma fonte de luz não convencional. A evolução da microeletrônica permitiu o surgimento de um tipo especial de memória não volátil, parecida com a EPROM, mas que pode ser programada e apagada eletricamente, ou seja, não pede a remoção do chip e nem o uso de equipamentos especiais. Assim, surgem as EEPROM, onde uma letra "E" foi adicionada para indicar que tudo é feito eletricamente. Essa memória, através da aplicação de sinais elétricos, pode ser programada ou apagada seletivamente e, uma vez programada, funciona como uma memória não volátil. Equipamentos sujeitos à falta de alimentação, tais como telefones celulares e agendas eletrônicas, fazem uso de tal memória.

Essas EEPROM viabilizaram equipamentos cujos programas de controle ("firmware") podiam ser atualizados pelo próprio usuário. Um exemplo recente é o caso dos modems, que puderam ser facilmente atualizados para o protocolo V90, quando este ficou pronto. Atualmente, existe um tipo especial de EEPROM, com apagamente e acesso mais rápidos, denominada Flash-ROM. Ela é muito usada nos computadores para armazenar as BIOS que podem ser atualizadas. Recomenda-se muito cuidado na atualização das BIOS pois um erro pode deixar o computador inoperante.

No caso das memórias estáticas (SRAM), cada célula é construída com um circuito biestável denominado "flip-flop". Um circuito biestável pode ser colocado no estado "0" ou no estado "1" e, enquanto houver energia, assim permanece até que se comande o contrário. O acesso a tal circuito é rápido, o que viabiliza sua velocidade. O problema é que na construção deste circuito usam-se 6 a 8 transistores, o que torna a memória grande e de consumo elevado. Quem não gostaria de construir a memória principal de seu computador, 256 MB ou 512 MB, só com SRAM ? A velocidade seria ótima e provavelmente dispensaríamos a cache. O problema é que uma memória desse tamanho ficaria muito caro, consumiria em excesso e certamente teríamos problemas com o calor gerado. Assim o emprego desta memória fica restrito aos caches.

A célula da memória dinâmica (DRAM) é construída com um pequeno capacitor, algo perto de alguns fentoF (10-15 F). Por isso, suas células são extremamente pequenas, favorecendo a densidade de integração. Porém, o emprego de um capacitor como memória enfrenta o problema de perda da carga, ou seja, essa memória esquece o que foi armazenado. Assim, periodicamente, é necessário relembrar à cada célula o dado que ali estava escrito. Essa operação recebe o nome de ciclo de "refresh". No passado, essa operação era mais trabalhosa, mas as memórias evoluíram bastante e atualmente o "refresh" é realizado pela própria memória, ficando transparente ao usuário e consumindo apenas 5% do tempo.

Uma outra característica importante desta memória é que a operação de leitura destrói o dado que estava armazenado na célula. Assim, após cada leitura, o dado deve ser reescrito na célula. Todas essas particularidades a tornam mais lenta. O interessante é que suas características são praticamente complementares em relação a SRAM. A DRAM é mais lenta, entretanto oferece uma grande densidade de integração, consome muito menos, quase não gera calor e é muito mais barata. Por isso, todo computador constrói sua memória principal usando tal tipo de memória.

 

A Memória Cache (SRAM)

Em textos já publicados, estudamos o funcionamento do cache e os diversos tipos de organização, entretanto é pertinente uma pequena explicação, onde entenderemos sua motivação. Vimos que existem dois tipos de tecnologia de memória volátil: a SRAM e a DRAM. No entanto, usamos a DRAM, a mais lenta das duas, para construir a memória principal de nosso computador e fazemos isso mesmo sabendo que as modernas CPUs são muito mais velozes que essas memórias. Por que será que não usamos a SDRAM, que é muito mais rápida ? A explicação está no preço, no tamanho e no consumo. Como explicamos no artigo anterior, as SRAM são caras, não são compactas e consomem bastante. Por isso, somos obrigados a construir a memória principal usando as DRAM. Mas, não devemos abandonar a memória SRAM, e sim partirmos, para uma solução mista: usamos "um pouco" de cada uma. Usamos a DRAM como memória principal, mas guardamos na veloz SRAM as informações que são acessadas com grande freqüência.

Assim, de maneira bem simples, explicamos o cache como sendo uma memória rápida para guardar os dados e trechos de programa que são muito acessados. Porém, existe aí uma grande dificuldade: como saber, para um determinado programa, quais bytes serão usados com maior freqüência para podermos colocá-los no cache ? É claro que não se faz isso à priori. É usada a alocação dinâmica, durante a execução dos programas. A explicação é simples. Todo acesso à memória principal deixa no cache uma cópia da informação acessada e, à medida que o programa é executado, aqueles acessos mais freqüentes vão naturalmente sendo mantidos no cache e os menos freqüentes excluídos.

Se a informação solicitada pelo processador não estiver no cache, gasta-se bastante tempo, pois será necessário acessar a memória principal. Entretanto, se ela estiver no cache, o acesso será muito mais rápido. Assim, o desempenho de uma memória cache é normalmente medida através de sua Taxa de Acertos (TA), que indica quantas vezes a informação requerida estava disponível no cache. Uma taxa de acertos de 30% indica que, em média, a cada 100 acessos, 30 ocorreram no cache e não na memória principal, ou seja, foram mais rápidos. É intuitivo afirmarmos que quanto maior for o cache, maior será a probabilidade de que a informação necessária ali esteja disponível. É claro que não levaremos em conta todas as particularidades do programa em execução, por isso modelamos essa taxa de acertos como tendo um comportamento probabilístico.

Podemos agora explicar um equívoco cometido por muitos usuários. A relação entre o tamanho do cache e a taxa de acertos não é linear, ou seja, se dobrarmos o tamanho do cache não necessariamente estaremos dobrando seu desempenho. Dependendo do caso, pode ser que a taxa de acertos sofra apenas um pequeno incremento. Por exemplo, imaginemos uma memória cache de 256 KB que, rodando uma determinada aplicação, ofereça 30% de acertos. Se a quantidade de memória cache for aumentada para 512 KB, é muito pouco provável que a taxa de acertos suba para 60%. A situação é pior se a taxa de acertos já for elevada, por exemplo, de 80%, neste caso, dobrar a quantidade de memória cache talvez leve o ganho para 85%, um ganho muito pequeno comparado com o investimento necessário para dobrar a quantidade de memória.

A curva apresentada na figura 2 é um modelo teórico para a relação entre o tamanho do cache e a taxa de acertos. Para simplificar a figura, o tamanho do cache foi mantido dentro da faixa de 0 a 10 unidades. O modelo tem comportamento diferente segundo o perfil da aplicação (do programa) que se está executando, fato ilustrado pelas três curvas coloridas, que serão usadas como exemplos. A curva 1 mostra que, para essa aplicação, um aumento do cache de "1" para "3" traz uma melhora aproximada de 40% para 80% e mostra também que não vale a pena aumentar o tamanho de 3 para 6 pois a taxa de acertos mudará de 80% para apenas 92%. Já para a curva 2 e para a curva 3, existe "mais espaço" para se aumentar o tamanho do cache. Em resumo, quanto maior for a taxa de acertos, pior será a relação custo benefício para o aumento do cache. Por isso, deve-se pensar um pouco antes de se gastar dinheiro com cache. Há que se verificarem os aplicativos que serão utilizados e balancear o compromisso entre investimento e desempenho. Hoje em dia, esse problema está minorado, pois para a família PC os processadores Pentium e Athlon já trazem internamente as quantidades de memórias cache que os fabricantes julgaram convenientes e o usuário não tem como alterá-las.

Figura 2. Taxa de acertos em função do tamanho do cache.

A Memória Principal (DRAM)

Voltemos agora nossa atenção para as memórias dinâmicas. No momento, presenciamos uma batalha entre duas tecnologias de memória dinâmica: a já consagrada SDRAM e a nova DR-DRAM. Graças a novos recursos incorporados, as SDRAM ainda estão oferecendo um excelente desempenho, especialmente quando se leva em conta o custo. Apesar de ser questionável, alguns especialistas afirmam que, num futuro próximo, elas deixarão de ser a melhor opção, mas que no momento elas não devem ser abandonadas. Algo parecido com o que está acontecendo com os monitores. Gostaríamos de comprar monitores de cristal líquido (LCD), mas, no momento, poucos estão dispostos a pagar seu preço elevado. Para melhor entendermos essas duas tecnologias, faremos a seguir um breve estudo da evolução da memória dinâmica.

Memória FPM

As memórias dos primeiros computadores pessoais recebiam o nome de Modo de Paginação Rápida, ou "Fast Page Mode", donde vem a sigla FPM. Em qualquer memória, gasta-se muito tempo para enviar através do barramento o endereço que se deseja acessar. Como vimos no último número desta revista, as memórias são arrumadas de forma matricial e, por isso, são necessárias duas transações de barramento. Com a primeira transação, envia-se o endereço da linha e, com a segunda, envia-se o endereço da coluna. As memórias FPM surgiram com a constatação do seguinte fato: se as matrizes das memórias forem arrumadas de tal forma que os endereços consecutivos estejam numa mesma linha, para os próximos acessos bastará enviar apenas o endereço da nova coluna. Assim, economiza-se um ciclo de barramento. Essas memórias FPM atenderam aos processadores desde o 8088 até o 486, com barramento de até 33 MHz.

Memória EDO e BEDO

Com o surgimento dos Pentium, passou a ser necessário aumentar a velocidade das memórias FPM e, com a adição de um "buffer" digital na saída, que tinha a função de manter estável o byte acessado, foi possível melhorar o tempo de resposta. Assim, surge o nome "Extended Data Output". Agora, o endereço da nova coluna podia ser enviado um pouco mais cedo, o que economizava alguns microssegundos. Como o Pentium fazia acessos em pacotes de dados seqüenciais, ou seja, acessava blocos de 4, 8, 16 ou 32 bytes, foi possível uma outra evolução. Ora, se os acessos são seqüencias, então torna-se desnecessário enviar os próximos endereços. Assim, com a adição de um contador interno, surgiu a memória BEDO ("Burst EDO") e que tornou possível acessos seqüenciais somente com o envio do endereço do primeiro byte. Essas memórias atenderam aos Pentium com barramento de 66 MHz.

Memória SDRAM e DDR-SDRAM

A demanda por barramentos de 100 MHz provocou o surgimento de um novo tipo de memória denominada "Synchronous Dynamic RAM". Numa memória síncrona, gasta-se tempo para enviar o endereço e os sinais de controle, que são armazenados pela memória. Após um número específico de períodos de relógio, a memória começa a disponibilizar os dados em seqüência, um a cada período do relógio do barramento, sem que haja necessidade de algum sinal de controle. Os endereços são gerados a partir de um contador interno. Por dispensar os sinais de controle durante os próximos acessos, essa memória pode trabalhar facilmente com barramentos de 66, 100 e 133 MHz. O emprego de duplas de memórias SDRAM permitiu que se construísse uma nova memória, onde cada uma responde em um instante diferente. Uma trabalha com o flanco positivo do relógio enquanto que a outra trabalha com o flanco negativo. Assim, efetivamente duplicou-se a velocidade da memória, o que justifica a sigla "Doubled Data Rate SDRAM". Com tal técnica, foi possível atingir velocidades de 100/200 e 133/266 e 166/333 MHz. Para um futuro próximo estão prometidas as DDR-DRAM 200/400 MHz. As DDR ainda estão apresentando um fôlego considerável e são as que apresentam a melhor relação custo benefício. Diversos fabricantes estão disponibilizando chipsets e placas-mães para processadores com barramento de 333 MHz. Até mesmo a Intel, grande defensora das memórias DR-DRAM, lançou o chipset 845G, que permite o uso das DDR-SDRAM 166/333 MHz.

Memória DR-DRAM

Essa memória é construída com base na tecnologia gerada por uma empresa de nome "Rambus Inc" (www.rambus.com). Ela está baseada em um canal rápido, de 16 bits, que faz transações de até 800 MHz. Essa velocidade é conseguida com o emprego de barramentos separados para endereços e sinais de controle, além de um protocolo de grande eficiência. É possível o emprego de 1, 2 ou 4 canais simultâneos, o que viabiliza canais de acesso largos. Essas são as memórias indicadas pela Intel para trabalhar com seu processador Pentium 4. Entretanto, seu preço elevado acabou atrasando sua aceitação e disso se aproveitaram os fabricantes de chipset que rapidamente viabilizaram soluções para o Pentium 4 usando a DDR-DRAM. Alguns especialistas são da opinião de que somente essas memórias conseguirão acompanhar a velocidade dos futuros processadores.

___________________________________________________________

Ricardo Zelenovsky (rzele@bol.com.br) e Alexandre Mendonça (alexmend@aquarius.ime.eb.br) são engenheiros eletrônicos, professores universitários, editores de "www.mzeditora.com.br" e autores de 6 livros, dentre eles o clássico "PC: um Guia Prático de Hardware e Interfaceamento" - 3a Edição - 2002".