Sítio do Piropo

B. Piropo

< Coluna em Fórum PCs >
Volte
03/09/2007

< Computadores XXXVIII: >
<
Hierarquia da memória >


Neste ponto já temos uma noção razoável sobre as características fundamentais dos sistemas de memória dos computadores. Tais características são genéricas e, em sua maior parte, aplicam-se a todo tipo de memória, fabricada com qualquer tecnologia. Explicando melhor: não importa como a memória é fabricada ou onde se localiza, ela poderá ser permanente ou não permanente, terá um determinado tempo de acesso e, a cada acesso, lerá ou escreverá um conjunto de bits correspondente à sua unidade de transferência. Ou seja: o que vimos até agora são características fundamentais ou conceituais apresentadas por todo e qualquer tipo de memória. E para refrescar a (nossa) memória, vejamos um resumo delas.

CARACTERÍSTICAS FUNDAMENTAIS DOS SISTEMAS DE MEMÓRIA

Localização

  • No processador (registradores, cache interno)

  • Na placa-mãe (memória interna ou principal, cache externo)

  • Fora da placa-mãe (memória externa, secundária ou armazenamento de massa)

Unidade de transferência

  • Bloco (memória secundária)

  • Palavra ou “linha” da estrutura da memória (memória principal)

Método de acesso

  • Seqüencial (fitas)

  • Direto (discos magnéticos e óticos)

  • Aleatório (memória RAM)

  • Mapeado (memória cache)

Capacidade

  • Número máximo de bytes (ou de palavras) que pode armazenar

Desempenho

  • Tempo de acesso

  • Duração do ciclo de memória

  • Taxa de transferência de dados

Tipo Físico

  • De semicondutores

  • De meio magnético

  • De meio ótico

Características físicas

  • Permanentes / Não permanentes

  • Voláteis / Não voláteis

ORGANIZAÇÃO DAS MEMÓRIAS

A discussão das características acima listadas se limitou a abordar “como” as memórias se classificam. Em nenhum ponto se discutiu o “porquê” da existência de tantas variedades de memórias com características tão diferentes. Mas, evidentemente, há de existir uma razão para isto. Pelo menos enquanto não houver um tipo de memória “ideal”, ou “universal” que possa ser utilizada em toda e qualquer situação teremos que conviver com a grande multiplicidade de tipos de memória.

Então vamos pensar um pouco e imaginar como seria essa memória ideal caso existisse. Que características ela deveria apresentar?

Algumas destas características poderiam ser ou não desejáveis dependendo das circunstâncias e do tipo de utilização. Por exemplo: a memória externa deve necessariamente ser do tipo não volátil, pois não teria sentido usar uma memória volátil para tal fim (o que exigiria manter o equipamento permanentemente energizado e implicaria a perda total dos dados armazenados na memória de massa caso o fornecimento de energia fosse interrompido mesmo que por acidente). Mas será que haveria interesse em que a memória interna, ou principal, fosse não volátil? Certamente os especialistas em segurança ficariam horrorizados só em imaginar que o próximo usuário que ligasse a máquina viesse a encontrar sua memória interna carregada com todos os dados e programas utilizados pelo usuário anterior. Mesmo porque, quando isto é necessário, sempre se pode apelar para o recurso da “hibernação” que consiste em efetuar um “instantâneo” do conteúdo da memória principal, volátil, e armazená-lo na memória secundária, não volátil, para reconstituir a situação da máquina recarregando-o na memória principal quando a máquina for religada (recurso muito usado nos computadores portáteis tipo “notebook”). Mas a hibernação é o tipo do recurso que só é conveniente quando o usuário precisar dele e estiver consciente de sua adoção. Portanto, até mesmo a memória “ideal” deveria apresentar duas versões, uma volátil, para uso interno, outra não volátil, para armazenamento de massa.

Então quais seriam as características universalmente desejáveis, aquelas que todo o tipo de memória deveria apresentar? Como deveria se comportar uma memória “ideal” que pudesse ser usada em toda e qualquer aplicação?

Bem, há três características altamente desejáveis para qualquer tipo de memória, seja qual for o fim para o qual é usada. Estas características são:

  • Capacidade: quanto maior, melhor;

  • Rapidez: quanto mais rápida, melhor;

  • Custo: quanto menor, melhor.

