quinta-feira, 24 de março de 2011

NTLDR

NTLDR is missing

O Windows 2000 e Windows XP CDs fornecidos pela Microsoft tem uma ferramenta chamada o Console de recuperação que pode ser usado para reparar erros que impedem a inicialização do Windows XP usando a linha de comando. Versões OEM do Windows XP, incluindo computadores que foram fornecidos com o Windows XP pré-instalado, não podem ter este utilitário.

     * Insira o CD do Windows e iniciar o computador.
     * Quando a tela Bem Vindo a Instalação aparecer, pressione R.
     * Tipo um número correspondente à instalação do Windows que deseja reparar (geralmente 1) e pressione Enter.
     * Quando solicitado, digite a senha do administrador e pressione a tecla Enter.
     * No prompt de comando, copiar e NTDETECT.COM NTLDR da pasta i386 do CD para a pasta raiz do disco rígido. No exemplo dado comandos abaixo, C: é a unidade de disco rígido e D: é a unidade de CD-ROM. Você vai precisar alterar as letras de unidade, se necessário:
       COPY D: \ I386 \ NTLDR C: \
       COPY D: \ I386 \ NTDETECT.COM C: \
     * Retire o CD do Windows XP da unidade e reinicie o computador.

Memorias


MEMORIAS

Formatos
Nos micros XT, 286 e nos primeiros 386, ainda não eram utilizados módulos de memória. Em vez disso, os chips de memória eram instalados diretamente na placa-mãe, encaixados individualmente em colunas de soquetes (ou soldados), onde cada coluna formava um banco de memória.
Esse era um sistema antiquado, que trazia várias desvantagens, por dificultar upgrades de memória ou a substituição de módulos com defeito. Imagine você, fazendo um upgrade de memória numa placa como esta:







Não é só você que não achou muito atraente a idéia de ficar catando chips de memória um a um. Foi questão de tempo até que alguém aparecesse com uma alternativa mais prática, capaz de tornar a instalação fácil até mesmo para usuários inexperientes.
Os módulos de memória são pequenas placas de circuito onde os chips DIP são soldados, facilitando o manuseio e a instalação.
Os primeiros módulos de memória criados são chamados de módulos SIMM, sigla que significa "Single In Line Memory Module", justamente porque existe uma única via de contatos, com 30 vias. Apesar de existirem contatos também na parte de trás do módulo, eles servem apenas como uma extensão dos contatos frontais, de forma a aumentar a área de contato com o soquete. Examinando o módulo, você verá um pequeno orifício em cada contato, que serve justamente para unificar os dois lados.


                                                         Módulo SIMM de 30 vias




Os módulos de 30 vias possuíam sempre 8 ou 9 chips de memória. Cada chip fornecia um único bit de dados em cada transferência, de forma que 8 deles formavam um módulo capaz de transferir 8 bits por ciclo. No caso dos módulos com 9 chips, o último era destinado a armazenar os bits de paridade, que melhoravam a confiabilidade, permitindo identificar erros. Hoje em dia os módulos de memória são mais confiáveis, de forma que a paridade não é mais usada. No lugar dela, temos o ECC, um sistema mais avançado, usado em módulos de memória destinados a servidores.
Os módulos de 30 vias foram utilizados em micros 386 e 486 e foram fabricados em várias capacidades. Os mais comuns foram os módulos de 1 MB, mas era possível encontrar também módulos de 512 KB, 2 MB e 4 MB. Existiram também módulos de 8 e 16 MB, mas eles eram muito raros devido ao custo.
Os processadores 386 e 486 utilizavam um barramento de 32 bits para o acesso à memória, o que tornava necessário combinar 4 módulos de 30 vias para formar um banco de memória. Os 4 módulos eram então acessados pelo processador como se fossem um só. Era preciso usar os módulos em quartetos: 4 módulos ou 8 módulos, mas nunca um número quebrado.
A exceção ficava por conta dos micros equipados com processadores 386SX, onde são necessários apenas 2 módulos, já que o 386SX acessa a memória usando palavras de 16 bits:







Apesar de serem muito mais práticos do que manipular diretamente os chips DIP, os módulos SIMM de 30 vias ainda eram bastante inconvenientes, já que era preciso usar 4 módulos idênticos para formar cada banco de memória. Eles foram desenvolvidos pensando mais na questão da simplicidade e economia de custos do que na praticidade.
Para solucionar o problema, os fabricantes criaram um novo tipo de módulo de memória SIMM, de 32 bits, que possui 72 vias. Os módulos de 72 vias substituíram rapidamente os antigos nas placas para 486 e se tornaram o padrão nos micros Pentium, sendo em seguida substituídos pelos módulos de 168 vias.

                                                          Módulo SIMM de 72 vias



Em vez de quatro módulos, é preciso apenas um módulo SIMM de 72 vias para formar cada banco de memória nos micros 486. Como o Pentium acessa a memória usando palavras de 64 bits, são necessários 2 módulos em cada banco. É por isso que nos micros Pentium 1 precisamos sempre usar os módulos de memória em pares:







O acesso de 64 bits à memória foi introduzido para permitir que o processador conseguisse acessar grandes quantidades de dados mais rapidamente. O processador é tão mais rápido que a memória RAM, que depois de esperar vários ciclos para poder acessá-la, o melhor a fazer é pegar a maior quantidade de dados possível e guardar tudo no cache. Naturalmente os dados serão processados em blocos de 32 bits, mas a poupança ajuda bastante.
Dentro de um banco, todos os módulos são acessados ao mesmo tempo, como se fossem um só, por isso era sempre recomendável usar dois módulos iguais. Ao usar quatro módulos, o importante era que cada par fosse composto por dois módulos iguais. Não existia problema em usar dois pares de módulos diferentes, como ao usar dois de 16 MB e mais dois de 8 MB para totalizar 48 MB, por exemplo.
Uma curiosidade é que algumas placas-mãe para Pentium podem trabalhar com apenas um módulo de 72 vias. Nesse caso, a placa engana o processador, fazendo dois acessos de 32 bits consecutivos, entregando os dados de uma só vez para o processador. Apesar de funcionar, esse esquema reduz bastante a velocidade do micro, pois a taxa de transferência ao ler dados a partir da memória é efetivamente reduzida à metade.
Finalmente, temos os módulos DIMM, usados atualmente. Ao contrário dos módulos SIMM de 30 e 72 vias, os módulos DIMM possuem contatos em ambos os lados do módulo, o que justifica seu nome, "Double In Line Memory Module" ou "módulo de memória com dupla linha de contato".
Todos os módulos DIMM são módulos de 64 bits, o que eliminou a necessidade de usar 2 ou 4 módulos para formar um banco de memória. Muitas placas-mãe oferecem a opção de usar dois módulos (acessados simultaneamente) para melhorar a velocidade de acesso. Esse recurso é chamado de dual-channel e melhora consideravelmente o desempenho, sobretudo nas placas-mãe com vídeo onboard, onde a placa de vídeo disputa o acesso à memória RAM com o processador principal. De qualquer forma, mesmo nas placas dual-channel, usar os módulos em pares é opcional; você pode perfeitamente usar um único módulo, mas neste caso o suporte a dual-channel fica desativado.
Existem três formatos de memória DIMM. Os mais antigos são os módulos de memória SDR, de 168 vias, que eram utilizados há até poucos anos. Em seguida, temos os módulos de memória DDR, que possuem 184 contatos e os módulos DDR2, que possuem 240.
Apesar do maior número de contatos, os módulos DDR e DDR2 são exatamente do mesmo tamanho que os módulos SDR de 168 vias, por isso foram introduzidas mudanças na posição dos chanfros de encaixe, de forma que você não consiga encaixar os módulos em placas incompatíveis.
Os módulos SDR possuem dois chanfros, enquanto os DDR possuem apenas um chanfro, que ainda por cima é colocado em uma posição diferente:






Módulo DIMM SDR (em cima) e módulo DDR



Os módulos DDR2 também utilizam um único chanfro, mas ele está posicionado mais próximo do canto do módulo que o usado nos módulos DDR, de forma que é novamente impossível encaixar um módulo DDR2 numa placa antiga:


                                                                Módulo DIMM DDR2






Isso é necessário, pois além das mudanças na forma de acesso, os módulos DDR2 utilizam tensão de 1.8V, enquanto os módulos DDR usam 2.5V. Se fosse possível instalar um módulo DDR2 em uma placa antiga, a maior tensão queimaria o módulo rapidamente.
Outra diferença é que os chips DDR2 utilizam o encapsulamento BGA (Ball Grid Array), no lugar do encapsulamento TSOP (Thin Small-Outline Package), usado nos chips SDR e DDR. A grande diferença é que no BGA os pontos de solda são posicionados diretamente na parte inferior dos chips, em vez de serem usadas as "perninhas" laterais. Isso reduz a distância que o sinal elétrico precisa percorrer, além de reduzir o nível de interferências, permitindo que os módulos sejam capazes de operar a freqüências mais altas. Esta imagem ilustrativa da Micron mostra bem como os chips se parecem:





                                                          Chips BGA de memória

Mais recentemente surgiram no mercado alguns módulos de memória DDR que também utilizam chips BGA, mas eles são menos comuns.
Como os módulos DDR2 trabalham a freqüências mais altas, o uso de dissipadores se tornou mais comum. Eles não são realmente necessários, mas a melhor dissipação do calor permite que o módulo trabalhe a freqüências mais altas, por isso eles se tornaram norma nos módulos DDR2 de alto desempenho e, principalmente, nos módulos "premium", destinados a overclock. Alguns fabricantes chegam a utilizar heat-pipes ou a oferecer coolers ativos, que podem ser instalados sobre os módulos. 


                                                        Módulos DDR2 com dissipadores


Outra característica que torna os módulos DDR2 diferentes é a presença de um terminador resistivo dentro de cada chip de memória. O terminador é necessário para "fechar o circuito", evitando que os sinais elétricos retornem na forma de interferência ao chegarem ao final do barramento. Nos módulos DDR os terminadores são instalados na placa-mãe, o que torna a terminação menos eficiente. Como os módulos DDR2 operam a freqüências muito mais altas, a presença do terminador dentro dos próprios chips se tornou uma necessidade, já que torna o sinal mais estável e livre de ruídos.
Existem também os módulos SODIMM (Small Outline DIMM), destinados a notebooks. Eles são basicamente versões miniaturizadas dos módulos destinados a desktops, que utilizam os mesmos tipos de chips de memória.
Os módulos SODIMM SDR possuem 144 pinos, enquanto os módulos DDR e DDR2 possuem 200 pinos. Nos módulos SDR o chanfro fica próximo ao centro do módulo, enquanto nos DDR e DDR2 ele fica à esquerda. Assim como nos módulos para desktops, existe uma pequena diferença no posicionamento do chanfro entre os módulos DDR e DDR2, que impede o encaixe incorreto, já que ambos são incompatíveis. 






Módulo SODIMM DDR2

  

Tecnologias utilizadas


Um chip de memória é um exército de clones, formado por um brutal número de células idênticas, organizadas na forma de linhas e colunas, de forma similar a uma planilha eletrônica.
O chip de memória em si serve apenas para armazenar dados, não realiza nenhum tipo de processamento. Por isso, é utilizado um componente adicional, o controlador de memória, que pode ser incluído tanto no chipset da placa-mãe quanto dentro do próprio processador, como no caso dos processadores derivados do Athlon 64.
Para acessar um determinado endereço de memória, o controlador primeiro gera o valor RAS (Row Address Strobe), ou o número da linha da qual o endereço faz parte, gerando em seguida o valor CAS (Column Address Strobe), que corresponde à coluna. Quando o RAS é enviado, toda a linha é ativada simultaneamente; depois de um pequeno tempo de espera, o CAS é enviado, fechando o circuito e fazendo com que os dados do endereço selecionado sejam lidos ou gravados







Não existe um caminho de volta, ligando cada endereço de volta ao controlador de memória. Em vez disso, é usado um barramento comum, compartilhado por todos os endereços do módulo. O controlador de memória sabe que os dados que está recebendo são os armazenados no endereço X, pois ele se "lembra" que acabou de acessá-lo.
Antigamente (na época dos módulos de 30 vias), cada chip de memória se comportava exatamente dessa forma, lendo um bit de cada vez. Apesar disso, o processador lia 32 bits de dados a cada ciclo, de forma que eram usados 4 módulos, com 8 chips cada um.
Do ponto de vista do processador, não existia divisão, os chips eram acessados como se fossem um só. O processador não via 32 endereços separados, em 32 chips diferentes, mas sim um único endereço, contendo 32 bits.
Nos módulos DIMM atuais são geralmente usados 8 chips de 8 bits cada um, formando os 64 bits fornecidos ao processador. Existem ainda módulos com 16 chips de 4 bits cada, ou ainda, módulos com 4 chips de 16 bits (comuns em notebooks). Do ponto de vista do processador, não faz diferença, desde que somados os chips totalizem 64 bits.
Imagine que o controlador de memória envia seqüências com 4, 8 ou 16 pares de endereços RAS e CAS e recebe de volta o mesmo número de pacotes de 64 bits. Mesmo em casos em que o processador precisa de apenas alguns poucos bytes, contendo uma instrução ou bloco de dados, ele precisa ler todo o bloco de 64 bits adjacente, mesmo que seja para descartar os demais.
No caso das placas dual-channel, continuamos tendo acessos de 64 bits, a única diferença é que agora a placa-mãe é capaz de acessar dois endereços diferentes (cada um em um módulo de memória) a cada ciclo de clock, ao invés de apenas um. Isso permite transferir o dobro de dados por ciclo, fazendo com que o processador precise esperar menos tempo ao transferir grandes quantidades de dados.
Na verdade, nos PCs atuais, praticamente qualquer dispositivo pode acessar a memória diretamente através do barramento PCI, AGP, PCI Express e até mesmo a partir das portas SATA, IDE e USB. Naturalmente, todos os acessos são coordenados pelo processador, mas como a memória é uma só, temos situações onde o processador precisa esperar para acessar a memória, porque ela está sendo acessada por outro dispositivo.
Existem várias formas de melhorar o desempenho da memória RAM. A primeira é aumentar o número de bits lidos por ciclo, tornando o barramento mais largo, como o aumento de 32 para 64 bits introduzida pelo Pentium 1, que continua até os dias de hoje. O problema em usar um barramento mais largo é que o maior número de trilhas necessárias, tanto na placa-mãe quanto nos próprios módulos de memória, aumentam a complexidade e o custo de produção.
A segunda é acessar dois ou mais módulos de memória simultaneamente, como nas placas dual-channel. O problema é que nesse caso precisamos de dois módulos, além de circuitos e trilhas adicionais na placa-mãe.
A terceira é criar módulos de memória mais rápidos, como no caso das memórias DDR e DDR2. Essa questão da velocidade pode ser dividida em dois quesitos complementares: o número de ciclos por segundo e a latência, que é o tempo que a primeira operação numa série de operações de leitura ou escrita demora para ser concluída. O tempo de latência poderia ser comparado ao tempo de acesso de um HD, enquanto o número de ciclos poderia ser comparado ao clock do processador.
É aqui que entram as diferentes tecnologias de memórias que foram introduzidas ao longo das últimas décadas, começando pelas memórias regulares, usadas nos XTs e 286, que evoluíram para as memórias FPM, usadas em PCs 386 e 486, em seguida para as memórias EDO, usadas nos últimos micros 486s e nos Pentium. Estas três primeiras tecnologias foram então substituídas pelas memórias SDRAM, seguidas pelas memórias DDR e DDR2 usadas atualmente. 