A memória “ideal”, ou “universal”, aquela que poderia ser usada para todo e qualquer fim, deveria portanto ter grande capacidade de armazenamento para armazenar grande quantidade de dados, pequeno tempo de acesso para melhorar o desempenho e baixo custo para atender às necessidades de todos os usuários.

Infelizmente estas três características, até o momento, têm se mostrado incompatíveis. Os diferentes tipos de memória disponíveis teimam em apresentar um custo unitário (custo por byte armazenado) maior quando seu tempo de acesso se reduz, uma capacidade menor quando o custo baixa e um tempo de acesso maior quando a capacidade cresce. Isso sem mencionar um quarto fator igualmente importante: a freqüência com que o conteúdo da memória é acessado (por exemplo: a memória RAM, ou interna, é acessada com muito maior freqüência que a memória externa, cujos acessos são feitos apenas quando se necessita ler ou escrever um arquivo de dados ou programa).

Temos então um dilema: queremos memórias grandes E rápidas E baratas e somente nos são oferecidas memórias grandes OU rápidas OU baratas.

A solução é apelar para um sistema hierárquico que classifica as memórias levando em conta sua capacidade, desempenho e custo no qual cada tipo de memória é usado para uma determinada função. Numa classificação assim, quanto mais se chega junto ao topo da hierarquia, mais rápidas serão as memórias, porém mais caras e de menor capacidade, ideais para serem usadas nas memórias acessadas mais freqüentemente. E quanto mais nos aproximamos da base teremos memórias mais baratas e de maior capacidade, porém mais lentas, que podem ser adotadas nas utilizações que exijam menor freqüência de acesso.

E o mais interessante é que a chave para classificar e escolher o tipo de memória mais aconselhável para uma dada utilização é justamente aquele quarto fator, aparentemente menos importante: a freqüência de acesso. Senão vejamos.

HIERARQUIA DAS MEMÓRIAS

Pense um pouco e responda: dentre todos os tipos de memória existentes em um sistema de computadores, qual deles é acessado com maior freqüência? Onde estão localizadas as posições de memória que são lidas ou escritas a cada instrução, a cada operação interna, a cada ciclo do relógio interno (“clock”) do processador?

A resposta é fácil: são as posições de memória internas do próprio processador, aquelas cuja importância é tão grande que não são identificadas por endereços, mas sim por nomes: os registradores internos (veja a coluna “XVI: Componentes da UCP”).

Registradores devem ser obrigatoriamente rápidos, já que seu tempo de acesso se reflete diretamente no desempenho global do computador. E precisarão ser rápidos não importa o preço (que normalmente é alto, já que fazem parte do processo de fabricação dos processadores) e a capacidade (que normalmente é pequena já que um número demasiadamente grande de registradores tornaria a arquitetura interna do processador excessivamente complexa). Portanto os registradores devem se situar no topo da hierarquia da memória: em conseqüência de sua maior freqüência de acesso, serão as memórias mais rápidas mesmo que sejam mais caras e de menor capacidade.

E na extremidade oposta, na base da hierarquia, que tipo de memória teremos?

Bem, ainda empregando como critério chave a freqüência de acesso, será aquela memória que exigir acessos menos freqüentes. E a menor freqüência possível de acessos à memória é zero. Repetindo: zero, nenhum acesso. Seria então uma memória cujo conteúdo jamais se pretenda acessar ao longo do tempo.

Mas por que cargas d’água alguém se daria ao trabalho de armazenar em um dispositivo de memória dados que nunca espera acessar? Será que os sistemas de memória de nossos computadores comportam alguma memória como esta? Trocando em miúdos: será que temos, em nossas máquinas, um tipo de memória onde armazenamos dados regular e diligentemente, nos damos ao trabalho de verificar se foram, de fato, corretamente gravados mas, apesar de tudo isto, não pretendemos jamais acessá-los?

Existe isso?

Sim, existe.

E é de importância fundamental.

Ainda não sabe qual é e quer uma dica? Presumindo que você tenha um automóvel, diga-me lá: ele dispõe de algum dispositivo ou acessório que, apesar de ser obrigatório, espera-se que jamais venha a ser usado? Claro que sim. Afinal, com que freqüência você deseja usar o extintor de incêndio de seu veículo?

Sim, a chave da questão reside na palavra “segurança”. Todos temos (eu vou apostar que você também tem, mesmo sabendo que o risco de perder a aposta é alto) o hábito de efetuar regularmente cópias de segurança (ou “back up”) de nossos discos rígidos. Efetuamos as cópias, verificamos se os dados foram copiados corretamente, as armazenamos em lugar seguro, de preferência distante do computador e, não obstante, não temos o menor desejo de acessá-las. Muito pelo contrário: a freqüência desejável de acesso a cópias de segurança é nula. Zero. Nada. Néris. Nerusca de pitibiribas.

E nem por isso deixamos de fazê-las.

Portanto existe, sim, um tipo de memória cuja freqüência esperada de acesso é nula. São os meios de armazenamento usados para guardar cópias de segurança (tradicionalmente, fitas magnéticas). E que deverão portanto se situar na base da pirâmide hierárquica.

E o que haverá entre elas? Como se disporão os diferentes tipos de memória situados entre os rápidos, poucos e caros registradores e as grandes, lentas porém baratas fitas magnéticas para cópias de segurança?

Figura 1: Hierarquia da memória.

A Figura 1 mostra esquematicamente, usando uma pirâmide como metáfora, o aspecto daquilo que poderíamos chamar de “hierarquia da memória”, onde ao caminhar para o topo o tempo de acesso e a capacidade diminuem enquanto o custo sobe e ao nos movermos no sentido da base a capacidade e o tempo de acesso aumentam enquanto o custo cai (sempre lembrando que memórias situadas junto ao topo são destinadas às utilizações que exigem acessos mais freqüentes, freqüência esta que vai se reduzindo à medida que nos movemos para a base).

O primeiro ponto que se pode observar é que a pirâmide pode, grosseiramente, ser subdividida em três seções. A seção próxima ao topo inclui dispositivos usados nas memórias internas ou primárias, a seção intermediária engloba dispositivos usados nos dispositivos de memória externa ou secundária e a terceira, junto à base, se restringe a dispositivos utilizados para armazenar cópias de segurança.

Os três tipos de memória que formam a seção superior, registradores, memória cache e memória RAM, utilizam a mesma técnica de fabricação já que são todos memórias voláteis de semicondutores.

Os registradores integram os próprios processadores e são fabricados juntamente com eles, fazendo parte da mesma “pastilha” de silício. São memórias extremamente rápidas, cujas células são constituídas por combinações de transistores e que funcionam na mesma cadência (ou “freqüência de operação”) do próprio microprocessador.

Memórias cache são trechos de memória rápida interpostos entre um dispositivo de memória mais lento e o dispositivo que solicita a leitura ou escrita (por exemplo: entre a memória RAM e o microprocessador; ou entre o disco magnético e a memória RAM) cujos detalhes serão discutidos adiante. O tempo de acesso depende do “nível” do cache, que por sua vez é função de sua localização. As memórias cache mais rápidas, ou “de nível 1” (cache interno ou cache L1, de “Level 1”), situam-se no interior do processador (como os registradores) e operam na mesma cadência que ele. Memórias de nível intermediário, ou nível 2 (cache L2) situam-se entre o processador e o barramento frontal e funcionam com uma freqüência de operação maior que a deste barramento porém menor que a do processador. Finalmente, memórias cache de nível 3 (cache externo ou cache L3) situam-se no próprio barramento frontal e operam na mesma freqüência que este barramento (muito comuns nos tempos das memórias RAM tipo EDO ou FPM, atualmente memórias cache L3 caíram praticamente em desuso). Todos eles são dispositivos de semicondutores mais rápidos que os usados para fabricar os módulos de memória RAM. Já o chamado “cache de disco”, situado entre o disco magnético e a memória RAM (em geral no controlador do próprio disco magnético) pode ser constituído pelo mesmo tipo de memória usado para a memória RAM. Se você achou tudo isto um tanto complicado, tenha um pouco de paciência que o assunto ficará mais claro quando abordarmos o tema “memória cache”.

Finalmente, as memórias RAM são memórias de semicondutores usadas predominantemente para constituir a memória principal dos computadores. Elas se comunicam diretamente com a Unidade Central de Processamento (UCP) através dos circuitos controladores da memória e do barramento frontal, são sempre memórias de semicondutores e podem ser de diferentes tipos (memórias DRAM, SDRAM e DDR; também neste caso as coisas ficarão mais claras quando discutirmos memória primária).