Memórias FPM


A primeira melhora significativa na arquitetura das memórias veio com o FPM (Fast-Page Mode, ou "modo de paginação rápida").
A idéia é que, ao ler um bloco de instruções ou arquivo gravado na memória, os dados estão quase sempre gravados seqüencialmente. Não seria preciso então enviar o endereço RAS e CAS para cada bit a ser lido, mas simplesmente enviar o endereço RAS (linha) uma vez e em seguida enviar uma seqüência de até 4 endereços CAS (coluna), realizando uma série rápida de 4 leituras.
O primeiro ciclo de leitura continua tomando o mesmo tempo, mas as 3 leituras seguintes passam a ser bem mais rápidas. Graças a essa pequena otimização, as memórias FPM conseguem ser até 30% mais rápidas que as memórias regulares, sem grandes alterações nos chips de memória ou na técnica de fabricação. O burst (sequência de acessos rápidos) de 4 leituras pode ser prolongado para 8, ou até mesmo 16 leituras consecutivas, desde que lendo dados gravados em endereços adjacentes, da mesma linha.
As memórias FPM foram utilizadas em micros 386, 486 e nos primeiros micros Pentium, na forma de módulos SIMM de 30 ou 72 vias, com tempos de acesso de 80, 70 ou 60 ns, sendo as de 70 ns as mais comuns.
Instaladas em uma placa-mãe soquete 7, que trabalhe com bus de 66 MHz, os intervalos de espera de memórias FPM podem ser de até 6-3-3-3, o que significa que o processador terá de esperar cinco ciclos da placa-mãe para a memória efetuar a primeira leitura de dados e somente mais 3 ciclos para cada leitura subseqüente. Os tempos de espera das memórias podiam ser configurados no setup, através da opção "Memory Timing" ou similar, onde ficavam disponíveis opções como "slow", "normal" e "fast", que substituem os valores numéricos.
No caso das placas para 486, que operavam a clocks mais baixos (30, 33 ou 40 MHz), os tempos de espera podiam ser configurados com valores mais baixos, como 4-3-3-3 ou 3-2-2-2, já que, com menos ciclos por segundo, é natural que os tempos de resposta dos módulos correspondam a um número menor de ciclos da placa-mãe.

Memórias EDO


As memórias EDO (Extended Data Output) foram introduzidas a partir de 1994 e trouxeram mais uma melhoria significativa no modo de acesso a dados. Nas memórias FPM, uma leitura não pode ser iniciada antes que a anterior termine, mesmo dentro do burst de 4 leituras dentro da mesma linha. O controlador precisa esperar que os dados referentes à leitura anterior cheguem, antes de poder ativar endereço CAS seguinte.
Nas memórias EDO, o controlador faz a leitura enviando o endereço RAS, como de costume, e depois enviando os 4 endereços CAS numa freqüência predefinida, sem precisar esperar que o acesso anterior termine. Os sinais chegam às células de memória na seqüência em que foram enviados e, depois de um pequeno espaço de tempo, o controlador recebe de volta as 4 leituras.
O resultado acaba sendo exatamente o mesmo, mas passa a ser feito de forma mais rápida. Usadas em uma placa soquete 7, operando a 66 MHz, as memórias EDO são capazes de trabalhar com tempos de acesso de apenas 6-2-2-2, ou mesmo 5-2-2-2 (nos módulos de 60 ns). Nos bursts de 8 ou mais leituras, o ganho acaba sendo ainda maior, com o módulo FPM realizando a leitura dos 8 endereços em 27 ciclos (6-3-3-3-3-3-3-3) e o EDO em 20 (6-2-2-2-2-2-2-2). Veja que o ganho é maior em leituras de vários endereços consecutivos, por isso alguns aplicativos se beneficiam mais do que outros.
Os módulos de memória EDO foram produzidos em versões com tempos de acesso de 70, 60 e 50 ns, com predominância dos módulos de 60 ns. Eles foram usados predominantemente na forma de módulos de 72 vias, usados nos micros 486 e Pentium fabricados a partir de 1995.
Existiram ainda alguns módulos DIMM de 168 vias com memória EDO. Eles foram bastante raros, pois foram logo substituídos pelos módulos de memória SDRAM.
As melhorias na arquitetura das memórias EDO tornaram-nas incompatíveis com placas-mãe equipadas com chipsets mais antigos. Basicamente, apenas as placas para processadores Pentium e algumas placas-mãe para 486 com slots PCI (as mais recentes) aceitam trabalhar com memórias EDO. Existem também placas para 486 "tolerantes" que funcionam com memórias EDO, apesar de não serem capazes de tirar proveito do modo de acesso mais rápido, e finalmente, as placas incompatíveis, que nem chegam a inicializar caso sejam instaladas memórias EDO.
Todos os módulos de 30 vias são de memórias FPM, enquanto (com exceção de alguns módulos antigos) todos os de 168 vias são de memórias SDRAM. A confusão existe apenas nos módulos de 72 vias, que podem ser tanto de memórias EDO quanto de memórias FPM. Para saber quem é quem, basta verificar o tempo de acesso. Todo módulo de memória traz seus dados estampados nos chips, na forma de alguns códigos; o tempo de acesso é indicado no final da primeira linha. Se ela terminar com -7, -70, ou apenas 7, ou 70, o módulo possui tempo de acesso de 70 ns. Se por outro lado a primeira linha terminar com -6, -60, 6 ou 60 o módulo é de 60 ns.
Como quase todos os módulos de 70 ns são de memórias FPM, e quase todos os módulos de memórias EDO são de 60 ns, você pode usar esse método para determinar com 95% de certeza o tipo de memória usada:








Memórias SDRAM


Tanto as memórias FPM quanto as memórias EDO são assíncronas, o que significa que elas trabalham em seu próprio ritmo, independentemente dos ciclos da placa-mãe. Isso explica porque memórias FPM que foram projetadas para funcionar em placas para processadores 386 ou 486 funcionam sem problemas em placas soquete 7, que trabalham a 66 MHz. Na verdade, a memória continua trabalhando na mesma velocidade, o que muda são os tempos de espera que passam a ser mais altos. Assim, em vez de responder a cada 2 ciclos da placa-mãe, elas podem passar a responder a cada 3 ou 4 ciclos, por exemplo.
As memórias SDRAM (Synchronous Dynamic RAM) por sua vez, são capazes de trabalhar sincronizadas com os ciclos da placa-mãe, sem tempos de espera. Isso significa que a temporização das memórias SDRAM é sempre de uma leitura por ciclo. Independentemente da freqüência de barramento utilizada, os tempos de acesso serão sempre de 6-1-1-1, ou mesmo 5-1-1-1.
Veja que o primeiro acesso continua tomando vários ciclos, pois nele é necessário realizar o acesso padrão, ativando a linha (RAS) e depois a coluna (CAS). Apenas a partir do segundo acesso é que as otimizações entram em ação e a memória consegue realizar uma leitura por ciclo, até o final da leitura.
O burst de leitura pode ser de 2, 4 ou 8 endereços e existe também o modo "full page" (disponível apenas nos módulos SDRAM), onde o controlador pode especificar um número qualquer de endereços a serem lidos seqüencialmente, até um máximo de 512. Ou seja, em situações ideais, pode ser possível realizar a leitura de 256 setores em 260 ciclos! :). Só para efeito de comparação, se fossem usadas memórias regulares, com tempos de acesso similares, a mesma tarefa tomaria pelo menos 1280 ciclos.
Outra característica que ajuda as memórias SDRAM a serem mais rápidas que as EDO e FPM é a divisão dos módulos de memória em vários bancos. Um módulo DIMM pode ser formado por 2, 4, ou mesmo 8 bancos de memória, cada um englobando parte dos endereços disponíveis. Apenas um dos bancos pode ser acessado de cada vez, mas o controlador de memória pode aproveitar o tempo de ociosidade para fazer algumas operações nos demais, como executar os ciclos de refresh e também a pré-carga dos bancos que serão acessados em seguida. Nos módulos EDO e FPM, todas essas operações precisam ser feitas entre os ciclos de leitura, o que toma tempo e reduz a freqüência das operações de leitura.
A partir da memória SDRAM, tornou-se desnecessário falar em tempos de acesso, já que a memória trabalha de forma sincronizada em relação aos ciclos da placa-mãe. As memórias passaram então a ser rotuladas de acordo com a freqüência em que são capazes de operar. No caso das memórias SDRAM temos as memórias PC-66, PC-100 e PC-133, no caso das DDR temos as PC-200, PC-266, PC-333, PC-400 (e assim por diante), enquanto nas DDR2 temos as PC-533, PC-666, PC-800, PC-933, PC-1066 e PC-1200.
Um módulo de memória PC-133 deve ser capaz de operar a 133 MHz, fornecendo 133 milhões de leituras (teóricas) por segundo. Entretanto, essa velocidade é atingida apenas quando o módulo realiza um burst de várias leituras. O primeiro acesso continua levando 5, 6 ou mesmo 7 ciclos da placa-mãe, como nas memórias antigas.
Ou seja, o fato de ser um módulo PC-100 não indica que o módulo possui um tempo de acesso de 10 ns ou menos (nem mesmo os módulos DDR2 atuais atingem essa marca). Pelo contrário, a maioria dos módulos PC-100 trabalhavam com tempos de acesso de 40 ns. Mas, graças a todas as otimizações que vimos, as leituras podiam ser paralelizadas, de forma que no final o módulo suporta bursts de leitura onde, depois de um lento ciclo inicial, o módulo consegue realmente entregar 64 bits de dados a cada 10 ns.
Independentemente da freqüência de operação, temos também os módulos CL2 e CL3, onde o "CL" é abreviação de "CAS latency", ou seja, o tempo de latência relacionado ao envio do valor CAS, durante o primeiro acesso de cada burst.
Em módulos CL2, o envio do valor CAS toma 2 ciclos, enquanto nos CL3 toma 3 ciclos. A eles, somamos um ciclo inicial e mais dois ciclos relacionados ao envio do valor RAS, totalizando 5 (nos módulos CL2) ou 6 (nos CL3) ciclos para o acesso inicial.
A diferença acaba sendo pequena, pois os acessos seguintes demoram sempre apenas um ciclo.
Um módulo CL2 realizaria um burst de 8 leituras em 12 ciclos (5-1-1-1-1-1-1-1), enquanto o CL3 demoraria 13 ciclos (6-1-1-1-1-1-1-1). Ou seja, embora os módulos CL2 sejam celebrados e sejam alvo de um grande esforço de marketing por parte dos fabricantes, a diferença de performance é realmente muito pequena para justificar pagar mais caro num módulo CL2.
Apesar disso, os módulos CL2 trabalham com tempos de acesso um pouco mais baixos e por isso suportam melhor o uso de freqüências mais altas que o especificado, dando mais margem para overclock.
Veja que das memórias regulares, até as SDRAM, foi possível multiplicar a velocidade das memórias sem fazer alterações fundamentais nas células, que continuam seguindo o mesmo projeto básico, com um transístor e um capacitor para cada bit armazenado. Desde a década de 80, as reduções nos tempos de acesso foram apenas incrementais, acompanhando as melhorias nas técnicas de fabricação. O que realmente evoluiu com o passar do tempo foram os circuitos em torno dos módulos, que otimizaram o processo de leitura, extraindo mais e mais performance.
Chegamos então às memórias DDR, DDR2 e DDR3 usadas atualmente, que levam este processo crescente de otimização a um novo nível.

Memórias DDR


Apesar das otimizações, os módulos de memória SDRAM continuam realizando apenas uma transferência por ciclo, da forma mais simples possível. Depois de decorrido o longo ciclo inicial, as células de memória entregam uma leitura de dados por ciclo, que passa pelos buffers de saída e é despachada através do barramento de dados.
Todos os componentes trabalham na mesma freqüência:







As memórias DDR implementam um novo truque, que as torna capazes de realizarem duas transferências por ciclo e serem quase duas vezes mais rápidas que as memórias SDRAM, mesmo mantendo a mesma freqüência de operação e a mesma tecnologia básica. Vem daí o termo "DDR", que significa "Double Data Rate", ou duplo fluxo de dados. Com o lançamento das memórias DDR, as SDRAM passaram a ser chamadas de "SDR", ou "Single Data Rate".
Os chips de memória DDR incluem circuitos adicionais, que permitem gerar comandos de acesso e receber os dados referentes às leituras duas vezes por ciclo de clock, executando uma operação no início do ciclo e outra no final. Como são utilizadas as mesmas trilhas para realizar ambas as transferências, não foi necessário fazer grandes modificações nem nos módulos, nem nas placas-mãe.
Apesar disso, as células de memória propriamente ditas continuam operando na mesma freqüência. Em um módulo DDR-266, por exemplo, elas operam a apenas 133 MHz, da mesma forma que num módulo PC-133. O pulo do gato é fazer com que cada um dos dois comandos de leitura (ou gravação) sejam enviados para um endereço diferente, na mesma linha. As duas leituras são enviadas através do barramento de dados na forma de duas transferências separadas, uma realizada no início e a outra no final do ciclo de clock:







O maior problema é que o ciclo inicial continua demorando o mesmo tempo que nas memórias SDRAM, de forma que o ganho aparece apenas em leituras de vários setores consecutivos e a taxa de transferência nunca chega realmente a dobrar, variando bastante de acordo com o tipo de aplicativo usado.
A temporização para um burst de 8 leituras, usando memórias DDR, seria 5-½-½-½-½-½-½-½ (8.5 ciclos) ao invés de 5-1-1-1-1-1-1-1 (12 ciclos) como num módulo SDR. A diferença é menor em bursts menores, de apenas duas ou quatro leituras.
Apesar disso, as memórias DDR acabaram sendo um excelente negócio, pois tornaram possível obter ganhos perceptíveis de performance sem um aumento considerável no custo. Justamente por isso elas se popularizaram rapidamente, substituindo as memórias SDRAM num espaço de menos de um ano.
Os módulos DDR podem ser vendidos tanto segundo sua freqüência de operação quanto segundo sua taxa de transferência.
DDR-200 (100 MHz) = PC1600
DDR-266 (133 MHz) = PC2100
DDR-333 (166 MHz) = PC2700
DDR-400 (200 MHz) = PC3200
DDR-466 (233 MHz) = PC3700
DDR-500 (250 MHz) = PC4000
Assim como no caso dos módulos SDRAM, existem módulos de memória DDR CL2 e CL3, sendo que nos CL2 o tempo do acesso inicial é reduzido em um ciclo, resultando em um pequeno ganho de desempenho. Como as DDR realizam duas operações por ciclo, surgiram também os módulos CL2.5, que ficam no meio do caminho.
As especificações dos módulos indicam a freqüência máxima para a qual seu funcionamento foi comprovado. Nada impede que você use o módulo a uma freqüência mais baixa que o especificado; você pode usar um módulo DDR-400 em uma placa-mãe configurada para trabalhar a 133 MHz, por exemplo, mas nesse caso não existe ganho de desempenho com relação a um módulo DDR-266, com exceção de pequenas diferenças relacionadas ao valor CAS ou à temporização dos dois módulos.
Quase sempre, é possível também usar o módulo a freqüências um pouco mais altas que o especificado, fazendo overclock. O módulo DDR-400 poderia funcionar então a 215 MHz, por exemplo. Fazer overclock sem aumentar a tensão da memória não traz perigo para os módulos (mesmo a longo prazo), porém você também não tem garantia de estabilidade. Normalmente os módulos CL2 ou CL2.5 suportam melhor os overclocks, já que o controlador tem mais margem para aumentar a temporização dos módulos para compensar o aumento na freqüência.
Ao misturar dois módulos de especificações diferentes, é necessário nivelar por baixo, usando a freqüência suportada pelo módulo mais lento. Justamente por isso, nem sempre é conveniente aproveitar os módulos antigos ao fazer upgrade, pois você acaba sub-utilizando o novo módulo.
Em casos onde você tem, por exemplo, um módulo de 128 MB de memória DDR-266, vale mais a pena vender o módulo antigo e comprar um módulo DDR-400 ou DDR-466 de 512 MB ou mais, do que usar o antigo em conjunto com um módulo novo. Verifique apenas se a placa-mãe permite ajustar a freqüência de forma assíncrona, sem aumentar junto a freqüência do FSB (de forma que você possa usar a freqüência correta para o módulo, sem com isso alterar a freqüência dos demais componentes).
Continuando, quase todos os módulos de memória SDRAM ou DDR possuem um chip de identificação chamado de "SPD" (Serial Presence Detect), que armazena os códigos de identificação do módulo, detalhes sobre a freqüência, tempos de acesso, CAS latency e outras especificações. Estas informações são exibidas por programas de identificação, como o CPU-Z e o Sandra. No Linux, você pode ler as informações gravadas no chip usando o script "decode-dimms.pl" (você pode encontrá-lo usando o comando "locate"), que faz parte do pacote "lm-sensors". Ele retorna uma longa lista de informações sobre cada um dos módulos instalados na máquina, como neste exemplo:
Memory Serial Presence Detect Decoder
By Philip Edelbrock, Christian Zuckschwerdt, Burkart Lingner,
Jean Delvare and others
Version 2.10.1
Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/0-0050
Guessing DIMM is in bank 1
---=== SPD EEPROM Information ===---
EEPROM Checksum of bytes 0-62 OK (0x8C)
# of bytes written to SDRAM EEPROM 128
Total number of bytes in EEPROM 256
Fundamental Memory type DDR SDRAM
SPD Revision 0.0
---=== Memory Characteristics ===---
Maximum module speed 400MHz (PC3200)
Size 512 MB
tCL-tRCD-tRP-tRAS 3-3-3-8
Supported CAS Latencies 3, 2.5, 2
Supported CS Latencies 0
Supported WE Latencies 1
Minimum Cycle Time (CAS 3) 5 ns
Maximum Access Time (CAS 3) 0.65 ns
Minimum Cycle Time (CAS 2.5) 6 ns
Maximum Access Time (CAS 2.5) 0.7 ns
Minimum Cycle Time (CAS 2) 7.5 ns
Maximum Access Time (CAS 2) 0.75 ns
---=== Manufacturing Information ===---
Manufacturer Kingston
Manufacturing Location Code 0x04
Part Number K
Manufacturing Date 0x001E
Assembly Serial Number 0x6B376D48
Pelas informações, podemos ver que se trata de um módulo DDR-400 (PC3200) de 512 MB da Kingston. Veja que o módulo suporta o uso de CAS 3, 2.5 ou 2, mas em seguida é especificado que o tempo mínimo de acesso usando CAS 3 são 5 ns e usando CAS 2 são 7.5 ns. Ou seja, o módulo só é capaz de usar CAS 2 em freqüências mais baixas. Ao operar a 200 MHz, sua freqüência nominal, ele passa automaticamente a usar CAS 3. Apesar das especificações serem um pouco confusas, elas indicam que na verdade tenho em mãos um módulo CL3.
O SPD é um pequeno chip de memória EEPROM, com apenas 128 ou 256 bytes, que pode ser localizado facilmente no módulo:







Graças a ele, a placa-mãe pode utilizar automaticamente as configurações recomendadas para o módulo, facilitando a configuração. Mas, você pode desativar a configuração automática (By SPD) e especificar sua própria configuração através do Setup.
A maioria das placas atuais permitem que a memória opere de forma assíncrona com o clock da placa-mãe, permitindo que a placa-mãe opere a 166 MHz, enquanto a memória opera a 200 ou 233 MHz, por exemplo. Ao usar um módulo antigo, também é possível fazer o contrário, mantendo a placa-mãe a 200 MHz, mas configurando a memória para operar a 133 MHz, por exemplo:






 

Muitas placas vão além, permitindo que você ajuste manualmente o valor CAS da memória. Isso pode ser útil ao fazer overclock, pois um módulo DDR-400, pode não conseguir trabalhar estavelmente a 233 MHz (por exemplo), mantendo o CAS em 2 tempos, mas pode funcionar perfeitamente se o tempo for aumentado para 3 tempos. O inverso também é possível. Um módulo DDR-400 CAS3 poderia vir a trabalhar estavelmente com CAS 2 se a freqüência fosse reduzida para 166 MHz, por exemplo, oferecendo uma boa flexibilidade para quando você tem tempo disponível e quer chegar ao melhor desempenho possível.
Algumas placas vão ainda mais longe, oferecendo conjuntos completos de ajustes, como neste segundo screenshot:







Brincar com a freqüência e tempos de acesso da memória não oferece riscos para o equipamento. No máximo você pode precisar limpar o setup, para que o micro volte a inicializar depois de tentar usar uma configuração não suportada pelos módulos.
O maior risco está em aumentar a tensão usada pelos módulos (Memory Voltage). É comprovado que pequenos aumentos na tensão aumentam a possibilidade dos módulos trabalharem estavelmente a freqüências mais altas, sobretudo nos módulos DDR2, que dissipam mais calor. O problema é que isso também pode abreviar a vida útil dos módulos, por isso nem sempre é uma boa idéia.
Aumentos de até 5 a 6% estão dentro do limite de tolerância dos circuitos e não oferecem grandes riscos. Você pode usar 2.65v num módulo DDR ou 1.9v num módulo DDR2, mas a partir daí existe prejuízo para a vida útil. Aumentos a partir de 20% podem realmente queimar os módulos em poucas horas, por isso as opções normalmente não ficam disponíveis.

Memórias DDR2


Seguindo a tendência inaugurada pelas memórias DDR, as DDR2 novamente duplicam a taxa de transferência, realizando agora 4 operações por ciclo. Novamente, as células de memória continuam trabalhando na mesma freqüência anterior e o acesso inicial continua demorando aproximadamente o mesmo tempo. Entretanto, as demais operações dentro do burst passam a ser realizadas em apenas um quarto de ciclo de clock. Usando memórias DDR2, um burst de 8 leituras demoraria apenas 6.75 ciclos de clock (5-¼-¼-¼-¼-¼-¼-¼), contra 8.5 ciclos nas DDR e 12 nas SDR.
Como você pode ver, a diferença é maior em aplicativos que precisam manipular grandes blocos de dados e menor em aplicativos que lêem pequenos blocos de dados espalhados. Em nenhuma situação prática a transferência chega realmente a dobrar. Dizer que as "DDR2 são duas vezes mais rápidas" é apenas uma figura de linguagem. :)
Em 2005, quando os primeiros módulos DDR2-533 chegaram ao mercado, eles rapidamente ganharam a fama de "lentos", pois eram comparados a módulos DDR-400 ou DDR-466, que já estavam entrincheirados. Embora um módulo DDR2 ganhe de um DDR da mesma freqüência em todos os quesitos (um DDR2-800 contra um DDR-400, por exemplo), o mesmo não acontece se comparamos módulos de freqüências diferentes. Um DDR2-533 opera a apenas 133 MHz, por isso acaba realmente perdendo para um DDR-400 (200 MHz) na maioria das aplicações, pois a ganho de realizar 4 operações por ciclo acaba não sendo suficiente para compensar a diferença na freqüência de operação das células de memória. Vale lembrar que um módulo DDR2-533 trabalha com tempos de latência similares a um módulo DDR-266.
Realizar bursts de leituras rápidas pode não ser a forma mais perfeita de criar memórias mais rápidas (por causa do lento ciclo inicial), mas é sem dúvida a mais simples e barata. A freqüência de operação das memórias aumenta de forma gradual, conforme são melhoradas as técnicas de produção. Realizar mais leituras por ciclo de clock é a única forma simples de melhorar a taxa de transferência dos módulos.
Assim como no caso dos processadores, não é possível criar um processador capaz de operar ao dobro do clock de uma hora para a outra, mas é possível criar um processador dual-core, por exemplo. No caso das memórias é mais simples, pois você pode ler vários endereços simultaneamente (ou quase), fazendo apenas mudanças nos circuitos controladores.
Dependendo da fonte, você pode ler tanto que as memórias DDR2 operam ao dobro da freqüência que as DDR quanto que elas realizam quatro transferências por ciclo em vez de duas. Nenhuma das duas explicações estão erradas, mas ambas são incompletas.
Como disse, as células de memória continuam trabalhando na mesma freqüência das memórias SDR e DDR, mas os buffers de entrada e saída, responsáveis por ler os dados, passaram a operar ao dobro da freqüência. É justamente esta freqüência que é "vista" pelo restante do sistema, de forma que a maioria dos programas de diagnóstico mostra a freqüência dobrada usada pelos circuitos de entrada e não a freqüência real das células de memória.
Devido a esta ambigüidade, não é errado dizer que os módulos DDR2 operam ao dobro da freqüência dos DDR (os buffers e outros circuitos de apoio realmente operam), nem que são realizadas 4 leituras por ciclo (já que as células de memória continuam operando à mesma freqüência).
Ao realizar uma leitura, o controlador de memória gera quatro sinais distintos, que ativam a leitura de quatro endereços adjacentes (4-bit prefetch). As quatro leituras são feitas simultaneamente e os dados são entregues ao buffer, que se encarrega de despachá-los através do barramento principal.
Presumindo que o módulo DDR2 do exemplo operasse a 100 MHz, teríamos as células de memória ainda operando na mesma freqüência, mas agora entregando 4 leituras de setores seqüenciais por ciclo. Os buffers e o barramento de dados operam agora a 200 MHz, de forma que as 4 leituras podem ser enviadas em 2 ciclos, com duas transferências por ciclo. Os dois ciclos do barramento são realizados no mesmo espaço de tempo que apenas um ciclo das células de memória:









Como vimos, as células de memória podem ser grosseiramente comparadas a uma planilha eletrônica, com inúmeras linhas e colunas. Não existe uma grande dificuldade em ler vários endereços diferentes simultaneamente, desde que o fabricante consiga desenvolver os circuitos de controle necessários. Graças a isso, o desenvolvimento das memórias tem sido focado em realizar mais leituras pro ciclo, combinada com aumentos graduais nas freqüências de operação.
Quando as memórias DIMM surgiram, ainda na época do Pentium II, os módulos mais rápidos operavam a 100 MHz (os famosos módulos PC-100). Atualmente temos chips de memória de até 300 MHz que, combinados com as 4 leituras por ciclo, resultam em módulos com transferência teórica de até 9.6 GB/s:
DDR2-533 (133 MHz) = PC2-4200
DDR2-667 (166 MHz) = PC2-5300
DDR2-800 (200 MHz) = PC2-6400
DDR2-933 (233 MHz) = PC2-7500
DDR2-1066 (266 MHz) = PC2-8500
DDR2-1200 (300 MHz) = PC2-9600
O CAS latency dos módulos DDR2 é medido em termos de ciclos do circuito controlador, por isso são normalmente o dobro do que nos módulos DDR. É como em "duas unidades" ou "quatro metades", no final dá no mesmo ;). Um módulo DDR2-800 com CAS latency 4 possui o mesmo tempo de acesso que um DDR-400 com CAS latency 2.
Normalmente, as especificações das memórias DDR2 incluem não apenas o CAS latency (tCL), mas também o RAS to CAS delay (tRCD), Row Precharge Time (tRP) e RAS Activate to Charge (tRAS). Estes mesmos valores podem ser encontrados nas especificações de módulos DDR e SDR, mas com as memórias DDR2 os fabricantes passaram a divulgá-los de forma mais aberta, usando qualquer redução nos valores para diferenciar seus módulos dos concorrentes. Temos então módulos DDR2-800 "4-4-4-12" ou "5-5-5-15", por exemplo.
O primeiro número é o CAS latency, que já conhecemos. O seguinte é o RAS to CAS delay, que é o tempo que o controlador precisa esperar entre o envio do endereço RAS e o CAS. Para realizar uma leitura, o controlador envia o sinal RAS, espera o tempo referente ao RAS to CAS delay, envia o sinal CAS, aguarda o número de ciclos referente a ele e então finalmente tem a leitura. Em um módulo DDR2 4-4-4-12, tanto o tCL quanto o tRCD demoram 4 ciclos, de forma que o acesso inicial demoraria um total de 8 ciclos. Em um módulo 5-5-5-15, o tempo subiria para 10 ciclos.
É importante lembrar (mais uma vez ;) que aqui estamos falando de ciclos dos circuitos de acesso, que trabalham ao dobro da freqüência. Os 8 ciclos de um módulo DDR2 equivalem ao mesmo espaço de tempo consumido por 4 ciclos de um módulo DDR ou SDR.
Junto com o ciclo inicial, o controlador pode realizar um burst de mais 7 leituras (totalizando 8). Cada uma destas leituras adicionais consome o equivalente a meio ciclo do controlador (ou a um quarto de ciclo das células de memória). Caso ele precise de mais dados dentro da mesma linha, ele repete o envio do sinal CAS e realiza um novo burst de leituras.
Note que o controlador só precisa enviar o sinal RAS ao mudar a linha ativa, de forma que o tRCD só entra na conta no primeiro acesso. Para os seguintes, temos apenas o tempo referente ao tCL. Caso o controlador precise realizar 24 leituras (dentro da mesma linha), num módulo DDR2 4-4-4-12, teríamos 11.5 ciclos (8+3.5) para as 8 primeiras leituras e mais 15 ciclos (4+3.5+4+3.5) para as 16 leituras subseqüentes. É por causa dessa peculiaridade que os módulos DDR e DDR2 não possuem mais o "full-page mode" suportado pelas memórias SDRAM; ele deixou de ser necessário.
O Row Precharge Time (tRP) entra em ação quando o controlador precisa alternar entre diferentes linhas. Cada linha inclui 512 endereços de memória, o equivalente a 4 KB de dados. As linhas são divididas em 4 ou 8 páginas, de forma que um módulo DDR2 de 1 GB teria 8 páginas de 32.768 linhas, ou 4 páginas de 65.536 linhas. Com tantas linhas e páginas diferentes, não é difícil imaginar que o chaveamento entre elas é muito freqüente. Quando falo em linhas e páginas, tenha em mente que essa é apenas a forma como o controlador de memória "enxerga" o módulo. Fisicamente, mesmo os bits de uma mesma linha estão espalhados pelos vários chips do módulo.
Antes de poder acessar uma determinada linha, o controlador de memória precisa carregá-la (precharge). Isso consiste em recarregar os capacitores dentro das células de memória, facilitando a leitura dos dados. O Row Precharge Time (tRP) é justamente o tempo necessário para fazer o carregamento, necessário antes de chavear para outra linha, seja no mesmo banco, seja num banco diferente.
Sendo assim, mesmo que seja necessário ler um único setor, a leitura demorará (em um módulo 4-4-4-12) 4 ciclos para o tRP, 4 ciclos para o tRCD, 4 ciclos para o tCL, totalizando 12 ciclos. Estes 12 ciclos são justamente o tempo referente ao RAS Activate to Charge (tRAS), que é o tempo mínimo para realizar uma leitura completa. O tRAS é sempre proporcional aos três primeiros valores, pois é justamente a soma dos três. É por isso que ele sempre é mais alto em módulos com CAS latency mais alto.
É possível reduzir o tRAS utilizando um recurso chamado Additive Latency, onde o comando para iniciar o precharge do banco seguinte pode ser enviado antes que a leitura atual termine. Isso faz com que o tempo total da leitura seguinte seja reduzido em 1 ou até mesmo 2 ciclos. Esse é o caso dos módulos 5-4-4-11 ou 4-4-4-11, por exemplo. Em outros casos é necessário um ciclo adicional para fechar o banco, que aumenta o tRAS em vez de diminuir. De qualquer forma, o tRAS é dos quatro o parâmetro que menos influi no desempenho, pois só faz alguma diferença real quando o sistema precisa realizar séries de acessos rápidos, a linhas diferentes.
Bem, esta última parte exigiu uma explicação mais complexa que o habitual. Como você pode ver, os tempos de acesso dos módulos DDR2 é um pouco mais complexo do que pode parecer à primeira vista.
Entretanto, o mais importante dos 4 valores continua sendo o primeiro (o bom e velho CAS latency, ou tCL), já que o tRCD e o tRP são quase sempre iguais a ele e o tRAS é a soma dos três. Ou seja, se o CAS latency é mais baixo, automaticamente os demais valores também são.