A seção intermediária da pirâmide é composta por dispositivos que integram a chamada memória secundária e, portanto, são essencialmente do tipo não volátil. Até o advento da memória do tipo “Flash”, uma memória de semicondutores relativamente rápida e não volátil, não havia neste grupo nenhum dispositivo de semicondutores. Mas as coisas estão mudando rapidamente especialmente no que toca ao aumento da capacidade e redução do custo de fabricação das memórias flash.

As memórias tipo “flash” foram os primeiros dispositivos de memória secundária constituídos por memória não volátil de semicondutores empregados extensamente como memória secundária ou externa. Seu uso disseminou-se rapidamente e não somente praticamente liquidou com os discos magnéticos flexíveis como substituiu os dispositivos de memória não voláteis ou permanentes usados para complementar a memória principal com código que não pode ser perdido ao se desligar a máquina (memórias tipo ROM, PROM, EPROM e EEPROM que praticamente desapareceram dos computadores modernos em favor das memórias flash mas que serão mencionadas adiante quando discutirmos memórias não voláteis de semicondutores). Memórias flash são rápidas, não consomem energia quando não em uso e têm se tornado cada vez mais baratas (veja coluna anterior). Seu uso vem se disseminando rapidamente não apenas como memória auxiliar em dispositivos portáteis tipo micros de mão (“handheld computers”), em reprodutores de música em formato MP3 e em câmaras digitais, como também nos dispositivos denominados “key drives”, “pen drives” ou “thumb drives” que são usados amplamente como memória secundária móvel, o que levou os discos flexíveis de meio magnético praticamente à obsolescência.

Discos magnéticos são o dispositivo clássico de armazenamento secundário. Os pioneiros, feitos de material flexível revestido com uma superfície magnetizável, conhecidos como “disquetes” ou “discos flexíveis”, foram durante muitos anos o dispositivo típico para memória móvel de pequena capacidade e hoje em dia estão desaparecendo em favor dos “key drives”. Já os discos fixos, ou rígidos, continuam mantendo a liderança como meio de armazenamento secundário. Recentes avanços na tecnologia de leitura e gravação nesses meios (a chamada “gravação perpendicular”) aumentaram significativamente a densidade de armazenamento (quantidade de bytes armazenados na unidade de superfície), o que contribuiu não apenas para reduzir o tamanho físico das unidades como também para baixar o custo unitário de armazenamento, portanto ainda se espera uma sobrevida razoável para este tipo de dispositivo. São bastante mais rápidos que os discos óticos e, originalmente, eram de menor capacidade.

Hoje são encontrados facilmente no mercado discos magnéticos de capacidades muito maiores que discos óticos (o que implica uma exceção à regra geral que afirma que “quanto maior a capacidade, mais lenta é a memória”). Mas também no campo do armazenamento em meios óticos a tecnologia tem evoluído rapidamente e novos tipos de discos óticos como os DVDs de camadas múltiplas, alta densidade e raio luminoso de menor comprimento de onda (“blue ray”) estão surgindo no mercado e talvez revertam esta tendência.

E chegamos finalmente à base da pirâmide, a seção onde se situa a memória mais lenta, de maior capacidade, menor custo e menor freqüência de acessos. Ela é preenchida praticamente apenas pelas fitas magnéticas de grande capacidade utilizadas para armazenamento de cópias de segurança e sobre elas não há muito o que dizer.

A ESCOLHA DA MEMÓRIA CERTA

Como vimos, pelo menos enquanto não desenvolverem a “memória universal”, de capacidade ilimitada, rapidez vertiginosa e custo desprezível, teremos que conviver com diferentes tipos de memória distribuídos na hierarquia acima esquematizada (e que, convém lembrar, pode sofrer alterações significativas na medida que a tecnologia prosseguir sua inexorável evolução). Mas pelo menos temos uma variedade razoável de tipos à nossa disposição.

Então, que critério os fabricantes usam para escolher a memória a ser usada para cada necessidade?