Memórias DDR3


O lançamento das memórias DDR2 teve um impacto diferente para a Intel e a AMD. Para a Intel, a migração para as memórias DDR2 foi mais simples, já que o controlador de memória é incluído no chipset, de forma que aderir a uma nova tecnologia demanda apenas modificações nos chipsets e placas.
A Intel oferece suporte a memórias DDR2 em seus chipsets desde o i915P, lançado em 2004. Inicialmente, os chipsets ofereciam tanto suporte a memórias DDR quanto DDR2, de forma que ficava a cargo do fabricante escolher qual padrão utilizar. Existem inclusive placas híbridas, que suportam ambos os padrões, como a ECS 915P-A, que possuem dois slots de cada tipo, permitindo que você escolha qual padrão utilizar. A partir de um certo ponto, entretanto, as memórias DDR2 caíram de preço e quase todas as placas soquete 775 passaram a vir com suporte exclusivo a memórias DDR2.
Para a AMD, a mudança foi mais tortuosa, já que o Athlon 64 e derivados utilizam um controlador de memória embutido diretamente no processador, desenvolvido de forma a minimizar os tempos de acesso.
Por um lado isto é bom, pois oferece um ganho real de desempenho, mas por outro é ruim, pois qualquer mudança no tipo de memória usado demanda mudanças no processador e no soquete usado. Foi justamente isso que aconteceu quando a AMD decidiu fazer a migração das memórias DDR para as DDR2. Além das mudanças internas no processador e controlador de memória, o soquete 754 foi substituído pelo soquete 939 e em seguida pelo AM2, quebrando a compatibilidade com as placas antigas.
Com a adoção por parte da AMD, a procura (e conseqüentemente a produção) das memórias DDR2 aumentou bastante, fazendo com que os preços passassem a cair rapidamente.
A partir do final de 2006, os preços dos módulos de memória DDR2 (nos EUA) caíram a ponto de passarem a ser mais baratos que os módulos DDR regulares. Como sempre, as mudanças chegam ao Brasil com alguns meses de atraso, mas a partir do início de 2007 as memórias DDR2 passaram a ser encontradas por preços inferiores às DDR por aqui também. Como sempre, módulos de alto desempenho (como os Corsair Dominator) chegam a custar até duas vezes mais caro, mas em se tratando de memórias genéricas, os preços caíram muito.
Outra questão importante é a popularização de módulos DDR2-1066 e também de módulos de baixa latência, com temporização de 4-4-3-11, ou mesmo 3-3-3-9. Ao contrário da geração inicial de módulos DDR2, que ofereciam mais banda, mas em compensação trabalhavam com tempos de acesso muito mais altos, esta segunda geração de módulos DDR2 é indiscutivelmente mais rápida. O ganho prático em utilizar memórias DDR2 não é muito grande, pois o barramento com a memória é apenas um dos fatores que determina o desempenho do PC. Mas, a partir do momento em que os módulos DDR2 passam a ser mais baratos, qualquer ganho, por menor que seja, é muito bem-vindo.
Enquanto ainda estávamos nos acostumando com as memórias DDR2, a Intel apertou o passo e incluiu o suporte ao padrão seguinte no chipset P35, lançado oficialmente em junho de 2007.
Como sugere a lógica, as memórias DDR3 realizam 8 acessos por ciclo, contra os 4 acessos por ciclo das memórias DDR2. Assim como na tecnologia anterior, os acessos são realizados a endereços subjacentes, de forma que não existe necessidade de aumentar a freqüência "real" das células de memória.
Inicialmente, os módulos DDR3 foram lançados em versão DDR3-1066 (133 MHz x 8) e DDR3-1333 (166 MHz x 8), seguidos pelo padrão DDR3-1600 (200 MHz x 8). Os três padrões são também chamados de (respectivamente) PC3-8500, PC3-10667 e PC3-12800, nesse caso dando ênfase à taxa de transferência teórica.
Apesar do aumento no número de transferências por ciclo, os buffers de dados continuam trabalhando a apenas o dobro da freqüência das células de memória. Ou seja, a freqüência interna (das células de memória) de um módulo DDR3-1600 é de 200 MHz e a freqüência externa (dos buffers de dados) é de 400 MHz. As células de memória realizam 8 transferências por ciclo de clock (em vez de 4, como nas DDR2) e os buffers de dados (que operam ao dobro da freqüência) realizam 4 transferências por ciclo de clock, em vez de apenas duas, como nos módulos DDR2.
Com isso, chegamos à freqüência de 1600 MHz divulgada, que, como pode ver, é obtida através do aumento do número de transferências realizadas por ciclo e não através do aumento do clock "real" das células de memória ou dos buffers de dados. Se as mudanças parassem por aí, os módulos DDR3 não ofereceriam ganhos muito grandes na prática, pois o tempo de latência inicial continuaria sendo o mesmo que nos módulos DDR2 (já que não houve mudança na freqüência das células de memória). Se um módulo DDR3 operasse com tempos de acesso 10-10-10-30, os ganhos seriam pequenos em relação a um DDR2 5-5-5-15, já que só haveria ganho nos acessos subseqüentes.
Para evitar isso, os módulos DDR3 incluem um sistema integrado de calibragem do sinal, que melhora de forma considerável a estabilidade dos sinais, possibilitando o uso de tempos de latência mais baixos, sem que a estabilidade seja comprometida.
Os módulos DDR3 utilizam também 8 bancos em vez de 4, o que ajuda a reduzir o tempo de latência em módulos de grande capacidade. Elas também trouxeram uma nova redução na tensão usada, que caiu para apenas 1.5V, ao invés dos 1.8V usados pelas memórias DDR2. A redução na tensão faz com que o consumo elétrico dos módulos caia proporcionalmente, o que os torna mais atrativos para os fabricantes de notebooks.
Somadas todas essas melhorias, os tempos de acesso "reais" dos módulos foram sensivelmente reduzidos. Em vez de de trabalharem com tempos de acesso 10-10-10-30, a geração inicial de módulos DDR3 é capaz de trabalhar com temporização 9-9-9-24, ou mesmo 7-7-7-15.
Apesar disso, muitos módulos de alto desempenho podem precisar de tensões mais altas, como 1.6V ou mesmo 1.7V para trabalharem na freqüência máxima. Assim como no caso dos módulos DDR2, os fabricantes podem ajustar a tensão de operação de acordo com as necessidades do projeto e você pode também utilizar tensões mais altas por conta própria ao fazer overclock.
Os módulos DDR3 utilizam os mesmos 240 contatos dos módulos DDR2 e mantém o mesmo formato. A única diferença visível (fora etiquetas e códigos de identificação) é a mudança na posição do chanfro, que passou a ser posicionado mais próximo do canto do módulo. O chanfro serve justamente para impedir que módulos de diferentes tecnologias sejam encaixados em placas incompatíveis. 

                                                                  Módulo DDR3




As memórias DDR2 demoraram quase 3 anos para se popularizarem desde a introdução do chipset i915P, em 2004. As memórias DDR3 devem passar por um caminho similar, com os módulos inicialmente custando muito mais caro e caindo ao mesmo nível de preço dos módulos DDR2 apenas por volta de 2009. Não existe nada de fundamentalmente diferente nos módulos DDR3 que os torne mais caros de se produzir, o preço é determinado basicamente pelo volume de produção.
Assim como no caso das memórias DDR2, a maior taxa de transferência oferecida pelas memórias DDR3 resulta em um ganho relativamente pequeno no desempenho global do sistema, de apenas 1 a 3% na maioria dos aplicativos, por isso não vale a pena pagar muito mais caro por módulos DDR3 ao comprar. Enquanto eles estiverem substancialmente mais caros, continue comprando (e indicando) placas com suporte a módulos DDR2.
Na culinária, quem é apressado come cru. No mundo da informática os efeitos colaterais são ainda piores, já que quem é apressado paga mais caro. :)
Até o momento, o uso de memórias DDR3 está limitado à plataforma Intel, com os chipsets P35, G33, G35 e X38. No caso da AMD, a adoção ainda está indefinida, já que o suporte às memórias DDR3 depende de uma nova mudança no controlador de memória integrado e (possivelmente) também no soquete usado pelos processadores. Além disso, a história mostra que a Intel é quase sempre a primeira a adotar e popularizar novas tecnologias (como as memórias DDR2 e o PCI-Express), enquanto a AMD geralmente prefere esperar até que elas estejam maduras e o custo tenha caído.

Memória Flash


Diferentemente da memória RAM e também das SRAM, a memória Flash permite armazenar dados por longos períodos, sem precisar de alimentação elétrica.
Graças a isso, a memória Flash se tornou rapidamente a tecnologia dominante em cartões de memória, pendrives, HDs de estado sólido (SSDs), memória de armazenamento em câmeras, celulares e palmtops e assim por diante.
Se a memória Flash não existisse, todas essas áreas estariam muito atrasadas em relação ao que temos hoje. Os celulares e os palmtops provavelmente ainda utilizariam memória SRAM para armazenar os dados e seriam por isso mais caros e perderiam os dados quando a bateria fosse removida. Os pendrives simplesmente não existiriam e os cartões de memória estariam estagnados nos cartões CompactFlash, utilizando microdrives ou pequenas quantidades de memória SRAM alimentada por uma pequena bateria. Formatos mais compactos, como os cartões SD e miniSD simplesmente não existiriam.
Existem dois tipos de memória Flash. A primeira tecnologia de memória Flash a se popularizar foi o tipo NOR, que chegou ao mercado em 1988. Os chips de memória Flash NOR possuem uma interface de endereços similar à da memória RAM.
Graças a isso, eles rapidamente passaram a ser usados para armazenar o BIOS da placa-mãe e firmwares em dispositivos diversos, que antes eram armazenados em chips de memória ROM ou EEPROM. Nos primeiros PCs, por exemplo, o BIOS da placa-mãe era gravado em um chip de memória ROM e por isso não era atualizável, a menos que o chip fosse fisicamente substituído.
O problema com as memórias NOR é que elas são muito caras e, embora as leituras sejam rápidas, o tempo de gravação das células é muito alto. Em um chip de memória NOR típico, as operações de gravação demoram cerca de 750 nanosegundos, ou seja, teríamos pouco mais de 1300 operações de gravação por segundo!
No caso do BIOS da placa-mãe, isso não é um grande problema, pois você só precisa atualizá-lo esporadicamente. Mas, imagine um palmtop que tentasse utilizar apenas memória NOR com memória de trabalho... O sistema rodaria tão lentamente que a idéia acabaria sendo abandonada mais cedo ou mais tarde. :)
Apesar disso, a memória Flash do tipo NOR é bastante usada até hoje em palmtops, celulares e diversos tipos de dispositivos, para armazenar o sistema operacional (nesse caso chamado de firmware), que é carregado durante o boot, sem ser alterado. A vantagem nesse caso é o XiP (execute in place), onde o sistema pode rodar diretamente a partir do chip de memória, sem precisar ser primeiro copiado para a memória RAM.
O chip de memória NOR é complementado por uma pequena quantidade de memória SRAM ou DRAM, que é usada como memória de trabalho. Em muitos casos, a memória é usada também para armazenar dados e configurações que, justamente por isso, podem ser perdidos quando a carga da bateria se esgota completamente.
As memórias Flash NOR chegaram a ser utilizadas nos primeiros cartões de memória PCMCIA e CompactFlash, mas elas desapareceram desse ramo quando foram introduzidas as memórias NAND, que são de longe o tipo mais usado atualmente.
Nelas, cada célula é composta por dois transístores, com uma fina camada de óxido de silício precisamente posicionada entre os dois, que armazena cargas negativas. Isso cria uma espécie de armadilha de elétrons, que permite manter os dados por longos períodos de tempo, sem que seja necessário manter a alimentação elétrica (como nas memórias SRAM), ou muito menos fazer um refresh periódico (como na memória DRAM). Isso simplifica muito o design dos cartões, pendrives e outros dispositivos, pois eles precisam incluir apenas os chips de memória Flash NAND, um chip controlador e as trilhas necessárias. Nada de baterias, circuitos de refresh ou qualquer coisa do gênero.
Aqui temos um diagrama da Intel que mostra uma célula de memória Flash NAND:





Pelo diagrama você pode notar que embora mais complexa que uma célula de memória RAM (onde temos apenas um transístor e um capacitor), a célula de memória Flash ocupa pouco espaço, pois o segundo transístor é posicionado sobre o primeiro. Graças ao tamanho reduzido das células, cada chip de memória Flash NAND armazena uma quantidade muito maior de dados, o que faz com que o preço por megabyte seja muito mais baixo.
Além de mais baratas que as NOR, as memórias NAND também são muito mais rápidas na hora de gravar dados. A principal limitação é que elas são endereçadas usando páginas de 2 KB e acessadas através de um barramento serial. Ou seja, do ponto de vista do sistema, um cartão de memória Flash NAND está mais para um HD do que para uma unidade de memória. Você pode usá-lo para guardar dados, mas na hora que o sistema precisa rodar um programa, precisa primeiro copiá-lo para a memória RAM, da mesma forma que faria ao usar um HD.
De alguns anos para cá, os palmtops e smartphones passaram a cada vez mais utilizar memória Flash NAND como área de armazenamento de dados e programas, substituindo a memória SRAM. Isso se tornou possível graças a um conjunto de truques feitos via software, onde o sistema utiliza uma quantidade menor de memória SRAM como área de trabalho e vai lendo e os arquivos na memória Flash conforme eles são necessários. Esse esquema é muito similar ao que temos num PC, onde os arquivos são salvos no HD, porém processados usando a memória RAM.
Um dos primeiros aparelhos a aderir a esse sistema foi o Treo 650, lançado em 2004. Atualmente ele é utilizado na grande maioria dos modelos, pois, além de cortar custos, melhora a confiabilidade do aparelho, já que os dados não são mais perdidos ao remover a bateria. 







O grande boom da memória Flash aconteceu entre 2004 e 2005, quando uma combinação de dois fatores fez com que os preços por MB caíssem rapidamente.
O primeiro foi o brutal aumento na produção e a concorrência entre os fabricantes, que empurraram os preços para baixo. Além de gigantes como a Samsung e a Toshiba, até mesmo a Intel e a AMD investiram pesadamente na fabricação de memória Flash.
O segundo foi a introdução da tecnologia MLC (Mult-Level Cell), onde cada célula passa a armazenar dois ou mais bits em vez de apenas um. Isso é possível graças ao uso de tensões intermediárias. Com 4 tensões diferentes, a célula pode armazenar 2 bits, com 8 pode armazenar 3 bits e assim por diante. O MLC foi implantado de forma mais ou menos simultânea pelos diversos fabricantes e permitiu reduzir drasticamente o custo por megabyte, quase que de uma hora para a outra. Outra tecnologia similar é o MBC (Multi-Bit Cell), desenvolvido pela Infineon.
Os chips "tradicionais", que armazenam um único bit por célula passaram a ser chamados de "SLC" (single-bit cell) e ainda são produzidos com o objetivo de atender o mercado de cartões de alto desempenho (sobretudo os cartões CF destinados ao mercado profissional). Embora muito mais caros, eles oferecem um melhor desempenho e são mais duráveis.
Outra tecnologia usada pelos fabricantes para cortar custos e ao mesmo tempo permitir a criação de chips de maior densidade é o "Die-Stacking", onde dois ou mais chips são "empilhados", conectados entre si e selados dentro de um único encapsulamento, que possui o mesmo formato e contatos que um chip tradicional. Como uma boa parte do custo de um chip de memória Flash corresponde justamente ao processo de encapsulamento, o uso do Die-Stacking permite mais uma redução substancial do custo.
Como de praxe, a popularização das memórias Flash deu início a uma guerra entre diversos formatos de cartões, alguns abertos e outros proprietários.

CompactFlash
: Excluindo os jurássicos cartões de memória PCMCIA, o primeiro formato de cartão foi o CompactFlash (CF), onde é utilizada uma interface muito similar à interface IDE usada pelos HDs, com nada menos que 50 pinos. Aqui temos um cartão CF aberto:








De um dos lados temos o chip controlador e um dos chips de memória e no outro temos espaço para mais dois chips, totalizando até 3 chips de alta capacidade. Graças a esse design, os cartões CF oferecem boas taxas de transferência, mas em compensação são caros e volumosos, o que explica a decadência do formato.
Os cartões CompactFlash ainda são produzidos e sobrevivem em alguns nichos. Eles são usados por algumas câmeras da Canon, voltadas para o segmento profissional (onde a boa taxa de transferência dos cartões CF presta bons serviços) e em diversos tipos de sistemas embarcados. Devido à similaridade entre os dois barramentos, existem adaptadores que permitem instalar cartões CF numa porta IDE, substituindo o HD.

SmartMedia
: Em 1995 a Toshiba lançou o formato SmartMedia (SM), um formato muito mais simples, onde o chip de memória é acessado diretamente, sem o uso de um chip controlador. O chip de memória é encapsulado dentro de um cartucho plástico, com apenas 0.76 mm de espessura e os contatos externos são ligados diretamente a ele. Nesta foto você pode ver um cartão SmartMedia em comparação com um cartão MMC e um Memory Stick:





Apesar de finos, os cartões SM eram relativamente grandes, o que levou os fabricantes a abandonarem o formato. Surgiram então os formatos xD, MMC, SD e Memory Stick. Surpreendentemente, os leitores de cartões USB passaram a oferecer suporte para todos os formatos simultaneamente. Isso foi possível graças ao desenvolvimento de chips controladores "tudo em um", capazes de converter cada um dos protocolos nos comandos suportados pelo padrão USB. Existem também os leitores incluídos nos notebooks, que lêem cartões SD e Memory Stick. Do ponto de vista do sistema operacional, eles são diferentes dos leitores USB, pois são ligados ao barramento PCI (ou PCI Express) ao invés de usarem o barramento USB e a maioria das funções são executadas via software (como em um softmodem), graças ao driver instalado.

Cartões xD
: O próximo da lista é o xD, um formato proprietário, usado em câmeras da Olympus e da Fujifilm. Eles são relativamente rápidos se comparados com os SmartMedia e com os cartões MMC, mas são bem mais lentos que os cartões SD usados atualmente. Existiram duas atualizações para o formato: o "xD M" (que permitiu o desenvolvimento de cartões com mais de 512 MB) e o "xD H" (que melhorou a velocidade de transferência). Apesar disso, ambos acabaram sendo pouco usados, devido à concorrência dos cartões SD.
Assim como nos cartões SM, os contatos são ligados diretamente no chip de memória, sem o uso de um chip controlador. Isso em teoria baratearia os cartões, mas devido à pequena demanda (e conseqüentemente aos baixos volumes de produção), os cartões xD são atualmente bem mais caros. Isso acaba prejudicando a competitividade das câmeras dos dois fabricantes, que perdem mercado por insistirem no padrão.







Cartões MMC: O MMC é um padrão "quase aberto", onde é necessário pagar uma taxa inicial para obter as especificações e mais um valor anual à MMC Association, além de seguir um conjunto de restrições. Os cartões MMC possuem exatamente as mesmas dimensões dos cartões SD atuais e são compatíveis com a maior parte das câmeras e outros dispositivos, além de utilizarem o mesmo encaixe que eles nos adaptadores. As únicas diferenças visíveis são que os cartões MMC são um pouco mais finos (1.4 mm, contra 2.1 mm dos SD) e possuem apenas 7 pinos, enquanto os SD possuem dois pinos extras, totalizando 9.
O maior problema é que os cartões MMC são lentos, pois utilizam um antiquado barramento serial para a transferência de dados, que transfere um bit por vez a uma freqüência máxima de 20 MHz. Em teoria, os cartões MMC poderiam transferir a até 2.5 MB/s, mas a maioria dos cartões ficam muito longe dessa marca. Os cartões mais antigos utilizam um modo de transferência ainda mais lento, limitado a 400 KB/s.
Como não existe praticamente nenhuma diferença de custo entre produzir um cartão MMC ou SD, os fabricantes migraram rapidamente para o padrão mais rápido, fazendo com que o MMC entrasse em desuso. Mais recentemente foram lançados os padrões RS-MMC, MMC Plus e SecureMMC, versões atualizadas do padrão MMC, que visam reconquistar seu lugar no mercado.
Chegamos então aos dois padrões que sobreviveram à guerra: o SD, que é o padrão "parcialmente aberto", apoiado pela grande maioria dos fabricantes e o Memory Stick, o padrão proprietário da Sony.

Memory Stick
: Embora tenha conseguido atingir uma sobrevida surpreendente, o Memory Stick ficou restrito aos produtos da Sony e por isso seu futuro é incerto. Além do padrão original, existem também os formatos Memory Stick Duo, Pro, Pro Duo, Micro e Pro-HG.
Tanto o padrão original quanto o Memory Stick Duo estão limitados a 128 MB, por isso ficaram rapidamente obsoletos e são usados apenas por dispositivos antigos, fabricados até o início de 2003. A principal diferença entre os dois formatos é o tamanho reduzido dos cartões Memory Stick Duo, que são um pouco menores que os cartões SD.
Em seguida temos os cartões Memory Stick Pro e Memory Stick Pro Duo (ambos lançados em 2003), que substituem diretamente os dois padrões anteriores. Além do melhor desempenho, eles trouxeram um padrão atualizado de endereçamento, que permite o desenvolvimento de cartões de até 32 GB. Aqui temos uma foto mostrando os 4 formatos:





O Memory Stick Micro (ou M2) é um formato miniaturizado, desenvolvido para uso em celulares (mais especificamente nos Sony Ericsson), que mede apenas 1.5 x 1.2 cm. Os cartões normalmente são vendidos em conjunto com um adaptador, que permite usá-los em qualquer dispositivo ou leitor que use cartões Memory Stick Pro

                                                      Memory Stick Micro

Concluindo, temos o Memory Stick Pro-HG, que utiliza um novo barramento de dados, que transmite 8 bits por ciclos a uma freqüência de 60 MHz, o que permite uma taxa de transferência de até 60 MB/s (contra 20 MB/s dos padrões anteriores). Embora na prática a taxa de transferência dependa mais dos chips de memória Flash usados, o barramento mais rápido coloca os cartões Pro-HG em vantagem em relação aos cartões SD, já que eles estão limitados a um máximo de 20 MB/s pelo barramento usado.

Cartões SD
: Finalmente, temos os cartões SD (Secure Digital), que acabaram se tornando o formato dominante. Como o nome sugere, os cartões SD oferecem um sistema de proteção de conteúdo (o CPRM), que é implementado diretamente no chip controlador. Ele se destina a atender o lobby das gravadoras, oferecendo uma forma de "proteger" arquivos de áudio e outros tipos de conteúdo contra cópias não autorizadas. Os cartões Memory Stick implementam um sistema similar (o Magic Gate), mas felizmente ambos são pouco usados.
Existem três formatos de cartões SD. Além do formato padrão, temos os cartões miniSD e microSD, versões miniaturizadas, que são eletricamente compatíveis com o padrão original e podem ser encaixados num slot para cartões SD regulares usando um adaptador simples.
Os cartões SD suportam 3 modos de transferência. O 4 bits mode é o modo "padrão", onde o cartão transfere 4 bits por ciclo, a uma freqüência de até 50 MHz, resultando em taxas de transferência de até 25 MB/s (desde que os chips de memória usados acompanhem, naturalmente). O segundo é o 1 bit mode, onde é transferido um único bit por ciclo, a uma freqüência de no máximo 20 MHz. Este modo é usado para manter compatibilidade com os cartões MMC. É graças a ele que você pode usar cartões MMC em câmeras e leitores para cartões SD e vice-versa. Finalmente, existe o modo SPI (ainda mais lento), que é utilizado por algumas câmeras antigas e também em diversos tipos de dispositivos embarcados.
É por causa dos três modos de operação que um mesmo cartão SD pode ser acessado a velocidades bem diferentes de acordo com o dispositivo onde ele é usado. Muitas câmeras antigas que permitem acessar o conteúdo do cartão quando ligadas a uma porta USB transferem a velocidades muito baixas, muitas vezes inferiores a 300 KB/s. O driver "sdhci" (no Linux), que dá suporte aos leitores de cartões incluídos em notebooks, por exemplo, é (pelo menos até o Kernel 2.6.21) limitado ao modo SPI, por isso é bastante lento em relação ao driver Windows, que é capaz de utilizar o modo 4 bits. Ou seja, o leitor do seu notebook funciona, mas a uma velocidade muito baixa e com uma grande utilização do processador. 


Leitor de cartões SD suportado no Linux através do módulo sdhci

O modo SPI é o preferido pelos desenvolvedores de sistemas embarcados e drivers open-source, pois ele é muito simples e por isso pode ser emulado via software, sem a necessidade de usar um controlador adicional. No modo SPI 4 são usados 4 pinos do cartão: um para enviar o sinal de clock, outro para enviar comandos, o terceiro para selecionar qual chip dentro do cartão será acessado e o último para transferir dados, um bit de cada vez. Desde que você possa controlar o uso dos 4 pinos, é fácil escrever uma função ou driver para acessar o cartão.
O modo SPI é o mais lento, mas é suficiente para muitas aplicações. Imagine o caso de um sensor de temperatura que usa o cartão apenas para armazenar um log das variações, gravando alguns poucos bits por vez, por exemplo.

Controladores
: Com exceção dos antigos cartões SmartMedia e xD, que vimos há pouco, todos os cartões de memória Flash incluem um chip controlador, que é encarregado do gerenciamento dos endereços e todas as operações de leitura e gravação, além de executarem funções de manutenção diversas.
Os cartões atuais utilizam o sistema "wear levelling" para ampliar a vida útil das células. As células de memória Flash NAND suportam de 100.000 a 1.000.000 de operações de leitura ou gravação, de acordo com a qualidade dos chips. Pode parecer bastante a princípio, mas a maioria dos sistemas de arquivos (especialmente FAT e EXT) realizam atualizações freqüentes na tabela de endereçamento da partição. Se nada fosse feito a respeito, as gravações sucessivas iriam rapidamente inutilizar as células responsáveis pelo armazenamento da tabela, inutilizando o cartão. Graças ao wear levelling é feito uma espécie de "rodízio" dos endereços mais acessados entre as células do cartão, evitando a fadiga de alguns endereços isolados.
Outra função é remapear os endereços defeituosos, onde um setor de uma área reservada passa a ser usado em seu lugar. Isto é muito similar ao sistema utilizado nos HDs modernos, onde a controladora também é capaz de remapear os badblocks automaticamente.
Você pode então se perguntar como o controlador faz para descobrir os endereços defeituosos. A resposta é que, além dos dados e dos setores da área reservada, a memória armazena também alguns bytes adicionais (tipicamente 64 bytes adicionais para cada bloco de 2048 bytes), usados para guardar códigos ECC. Estes códigos permitem não apenas identificar, mas também corrigir erros simples nos dados gravados. Como o controlador não tem como descobrir exatamente em qual célula ocorreu o erro, normalmente todo o bloco de 2048 bytes é remapeado.
Grande parte dos cartões de memória Flash já saem de fábrica com alguns setores defeituosos remapeados (assim como os HDs). Isso permite que os fabricantes aproveitem módulos que de outra forma precisariam ser descartados, reduzindo o custo de forma considerável.
Até certo ponto, o controlador também é responsável pelas taxas de transferência suportadas pelo cartão, já que é ele quem determina os modos de acesso e as freqüências de clock suportadas. Mesmo que os chips de memória sejam suficientemente rápidos, a taxa de transferência máxima pode ser limitada pelo controlador. Por exemplo, muitos cartões microSD utilizam controladores limitados a 20 MHz, que são capazes de transferir a, no máximo, 10 MB/s, enquanto muitos dos novos já utilizam controladores capazes de operar a 50 MHz, como nos cartões SD regulares.
A velocidade dos cartões é comparada pelos fabricantes à velocidade dos drives de CD-ROM. Um cartão "133x" é um cartão que usa um controlador capaz de transferir a 20 MB/s, um "155x" é um cartão capaz de transferir a 25 MB/s e assim por diante. As taxas reais são normalmente mais baixas (sobretudo nas operações de gravação), pois ficam limitadas também à velocidade dos chips, por isso não leve o índice muito a sério, ele é apenas uma ferramenta de marketing. De qualquer forma, é conveniente evitar cartões que não fazem menção à velocidade de transferência, pois eles normalmente são limitados a 33x ou menos. Note que os cartões SDHC adotam um índice diferente, como veremos a seguir.

miniSD e microSD
: Embora pequenos em relação aos cartões CompactFlash e SmartMedia, os cartões SD ainda são grandes demais para algumas aplicações, sobretudo para uso em celulares e nas câmeras mais compactas. Para solucionar o problema foram criados dois formatos miniaturizados, o miniSD e o microSD, que são menores e mais finos.
O miniSD mede 2.15 x 2.0 cm, com apenas 1.4 mm de espessura. Embora os cartões ainda sejam um pouco mais caros que os SD padrão, o formato está ganhando popularidade rapidamente, usado no Nokia N800 e no E62, por exemplo. De uma forma geral, todos os aparelhos onde o cartão é instalado internamente (embaixo da bateria, por exemplo) estão passando a utilizá-lo.
O microSD é um formato ainda menor, concorrente do M2, destinado a celulares, MP3 players e outros dispositivos onde as dimensões reduzidas e o baixo consumo são importantes. Ele mede apenas 1.5 x 1.1 cm, com apenas 1 mm de espessura. Na maioria dos casos, o cartão acompanha um adaptador SD. Como os dois padrões são compatíveis eletricamente, o adaptador é apenas um dispositivo passivo, muito barato de se produzir:





Você pode se perguntar como é possível que os cartões microSD sejam tão compactos, já que qualquer cartão SD precisa de pelo menos dois chips (o chip de memória e o controlador) e num cartão microSD mal temos espaço para um. A resposta está no die-stacking, tecnologia que comentei há pouco. Num cartão microSD temos um ou mais chips de memória e o próprio controlador "empilhados", formando um único encapsulamento. Ele é instalado pelo fabricante numa placa de circuito que contém os contatos externos e em seguida selado dentro da cobertura externa. O mesmo se aplica aos cartões Memory Stick Micro, que possuem dimensões similares.
Não existe como desmontar um microSD e, mesmo que você quebre um no meio, não vai conseguir diferenciar os chips, pois eles são produzidos usando wafers muito finos (até 0.025 mm de espessura nos mais recentes) e juntados de forma muito precisa. Os primeiros cartões microSD de 4 GB foram produzidos usando nada menos do que 8 chips de 512 MB empilhados. É provável que no futuro seja possível utilizar um número ainda maior.

SD Duo: Este não é um padrão oficial, mas sim o nome "mercadológico" para cartões SD que podem ser ligados diretamente em uma porta USB, assumindo também a função de pendrive. Este padrão foi originalmente criado pela Sandisk e depois copiado por outros fabricantes.
Eles possuem uma dobradiça ou protetor removível, que esconde um conector USB:





O pulo do gato aqui é utilizar um único chip (similar ao usado nos cartões miniSD e microSD), que além da memória Flash inclui um controlador "dual", que além de ser um controlador SD, incorpora também as funções de controlador USB. Graças a isso, o fabricante pode colocar os contatos normais do cartão SD de um lado, e os contatos da porta USB do outro, criando um design muito engenhoso. Estes cartões acabam sendo o "supra-sumo" da portabilidade, pois você tem ao mesmo tempo um cartão SD e um pendrive, daí o "Duo".

SDHC
: Inicialmente, o padrão de cartões SD previa o desenvolvimento de cartões de até 2 GB, formatados por padrão em FAT16. Você pode reformatar o cartão em outros sistemas de arquivos, mas nesse caso a maior parte das câmeras e outros dispositivos deixam de conseguir acessá-lo, embora você ainda consiga acessar o cartão normalmente se conectá-lo a um PC usando um adaptador USB.
Quando o limite de 2 GB foi atingido, os fabricantes passaram a criar extensões para permitir a criação de cartões de 4 GB, usando hacks para modificar o sistema de endereçamento e passando a usar o sistema FAT32 (no lugar do FAT16) na formatação. Estes cartões de 4 GB "não-padronizados" são compatíveis com a maioria dos dispositivos antigos, mas você pode enfrentar problemas diversos de compatibilidade, já que eles não seguem o padrão.
Para colocar ordem na casa, foi criado o padrão SDHC (Secure Digital High Capacity), onde a tabela de endereçamento foi expandida e passou a ser oficialmente usado o sistema de arquivos FAT32. Todos os cartões que seguem o novo padrão carregam o logotipo "SDHC" (que permite diferenciá-los dos cartões de 4 GB "não-oficiais") e trazem um número de classe, que indica a taxa de transferência mínima em operações de escrita. Os cartões "Class 2" gravam a 2 MB/s, os "Class 4" a 4 MB/s, os "Class 6" a 6 MB/s e assim por diante. O mesmo se aplica também aos cartões miniSD e microSD. Note que a numeração não diz nada sobre a velocidade de leitura, mas ela tende a ser proporcionalmente maior. Veja um exemplo de cartão com o logotipo:





Identificando módulos de memória defeituosos


Apesar da complexidade, não é muito comum um processador vir com defeito de fábrica, geralmente eles são testados antes do encapsulamento e os que não funcionam são simplesmente descartados. O problema mais comum com relação a eles são os casos de superaquecimento, que podem ser resolvidos com a limpeza do cooler ou uma ventilação adequada.
Mas, não podemos dizer o mesmo dos módulos de memória, onde os defeitos são muito mais comuns e infelizmente mais difíceis de detectar. Um agravante é que existem muitos fabricantes diferentes de memórias, todos trabalhando com margens muito baixas. Como a maior parte dos usuários e integradores compra mais pelo preço, acaba levando pra casa módulos genéricos que muitas vezes não são adequadamente testados em fábrica.
A placa-mãe também pode ser responsável por vários erros, já que ela é a encarregada de transportar os dados dos módulos de memória até o processador. Se a placa-mãe corromper os dados pelo caminho você terá travamentos e outros sintomas semelhantes aos causados por um módulo de memória com defeito. Esses erros são cruéis, pois são muitas vezes difíceis de perceber. Eles muitas vezes são confundidos com problemas do sistema operacional.
Seja qual for a causa, erros de memória podem causar muita dor de cabeça, então a melhor forma de lidar com o problema é rodar um teste completo sempre que você montar um PC ou instalar um novo módulo de memória.
Existem inúmeros programas desse tipo, um dos melhores é o Memtest86, disponível no:
http://www.memtest86.com/
A grande vantagem do memtest86 sobre outros testes de memória é que além de pequeno, gratuito e de código aberto, ele é quase automático. Você precisa apenas gravar um CD ou disquete e dar boot para que o teste seja iniciado automaticamente. Ele fica num loop eterno, repetindo os testes e indicando os erros que encontrar até que você se sinta satisfeito.
Existem duas opções de download. O mais prático é baixar uma imagem ISO, que pode ser usada para fazer um CD bootável. O arquivo tem apenas 64 kb compactado e 1.6 MB depois de descompactado. No site você vai encontrar também os programas para gerar o disquete de boot no Windows e Linux. Tanto faz usar o CD ou o disquete, o programa é exatamente o mesmo.
É necessário dar boot diretamente no Memtest para que ele possa testar realmente toda a memória do sistema. Se ele rodasse como um programa sobre o Linux ou Windows, não teria como acessar áreas utilizadas pelo sistema e programas, e o teste não seria confiável.
O Memtest86 realiza um total de 9 testes. Os 5 primeiros são relativamente rápidos, mas os 4 testes finais são muito mais rigorosos, capazes de encontrar erros não detectados pelos testes iniciais, mas em compensação muito demorados. Os 8 testes são executados automaticamente, mas o nono (veja detalhes a seguir) precisa ser ativado manualmente, já que é muito demorado. O ideal é deixar o teste correndo em loop durante a madrugada e olhar os resultados no outro dia de manhã.
Se, por acaso, a tabela inicial do Memtest86 informar incorretamente a quantidade de memória, acesse a opção "3" (memory sizing) e a opção "3" (probe). Isso fará com que o Memtest86 detecte a memória, desprezando as informações do BIOS. Na tela principal, pressione a tecla 5 para ter um sumário com todos os erros encontrados em cada teste:

Basicamente é isto, não existe muita configuração a fazer. A alma do negócio é ter paciência e deixar ele fazer seu trabalho, se possível por tempo suficiente para realizar o teste longo.
O tempo necessário varia de acordo com o desempenho e principalmente com a quantidade de memória instalada. Dobrar a quantidade de memória dobra o tempo do teste. Usar um processador mais rápido tem pouca influência, pois o gargalo é a velocidade de acesso à memória, não o processamento.
O Memtest86 já vem pré-instalado em muitas distribuições, aparecendo como uma opção de boot no menu de boot. Você pode utilizar também o CD de uma versão recente do Knoppix ou do Kurumin, utilizando a opção "memtest" na tela de boot.
Vamos entender o que faz cada um dos testes:
Teste 0 (Address test, walking ones, no cache): Simplesmente testa o acesso a todos os endereços da memória, algo semelhante com o que o BIOS faz na contagem de memória durante o boot. Ele é o teste mais rápido e serve basicamente para checar a quantidade de memória disponível.
Teste 1 (Address test, own address): Este teste é semelhante ao 0, mas adota uma estratégia diferente, checando endereços e não apenas realizando uma contagem rápida. Isso permite detectar problemas de endereçamento no módulo. Outra diferença é que este teste é feito sem utilizar os caches do processador, para evitar que ele mascare defeitos nos módulos.
Teste 2 (Moving inversions, ones&zeros): Escreve bits 1 e depois bits 0 em todos os endereços da memória. Este algoritmo também utiliza os caches L1 e L2 do processador. É um teste rápido que identifica os erros mais grosseiros, onde algumas células do módulo estão realmente queimadas.
Teste 3 (Moving inversions, 8 bit pat): É aqui que os testes para detectar erros mais complexos começam. O terceiro teste escreve seqüências de dados de 8 bits, repetindo o teste 20 vezes com seqüências diferentes.
Teste 4 (Moving inversions, random pattern): Este teste é similar ao teste número 3, mas dessa vez usando uma seqüência randômica de acessos, que é repetida um total de 60 vezes. Parece um grande exagero, já que este teste é destinado a identificar os mesmos erros que o teste 3, mas é justamente essa "insistência" e uso de diversas seqüências diferentes de operações que torna o memtest tão confiável na detecção de erros, capaz de detectar erros raros ou transitórios, que não aparecem em outros testes.
Teste 5 (Block move, 64 moves): É um pouco mais rigoroso que o teste 4. Continua movendo dados de um endereço para outro da memória, mas agora são movidos blocos de 4 megabits de cada vez. Este teste é repetido 64 vezes.
Teste 6 (Moving inversions, 32 bit pat): Os dados gravados em cada bit de memória são lidos e movidos para o endereço adjacente. É mais ou menos uma combinação dos três testes anteriores, pois testa o endereçamento, leitura e escrita de dados. A operação é repetida 32 vezes no total, para testar todas as combinações possíveis.
Este teste detecta um tipo de erro muito comum que é a "contaminação" de endereços. Isso ocorre quando, por um defeito de fabricação, o isolamento elétrico entre duas ou mais células de memória fica muito fino, permitindo que os elétrons saltem de um para o outro.
Isso faz com que ao gravar um dos bits o outro também seja gravado com o mesmo valor. Esse tipo de problema pode ser bastante intermitente, acontecendo apenas quando o segundo bit estiver com um valor zero, ou apenas esporadicamente, daí a necessidade de tantas repetições.
Teste 7 (Random number sequence): Para eliminar qualquer dúvida, são agora escritas seqüências de números randômicos, preenchendo todos os endereços da memória. Os números são conferidos em pequenos blocos e o teste é repetido diversas vezes.
Teste 8 (Modulo 20, ones&zeros): Este teste é basicamente uma repetição do teste 7, mas agora utilizando um algoritmo diferente, chamado "Modulo-X", que elimina a possibilidade de qualquer defeito ter passado despercebido pelos testes anteriores por ter sido mascarado pelos caches L1 e L2 ou mesmo pelos registradores do processador.
Note que tanto o teste 7 quanto o 8 são bastante demorados e servem apenas para detectar erros extremamente raros, eliminando qualquer dúvida sobre a saúde dos módulos. Eles foram criados realmente como um exercício de perfeccionismo.
Teste 9 (Bit fade test, 90 min, 2 patterns): Este é um teste final, que permite detectar erros raros relacionados com os circuitos de refresh, ou soft-erros causados por fatores diversos, que alterem os dados armazenados.
No teste, todos os endereços são preenchidos usando uma seqüência de valores pre-definidos. O programa aguarda 90 minutos e verifica os dados gravados, anteriormente. Esses dados são produzidos usando seqüências matemáticas, de forma que o programa só precisa repetir as mesmas operações na hora de verificar, sem precisar guardar uma cópia de tudo que gravou em algum lugar.
Em seguida, a mesma seqüência é gravada novamente, mas desta vez com os dígitos invertidos (o que era 1 vira 0 e o que era 0 vira 1). O programa aguarda mais 90 minutos e checa novamente.
Este teste demora mais de três horas, por isso não é executado automaticamente junto com os outros 8. Pense nele como um último refúgio para os paranóicos.
Para executá-lo, pressione "C", depois "1" (Test Selection) e em seguida "3" (Select Test).
Na opção "Test Number [1-9]" pressione "9" e em seguida "0" (Continue).
Ao detectar um erro, a primeira providência é trocar o módulo de memória e refazer o teste. Em alguns casos o problema pode não ser no módulo, mas sim na placa-mãe. Em alguns casos mais raros pode ser até mesmo que tanto o módulo quanto a placa estejam bons, e o problema seja apenas algum tipo de incompatibilidade entre eles. Eu observei isso na Tyan Tiger MPX que testei em 2001. A placa só ficou completamente estável com o terceiro módulo de memória que testei, sendo que os dois primeiros não tinham defeitos e passaram no teste do memtest86 depois de instalados em outros micros.
Um dos motivos era que essa placa utiliza um valor CAS de 2.5 ciclos (valor fixo), uma configuração incomum para a época. Assim como ela, muitas outras placas utilizam configurações incomuns, que podem causar incompatibilidades com memórias de algumas marcas. Jamais jogue fora um módulo com erros antes de testá-lo em outra placa-mãe diferente, pois ele pode estar bom.
Experimente também baixar a freqüência de operação da memória, ou do FSB para testar o módulo em freqüências mais baixas que as nominais. Muitas vezes um módulo danificado por estática ou por variações nas tensões fornecidas pela fonte pode deixar de funcionar estavelmente na freqüência máxima, mas continuar suportando freqüências mais baixas.
Outra dica é limpar cuidadosamente o módulo, removendo a poeira acumulada e limpando os contatos usando uma borracha de vinil (as borrachas de escola, do tipo que não esfarela). Na falta de uma, você também pode usar uma nota de real (com exceção das de R$ 10, que são de plástico) em bom estado. O papel moeda é abrasivo e realmente limpa os contatos na medida certa.
Aqui temos um módulo de 512 MB danificado por estática, flagrado pelo teste. Veja que foram identificados diversos endereços defeituosos. A lista mostra apenas os primeiros erros, mas pressionando a tecla "C" e depois "4" (error summary), é possível ver o número total. Nesse caso, o módulo tinha nada menos do que 222 endereços defeituosos. Além de identificar os erros, o memtest mostra a partir de qual MB do módulo eles começam. Pelo screenshot, você pode ser que eles começam a partir do 433° MB:


No caso de módulos em que os erros aparecem logo nos primeiros endereços, não existe o que fazer, pois eles farão com que o sistema trave logo no início do boot. Módulos onde os defeitos se concentram no final (como esse do exemplo) ainda podem ser usados para testes, pois o sistema acessa sempre a memória a partir do começo, deixando os últimos endereços do módulo por último. Enquanto você estiver rodando aplicativos leves e o sistema não acessar os endereços defeituosos do módulo, tudo funciona normalmente.
No Linux é possível orientar o sistema a utilizar apenas o começo do módulo, ignorando os endereços a partir da onde começam os erros. Isso é feito passando a opção "mem=384M" (onde o "384" é a quantidade de memória que deve ser usada) para o Kernel na tela de boot.
Isso varia um pouco de distribuição para distribuição. No Knoppix você digitaria "knoppix mem=384M" na tela de boot, no Kurumin seria "kurumin mem=384M". No Ubuntu é preciso pressionar a tecla "F6" e em seguida adicionar o "mem=384M" (sem mexer nas demais opções da linha): 