Bem, começando pelos registradores e memória cache L1, situados no interior do próprio microprocessador: aqui, o que importa é a rapidez, diante da qual todos os demais fatores empalidecem. Rapidez de acesso a estas posições de memória é essencial porque dela depende em última análise o próprio desempenho global de todo o sistema de computação. Porém, considerando o elevadíssimo custo de memórias muito rápidas, é compreensível que a capacidade seja sacrificada. Portanto, registradores e cache L1 são memórias muito rápidas e proporcionalmente pequenas. O Itanium, processador de 64 bits topo de linha da Intel, líder do mercado de processadores para servidores, apresenta poucas centenas de registradores de 64 bits cada e um cache interno L1 que atinge a casa das dezenas de KB.

Já o cache L2, que do ponto de vista da arquitetura situa-se entre o microprocessador e o barramento frontal, precisa efetivamente ser muito rápido. Porém sua eficácia depende (como veremos ao discutirmos memória cache) da porcentagem de “acertos”, ou seja, do número de vezes em que uma cópia do conteúdo da posição de memória RAM desejada é encontrada em seu interior. Portanto, nesse caso, há que se favorecer também a capacidade (quanto maior o cache L2, maior a probabilidade de lá se encontrar o conteúdo procurado). Sua capacidade nos processadores modernos se situa na faixa das muitas centenas de KB às poucas dezenas de MB.

No que toca à memória RAM, memória interna ou primária, há que se fazer um cuidadoso balanço entre rapidez de acesso e capacidade de armazenamento. Como cada instrução do programa (ou dos programas) em execução está depositada na memória primária, assim como os dados que estão em processamento, a rapidez de acesso à memória RAM para recuperar estes dados é um dos fatores de influência mais importantes no que toca ao desempenho do sistema. Porém também a capacidade exerce influência semelhante, já que é importante que os dados estejam na MP, particularmente em sistemas modernos, multitarefa, capazes de executar diversos programas simultaneamente. Portanto, no que toca à escolher o tipo de memória RAM, deve-se buscar aquele que apresente menor tempo de acesso combinado com uma capacidade significativa. Elas são sempre memórias de semicondutores e a capacidade da MP nas máquinas modernas alcança alguns GB.

Chegamos agora à memória secundária. E quando se fala em memória secundária, pelo menos no estágio atual de desenvolvimento tecnológico, fala-se em meios magnéticos (e, em posição menos destacada, meios óticos). Isto porque neste campo o que importa é a capacidade e são estes dispositivos os que combinam uma capacidade suficiente para armazenamento secundário com um tempo de acesso decente – apesar de significativamente maior que o tempo de acesso às memórias de semicondutores.

Embora a capacidade exerça grande importância na escolha dos meios de armazenamento secundário, a definição do que seria uma capacidade “suficiente” para este fim é uma questão que permanece no terreno das controvérsias. Isso devido a uma curiosa propriedade dos dados e programas: seu comportamento se assemelha ao dos gases em ambiente fechado, ou seja, tendem a ocupar todo o espaço disponível não importa quão grande seja este espaço. Portanto, nunca pense que você tem demasiada capacidade de armazenamento nos seus discos rígidos: cedo ou tarde eles estarão completamente cheios, predominantemente de lixo. É claro que sempre se pode recuperar uma razoável fração da capacidade dos discos rígidos se livrando de pelo menos parte deste lixo. Mas logo você descobrirá que o trabalho que dará separar o joio do trigo simplesmente não compensa. E se conformará em manter todo aquele lixo digital em sua máquina, ampliando a capacidade dos discos rígidos para abrir mais espaço (provavelmente para mais lixo). Mas assim é a vida, e os discos rígidos dos computadores de mesa, que quando surgiram apresentavam capacidades de cinco a dez MB, hoje já estão perto da casa dos TB (TeraBytes, ou milhões de MB).

Restam os meios de armazenamento de cópias de segurança. Aqui, pelas razões que conhecemos, o tempo de acesso perde totalmente a importância face à capacidade. Isso porque de pouco adiantará dispor de um meio de armazenamento rápido para fazer uma cópia de segurança se a capacidade for insuficiente para armazenar todos os dados a serem copiados. Portanto, o principal fator aqui é a capacidade: ela deve ser suficiente para manter uma cópia completa (quando muito, comprimida, para reduzir o espaço necessário) de todos os dados a serem preservados.

E com isto terminamos a discussão das características genéricas das memórias. Poderemos então passar ao exame de cada um dos tipos mais importantes.

A partir da próxima coluna, naturalmente.

 

B. Piropo