No caso do Windows XP, é possível usar a opção "/maxmem=". Adicione a linha no arquivo "boot.ini", especificando a quantidade de memória que deve ser utilizada (em MB), como em "/maxmem=384". Esta alteração pode ser feita também através do msconfig, através da aba "Boot.ini > Opções Avançadas".
Depois de concluído o boot, você pode confirmar usando o comando "free", que reporta o uso de memória. Você verá que independentemente da capacidade real do módulo, o sistema usa a memória apenas até o MB especificado na opção. Essa dica permite aproveitar a parte "boa" do módulo em algum micro usado para aplicações leves, ao invés de ter que jogá-lo fora.
Não se esqueça de etiquetar os módulos defeituosos (ou o micro onde eles forem instalados), indicando a partir de qual MB foram identificados endereços defeituosos. Assim você evita de ter de executar o teste novamente cada vez que precisar reinstalar o sistema, ou instalar os módulos em outro micro.
Além do memtest86 e outros softwares, também existem testadores de memória dedicados, que executam uma seqüência de testes automatizados, que além de detectar defeitos, identificam as características do módulo, como a freqüência suportada, CAS latency e assim por diante. Estes testadores são caros e, para ser sincero, o teste não é tão confiável quanto a seqüência do memtest. A vantagem é que eles permitem testar um grande número de módulos em pouco tempo, de forma prática, por isso podem ser interessantes para distribuidores e lojas.
Duas das maiores empresas nesse segmento são a http://www.memorytest.com/ e a http://www.simmtester.com/, onde você pode se informar sobre os preços e os modelos disponíveis. 



Testador de memória






Limites no endereçamento da memória


Assim como no caso dos HDs, existiram diversos limites com relação ao endereçamento da memória RAM durante a história dos micros PCs, causados por limitações do sistema operacional, limitações do chipset e limitações dos processadores. Mesmo os processadores e sistemas operacionais de 64 bits possuem limites com relação à quantidade máxima de memória que pode ser endereçada, embora muito mais elevados.
As versões originais do Athlon 64 são capazes de endereçar até 1 terabyte de memória RAM (independentemente da placa-mãe usada) e este limite pode ser expandido no futuro. O grande problema são os processadores e os sistemas operacionais de 32 bits.
Tudo começou com o limite de 640 KB de memória do processador 8088, usado nos primeiros PCs. Na verdade, o 8088 utilizava um total de 20 bits para o endereçamento da memória, divididos em 16 bits "nativos", que permitiam endereçar páginas de 64 KB e mais 4 bits adicionais, que permitiam endereçar 16 páginas, totalizando 1 MB.
Por decisão da equipe de desenvolvimento, apenas os primeiros 640 KB (chamados de memória convencional) ficavam disponíveis para uso do sistema operacional e aplicativos. Os 384 KB restantes (chamados de memória extendida) eram usados para endereçar a memória presente em outros dispositivos, como o BIOS da placa-mãe e a memória da placa de vídeo.
Na época dos primeiros PCs, a memória RAM era muito cara, de forma que não era comum o uso de mais do que 256 KB, mas, mesmo que fosse utilizado 1 MB completo, apenas os primeiros 640 KB ficariam disponíveis. Os 384 KB adicionais podiam ser utilizados para fazer cache do BIOS e da memória da placa de vídeo (o que melhorava o desempenho), mas não para uso geral.
Para manter compatibilidade com os aplicativos antigos, mesmo os processadores atuais são capazes de operar em modo real, onde simulam o funcionamento de um 8088, acessando apenas os primeiros 640 KB de memória. É dentro deste limite que rodam o MS-DOS e aplicativos antigos. Quando o Windows, Linux ou qualquer sistema operacional é carregado, o processador passa para o modo protegido, onde é capaz de acessar toda a memória disponível.
Desde o 386, todos os processadores utilizam 32 bits para o endereçamento da memória, o que permite endereçar até 4 GB. Esse limite é chamado de VAS (Virtual Address Space) e indica justamente o total de memória que o sistema é capaz de endereçar, incluindo não apenas a memória RAM, mas também a memória da placa de vídeo e outros dispositivos. O problema reside justamente aí.
Imagine que você resolvesse montar um PC topo de linha, usando 4 GB de memória RAM e duas placas de vídeo GeForce 7950 GX2 em SLI. A 7950 GX2 possui nada menos do que 1 GB de memória RAM, de forma que duas placas totalizam 2 GB. Como a memória das placas de vídeo consomem espaço do Virtual Address Space, o sistema seria capaz de acessar apenas os primeiros 2 GB da memória (um pouco menos na prática, já que mais alguns blocos serão reservados a outros dispositivos), de forma que usar 4 GB acabam sendo um desperdício de dinheiro.
Isso ocorre não apenas ao utilizar um processador de 32 bits, mas também ao utilizar um processador de 64 bits em conjunto com um sistema operacional de 32 bits, incluindo o Windows XP e as versões de 32 bits do Vista.
De uma forma geral, não é recomendável utilizar mais do que 3 GB ao utilizar um sistema operacional de 32 bits, pois é justamente a área entre os 3 e 4 GB do Virtual Address Space que são utilizadas pelo processador para endereçar a memória de dispositivos diversos. Assim como dois corpos não podem ocupar o mesmo espaço ao mesmo tempo, dois dispositivos não podem compartilhar a mesma área de endereços, o que faz com que porções da memória RAM que invadam áreas reservadas a outros dispositivos simplesmente não sejam vistas pelo sistema.
Você pode verificar as áreas de memória reservadas através do gerenciador de dispositivos do Windows, usando a opção Exibir > Recursos por tipo > Memória:


Os endereços fornecidos aqui estão em hexa, mas você pode usar a própria calculadora do Windows para convertê-los em números decimais. No caso, por exemplo, tenho a placa de vídeo utilizando os endereços C8000000 a CFFFFFFF, que correspondem aos bytes de 3.355.443.200 a 3.489.660.927 e uma série de dispositivos a partir do "Recursos da placa-mãe" que ocupam praticamente todos os endereços do byte 3.758.096.384 ao 4.294.967.295 (que corresponde justamente ao final da área de 4 GB endereçada pelo sistema). Se instalasse uma placa 3D offboard, com 256 MB, ela ocuparia os bytes de 3.221.225.472 a 3.489.660.927, que correspondem justamente aos 256 MB da placa.
Se você se contentar em utilizar uma placa de vídeo low-end, pode ficar com até 3.5 GB de endereços disponíveis, dependendo do sistema operacional usado.
No caso das versões de 32 bits do Vista, por exemplo, o limite máximo (segundo o http://support.microsoft.com/kb/929605) é de 3.12 GB. Ou seja, na maioria dos casos, não vale a pena pagar por mais 4 GB de memória, já que apenas uma pequena parte do último GB seria utilizada. Melhor se contentar com 3 GB.
Mesmo ao utilizar um processador de 64 bits, combinado com um sistema operacional de 64 bits, um grande volume de endereços entre os 3 e 4 GB de memória continuam reservados, de forma a manter compatibilidade com os programas de 32 bits, fazendo com que, novamente, pelo menos 512 MB entre os 3 e 4 GB da memória não sejam usados. A vantagem nesse caso é que você pode instalar mais de 4 GB de memória. Com 8 GB, por exemplo, você ficaria com de 7 a 7.5 GB utilizáveis.
Algumas placas de 64 bits oferecem a opção "Memory Hole Remapping" (ou similar) no setup. Ao ativar esta opção, as áreas de memória reservadas aos dispositivos é movida para uma área mais alta do Virtual Address Space (que nos processadores de 64 bits é muito maior), liberando a maior parte da memória antes inacessível por causa deles.
Outras placas suportam o Memory Hoisting (da palavra "hoist", que significa levantar ou suspender), um recurso que segue outro princípio, deixando os endereços dos dispositivos onde estão e remapeando os trechos de memória subscritos por eles para áreas mais altas do espectro de endereços, permitindo que o sistema tenha acesso a elas.
Uma observação é que estas duas opções causam muitos problemas de compatibilidade com aplicativos, por isso você só deve utilizá-las caso realmente faça questão de ter acesso à toda a memória instalada.
Além das limitações relacionadas ao Virtual Address Space, existem outros limites de memória, impostos pelo chipset ou por limitações do sistema operacional usado.
A maioria dos chipsets antigos, para placas soquete 7, por exemplo, eram capazes de endereçar apenas 128 ou 256 MB de memória RAM. O chipset Intel i815, usado em uma grande parte das placas para processadores Pentium III e Celeron era capaz de endereçar apenas 512 MB, enquanto o 915GL (para o Pentium 4) era capaz de endereçar 2 GB. Até pouco tempo atrás, o suporte a 4 GB ou mais de memória estava restrito a alguns chipsets destinados a servidores.
O Windows 95/98/SE é capaz de endereçar até 512 MB de memória RAM. Programas como o cacheman permitem utilizar estas versões antigas do Windows em PCs com mais de 512 MB de RAM, mas o desempenho acaba sendo pior do que com apenas 512.
O Windows XP e as versões de 32 bits do Vista são capazes de endereçar 4 GB, de forma que o limite fica por conta do Virtual Address Space. O maior problema são as versões "populares" do Windows, onde o limite é artificialmente reduzido, de forma a restringir o uso do sistema aos PCs de baixo custo. O XP Starter possui um limite de 256 MB, enquanto o Vista Starter está limitado a 1 GB.
Nas versões de 64 bits do Vista, os limites são estendidos, mas ainda existem limitações. O Vista Home Basic está limitado a 8 GB, o Home Premium a 16 GB e as demais versões (Business, Enterprise e Ultimate) a 128 GB.
A memória swap não entra na conta, pois ela é acessada através de um componente especializado incluído no processador, chamado de MMU (Memory Management Unit) que permite justamente que dados armazenados na memória RAM física sejam movidos para a memória swap (que é na verdade um arquivo ou partição no HD), conforme necessário.
Graças ao MMU é possível complementar os 3 ou 3.5 GB de memória RAM física com uma quantidade indefinida de memória swap, limitada apenas ao máximo suportado pelo sistema operacional. A principal questão é que o uso da memória swap é muito limitado em um PC atual, já que ela é muito lenta.
Uma dúvida comum é com relação ao uso do PAE (Physical Address Extension), uma extensão para processadores de 32 bits, presente desde o Pentium Pro, que adiciona 4 bits adicionais ao endereçamento da memória, permitindo que o processador seja capaz de acessar até 16 páginas de 4 GB cada, totalizando 64 GB. Cada programa continua restrito a um máximo de 4 GB, mas o sistema pode alocar diferentes páginas para aplicativos diferentes, utilizando assim toda a memória disponível.
O PAE é muito usado em servidores, embora esteja sendo rapidamente substituído pelo uso de processadores e sistemas operacionais de 64 bits. Ele é suportado pelo Windows Server 2003 e pelo Windows 2000, onde pode ser ativado através da opção "/PAE" no arquivo boot.ini, mas não é uma solução viável para quem precisa usar mais do que 4 GB de memória em um desktop, devido a uma série de problemas relacionados a drivers.
O PAE apresenta endereços de 64 bits aos drivers, o que torna necessário que eles sejam modificados para utilizar o sistema. Como o uso do PAE sempre foi limitado a servidores, muitos dispositivos não possuem drivers compatíveis e nem sempre é fácil encontrar os disponíveis. Existem ainda problemas de compatibilidade com diversos aplicativos. Atualmente, é muito mais simples migrar para as versões de 64 bits do Vista (ou mesmo para o XP de 64 bits) do que passar a utilizar o PAE, de forma que é melhor não perder tempo com ele no caso dos desktops.
Outro problema fundamental do PAE é a questão do desempenho. O processador continua sendo capaz de acessar apenas 4 GB de memória por vez e precisa chavear continuamente entre as páginas disponíveis. Além de demorar um certo tempo, cada chaveamento faz com que os dados armazenados nos caches precisem ser completamente substituídos, o que prejudica de forma perceptível o desempenho. Ou seja, tentar usar o PAE em um desktop para acessar mais memória e assim melhorar o desempenho é simplesmente contra produtivo. :)
Uma observação importante é que todas as versões do Windows XP, a partir do SP2 tem o PAE desativado, justamente para evitar problemas de compatibilidade. Nele, a opção "/PAE" no boot.ini simplesmente não faz nada.
No caso do Linux, o modo de acesso à memória é escolhido durante a compilação do Kernel.
Ao utilizar um processador de 32 bits, o Linux oferece suporte nativo a até 4 GB de memória usando o modo normal de operação do processador e a até 64 GB usando o PAE. Ou seja, ele simplesmente acompanha o suporte disponível no hardware, sem nenhuma limitação adicional.
Para melhorar o desempenho do sistema em máquinas antigas, que utilizam 1 GB de memória ou menos, existe uma terceira opção, onde o Kernel endereça apenas 1 GB de memória, sendo que 896 MB ficam disponíveis para os aplicativos e o restante é reservado para uso do Kernel. Neste modo de operação, o comando "free" vai reportar que existem apenas 896 MB de memória disponível, mesmo que você possua 1 GB ou mais.
É possível escolher entre as três opções ao compilar o Kernel, na opção "Processor Type and Features > High Memory Support". Até por volta de 2005, muitas distribuições vinham com o suporte a apenas 1 GB ativado por padrão, mas atualmente a grande maioria utiliza a opção "4 GB". É possível mudar a opção ao recompilar o Kernel manualmente.
A desvantagem de ativar o suporte a 4 GB é que o sistema ficará um pouco mais lento em micros com menos de 1 GB de memória (justamente por isso existe a primeira opção). O suporte a 64 GB só pode ser ativado caso você esteja usando um processador com suporte ao PAE, além de uma placa-mãe compatível.
Naturalmente, tudo isso se aplica apenas ao usar uma distribuição com um Kernel compilado para processadores de 32 bits. Ao usar uma versão de 64 bits, o Kernel acessa toda a memória disponível, limitado apenas ao volume de memória suportado pelo chipset ou processador.
Voltando ao mundo Windows, existe mais uma limitação importante, que é o limite de 2 GB por aplicativo. Os 3, 3.12 ou 3.5 GB de memória que um sistema de 32 bits é capaz de endereçar é repartida entre todos os programas abertos, mas no caso do Windows, cada programa sozinho não pode usar mais do que 2 GB.
Isso acontece por que, assim como o sistema operacional, os programas de 32 bits endereçam a memória utilizando endereços de 32 bits e por isso são capazes de endereçar 4 GB de memória. No Windows, metade da faixa de endereços de cada programa é reservada para uso do kernel, sobretudo para a comunicação entre o sistema operacional e o aplicativo. Com isso, cada aplicativo fica com apenas metade da sua área de endereços disponível, o que limita seu uso de memória a 2 GB.
Isso vem se tornando uma limitação importante em alguns games e aplicativos pesados, que podem exceder este limite nos momentos de maior atividade. Pior, além de não acessarem toda a memória disponível, os aplicativos de 32 bits freqüentemente travam sem aviso ao romper a barreira dos 2 GB, exibindo alguma mensagem de erro genérica.
Este limite está profundamente enraizado no sistema, de forma que é quase impossível que ele venha a ser removido em futuras versões. Ele afeta tanto quem utiliza as versões de 32 bits do Windows (com mais de 2 GB de memória RAM instalada), quanto quem roda programas de 32 bits sobre as versões de 64 bits do Windows (neste caso o limite se aplica apenas aos aplicativos de 32 bits, naturalmente).
Uma forma de amenizar o problema, caso você esteja enfrentando problemas de travamento em algum game pesado, por exemplo, é modificar a divisão de endereços entre o aplicativo e o kernel.
No Windows XP é possível reservar 3 GB para os aplicativos através da opção "/3gb" no arquivo boot.ini. Entretanto, usá-la causa problemas de estabilidade em um número muito grande de programas, por isso ela não é necessariamente uma boa idéia. Além disso, apenas programas que explicitamente indicam que são capazes de acessar mais de 2 GB são autorizados pelo sistema a utilizar os endereços adicionais, o que reduz brutalmente o número de programas que são realmente capazes de se beneficiar do uso da opção.
No caso do Vista, é possível ajustar os valores de forma mais flexível através da opção "IncreaseUserVa" do BCDedit. Através dele você pode reservar, por exemplo, 2.2 ou 2.4 GB para os aplicativos. Usando valores mais baixos que os 3 GB do XP, você evita a maior parte dos problemas de estabilidade. De uma forma geral, funciona bem com a alocação de até 2.6 GB para os aplicativos. A partir daí você corre o risco de ver telas azuis.
Como você pode ver, o uso das opções permite apenas minimizar o problema. A única forma de se livrar dele completamente é rodar um sistema de 64 bits e usar apenas aplicativos de 64 bits sobre ele.

Outras tecnologias


Concluindo, temos aqui mais algumas tecnologias de memória que merecem ser citadas:

Memórias BEDO
: As memórias BEDO (Burst EDO) foram desenvolvidas no final da era Pentium 1 para concorrer com as memórias EDO. Elas utilizam uma espécie de pipeline para permitir acessos mais rápidos que as EDO. Em um Bus de 66 MHz, as memórias BEDO são capazes de funcionar com temporização de 5-1-1-1, quase 30% mais rápido que as memórias EDO convencionais.
No papel as memórias BEDO eram interessantes, mas elas nunca foram usadas em grande escala. A tecnologia era propriedade da Micron, que ansiava por cobrar royalties dos demais fabricantes, caso a tecnologia fosse adotada em grande escala. Os fabricantes de memória trabalham com margens de lucro incrivelmente apertadas, de forma que a palavra "royalties" gera calafrios. Ao invés de caírem na armadilha da Micron, eles se apressaram em adotar as memórias SDRAM, que além de serem um padrão aberto, eram tecnicamente superiores.

Memórias Rambus (RDRAM)
: Assim como as memórias BEDO, as RDRAM são um tipo proprietário de memória, que acabou não ganhando popularidade.
Os módulos de memórias Rambus são chamados de "Rambus Inline Memory Modules" ou RIMMs. Os módulos RIMM são bem semelhantes aos módulos DIMM, mas em geral eles vêm com uma proteção de metal sobre os chips de memória, que também serve para facilitar a dissipação de calor, já que os módulos RIMM aquecem bastante devido à alta freqüência de operação.
Uma particularidade era a necessidade de instalar módulos terminadores em todos os slots não populados da placa-mãe, para reduzir o nível de ruído eletromagnético. Na foto a seguir, por exemplo, temos uma placa com um único módulo RIMM instalado. Os outros dois são terminadores:






Em 1996 a Intel fechou um acordo com a Rambus Inc., uma então pequena empresa que desenvolvia um tipo de memória otimizada para sistemas que precisam de um largo barramento de dados com a memória. As memórias Rambus foram utilizadas no Nintendo 64 e no Playstation 2, e o plano era que elas fossem adotadas em larga escala nos PCs, com a ajuda da Intel. A Rambus Inc. receberia royalties dos fabricantes e a Intel ficaria com parte do bolo, na forma de incentivos e descontos.
A Intel introduziu o suporte às memórias Rambus a partir do chipset i820, ainda na época do Pentium III, e continuou tentando empurrar a tecnologia com o chipset i850, usado na primeira geração de placas para Pentium 4.
O problema era que o chipset i850 suportava somente memórias Rambus, sem opção de usar memórias SDRAM ou DDR (que eram novidade na época). Na época do lançamento do Pentium 4, um módulo RIMM de 64 MB custava US$ 99, enquanto um módulo de memória PC-133 da mesma capacidade custava apenas US$ 45. Isto significava gastar US$ 216 (ao comprar 256 MB) a mais, só de memória, sem contar a diferença de preço do processador Pentium 4 e da placa-mãe, que na época ainda eram consideravelmente mais caros.
As memórias Rambus utilizam um barramento de dados de apenas 16 bits de largura, em oposição aos 64 bits utilizados pelos módulos de memória SDRAM, suportando em compensação freqüências de barramento de até 400 MHz com duas transferências por ciclo (como o AGP 2x), o que na prática equivale a uma freqüência de 800 MHz. Essa organização lembra um pouco o barramento PCI Express, onde o uso de menos trilhas de dados permitem a operação a freqüências mais altas.
Trabalhando a 400 MHz com duas transferências por ciclo, sua velocidade máxima, as memórias Rambus permitem uma banda total de 1.6 gigabytes por segundo. O i850 era capaz de acessar dois módulos simultaneamente, proporcionando um barramento total de 3.2 GB/s. Essa é uma marca respeitável, comparável à de um módulo DDR-400, porém atingida em 2001.
O grande problema era que apesar da boa taxa de transferência, os módulos trabalhavam com tempos de latência muito altos. Isso prejudicava muito o desempenho, fazendo com que um Pentium III espetado numa placa-mãe i820 com um módulo RIMM acabasse sendo mais lento na maioria das aplicações que um PC simular equipado com memórias SDRAM PC-133. Mesmo em conjunto com o Pentium 4, que incluía uma série de otimizações (incluindo o uso de módulos RIMM em pares), as memórias Rambus falhavam em oferecer algum ganho tangível de performance em relação às memórias DDR.
Pouca gente comprou as versões iniciais do Pentium 4 e, quem se arriscou, acabou com um abacaxi nas mãos. Isto obrigou a Intel a modificar a plataforma, passando a utilizar memórias DDR padrão. A demora gerou um vácuo, que permitiu que a AMD aumentasse consideravelmente sua participação no mercado, já que contava com o Athlon Thunderbird, um processador mais barato e mais eficiente.
No final, as memórias DDR (seguidas pelas DDR2) ganharam a briga, tornando-se o padrão de memória dominante. Mais uma vez a indústria rejeitou um padrão proprietário de memória, em favor de um padrão aberto.

Registered DIMM
: Os módulos de memória que usamos nos micros domésticos são chamados de unbuffered. Eles usam um layout simples e eficiente, onde o controlador de memória tem acesso direto aos chips de memória, garantindo tempos de latência mais baixos.
Essa simplicidade tem um custo, que é uma limitação no número de chips por módulo e também no número de módulos que podem ser instalados na mesma placa-mãe. Salvo raras exceções, os módulos unbuffered possuem no máximo 16 chips de memória e é possível projetar placas-mãe com suporte para até 4 módulos.
Isso não é um problema nos desktops, onde normalmente não precisamos de mais do que 2 ou 4 GB de RAM, mas é uma grave limitação nos servidores, onde é comum o uso de mais memória.
Os módulos registered incluem chips adicionais (registradores) que funcionam como uma interface adicional entre o controlador e os chips. Eles permitem que o controlador suporte um número maior de módulos de memória e também que sejam usados módulos com mais chips, permitindo a instalação de quantidades muito maiores de memória. Muitas placas para servidores incluem 8 slots de memória, e existem módulos registered com 32 ou até mesmo 48 chips (sem contar os chips adicionais no caso dos módulos com ECC). É fácil reconhecer os módulos registered, devido à presença dos chips adicionais:



A desvantagem é que o uso dos registradores retarda a transmissão dos sinais, aumentando a latência e conseqüentemente reduzindo o desempenho dos módulos. A maioria das placas com suporte a módulos registered não suporta módulos unbuffered, de forma que seu uso não é uma opção. Também não é possível usar módulos registered, muito menos misturá-los com módulos unbuffered nas placas para desktop que não os suportam.
Os suporte a módulos registered está disponível apenas em placas-mãe destinadas a servidores e workstations, onde a possibilidade de usar mais memória supera as desvantagens. É possível encontrar tanto módulos de memória SDRAM quanto módulos DDR e DDR2 em versão registered. Por utilizarem componentes adicionais e serem produzidos em pequena quantidade, eles normalmente custam o dobro do preço dos módulos unbuffered, de forma que você só deve considerar seu uso quando realmente necessário.

MRAM
: As memórias MRAM (Magnetoresistive RAM) utilizam células magnéticas para armazenar dados, ao invés de células que armazenam eletricidade, como nas memórias DRAM, SRAM ou Flash. O layout básico lembra um pouco um módulo de memória DRAM, onde temos um transístor para cada bit de dados. A grande diferença é que, no lugar de um capacitor, é usada uma célula magnética, que pode ser gravada e lida usando eletricidade e conserva seus dados por longos períodos (assim como nos HDs) sem precisar de refresh ou alimentação elétrica.
As memórias MRAM são quase tão rápidas quanto as memórias SRAM, consomem menos energia e suportam um número quase ilimitado de ciclos de leitura e gravação, ao contrário das memórias Flash. Elas são uma espécie de "Santo Graal" da informática, uma tecnologia que, se fosse suficientemente barata, poderia vir a substituir, com vantagens, a maioria dos demais tipos de memórias.
O problema é que as memórias MRAM são difíceis de fabricar e até o momento nenhum fabricante foi capaz de produzir chips com densidades similares à memória RAM ou Flash.
Embora se fale nas memórias MRAM desde a década de 90, os primeiros chips disponíveis comercialmente foram produzidos apenas em 2006 (pela Freescale).
O ponto positivo é que os chips trabalhavam com tempo de acesso de apenas 35 ms, tanto para leitura quanto para gravação, o que bate de longe os chips de memória Flash e rivaliza com os chips de memória SRAM usados em palmtops e no cache de HDs, oferecendo a vantagem de não perderem os dados armazenados e não precisarem de alimentação elétrica. O problema é que armazenavam apenas 4 megabits (512 KB) e custavam US$ 25 cada.




                                                      Chip de memória MRAM


Estes chips foram produzidos em pequena escala, usando técnicas obsoletas de produção, por isso o preço e a densidade atingida tendem a melhorar conforme a tecnologia avance e os chips passem a ser produzidos em maior escala. Diversas empresas, entre elas a IBM e a Samsung, têm investido no desenvolvimento de memórias MRAM, por isso devemos ter progressos nos próximos anos.
De início, o concorrente das memórias MRAM são justamente os chips de memória SRAM, que são o tipo mais rápido e caro de memória em uso atualmente. As aplicações são óbvias: HDs com caches que não perdem os dados quando o micro é desligado no botão, além de palmtops e celulares menores e com uma maior autonomia de energia.
A longo prazo, pode ser que as memórias MRAM passem a ser usadas em PCs, substituindo a memória RAM. Um PC que utilizasse memórias MRAM como memória principal poderia manter o estado anterior depois de desligado, sem precisar de um novo processo de boot. Não haveria mais problema de perda de dados por causa de desligamentos incorretos, pois ao ligar o PC novamente, tudo estaria como antes.
A partir daí, quem sabe, novas técnicas de produção permitam que passem a concorrer com as memórias Flash, mas por enquanto, isso ainda é exercício de futurologia. A menos que alguma grande revolução aconteça, as memórias MRAM devem demorar pelo menos mais 4 ou 5 anos para se tornarem competitivas com as memórias SRAM e pelo menos uma década para começarem a substituir as memórias DRAM em alguns nichos.

Paridade e ECC
: Por melhor que seja a qualidade, todos os tipos de memória são passíveis de erros, que podem ser causados por inúmeros fatores, desde variações na tensão da tomada que não são completamente absorvidos pela fonte de alimentação, estática, diversos tipos de interferências eletromagnéticas e, por incrível que possa parecer, até mesmo raios cósmicos, que num PC doméstico causam um soft-error em média a cada poucos meses:
http://www-1.ibm.com/servers/eserver/pseries/campaigns/chipkill.pdf
Ao contrário dos "hard-errors", que são danos físicos nos módulos de memória, causados por eletricidade estática ou outros tipos de descargas, os soft-erros são erros momentâneos, onde um ou alguns poucos bits são alterados, sem que os chips de memória sejam danificados.
Eles podem causar os mais diversos efeitos colaterais, como travamentos de programas, pequenos danos em arquivos salvos e assim por diante. Num desktop eles não costumam ser catastróficos, mas podem causar efeitos sérios em sistemas que manipulam informações sensíveis, como no caso dos bancos, por exemplo, onde um soft-error poderia mudar o saldo da sua conta bancária. ;)
Para aumentar o grau de confiabilidade dos sistemas, foram criados métodos de diagnóstico e correção de erros. Tudo começou com os sistemas de paridade, usados em muitos módulos de 30 e 72 vias.
A paridade é um método mais antigo, que somente é capaz de identificar alterações nos dados depositados nas memórias, sem condições de fazer qualquer tipo de correção. A paridade consiste na adição de mais um bit para cada byte de memória, que passa a ter 9 bits, tendo o último a função de diagnosticar alterações nos dados.
A operação de checagem dos dados na paridade é bem simples: são contados o número de bits "1" de cada byte. Se o número for par, o bit de paridade assume o valor "1" e caso seja ímpar, o 9º bit assume o valor "0". Quando requisitados pelo processador, os dados são checados pelo circuito de paridade que verifica se o número de bits "1" corresponde ao depositado no 9º bit.
Caso seja constatada alteração nos dados, ele envia ao processador uma mensagem de erro. Claro que esse método não é 100% eficaz, pois não é capaz de detectar a alteração de um número de bits que mantenha a paridade. Caso, por exemplo, dois bits zero retornassem alterados para bits um, o circuito de paridade não notaria a alteração nos dados. Felizmente, a possibilidade da alteração de dois ou mais bits ao mesmo tempo é remota. 

O uso da paridade não torna o computador mais lento, pois os circuitos responsáveis pela checagem dos dados são independentes do restante do sistema. Seu único efeito colateral é o encarecimento dos módulos de memória, que em vez de 8 ou 16 chips, passam a ter 9 ou 18, tornando-se pelo menos 12% mais caros.
Além do aumento no custo, o grande problema da paridade é que ela apenas permite identificar erros, mas sem corrigi-los. Isso acaba fazendo com que ela tenha pouca utilidade, pois ao receber um erro suas únicas opções são ignorá-lo, ou parar tudo e reiniciar o micro. Conforme os módulos de memória foram tornando-se mais confiáveis, os módulos com paridade entraram em desuso.
Em seguida temos o ECC, o sistema atual, que permite não apenas identificar, mas também corrigir erros simples. O ECC acaba sendo a solução perfeita, pois permite que um servidor continue funcionando, sem interrupções e de forma confiável, mesmo com um grande número de soft-errors, causados por fatores diversos.
O número de bits necessários para implementar o ECC decresce conforme aumenta a largura do barramento usado pelo módulo. Em um módulo de 32 bits (como os antigos módulos de 72 vias), são necessários 7 bits adicionais para cada 32 bits de memória, mas nos módulos DIMM de 64 bits atuais, são necessários apenas 8 bits para cada 64 bits de memória, ou seja, o mesmo que seria necessário para usar paridade.
Os módulos DIMM com ECC são fáceis de identificar, pois eles possuem 5, 9 ou 18 chips, em vez de 4, 8 ou 16. O uso de ECC é mais comum em módulos registered, que são específicos para servidores, mas também é possível encontrar alguns módulos unbuffered com ECC:

Módulo com ECC (note que o módulo possui 9 chips)

Identificando módulos de memória: Como vimos, todos os chips de memória trazem estampado um número de identificação. Este número pode ser utilizado para descobrir detalhes sobre o módulo, quem o produziu, qual é seu tempo de acesso, qual é freqüência máxima suportada, etc.
Os fabricantes disponibilizam tabelas com as especificações de seus produtos, mas existe um site que concentra a maioria das informações disponíveis, funcionando como um mecanismo de busca. Esse site, o IC Master, disponível no endereço http://www.icmaster.com, é extremamente útil, pois permite identificar não apenas módulos de memória, mas também outros tipos de circuitos integrados apenas com base no número de identificação. O serviço é gratuito, você precisará apenas se cadastrar.