<Direto ao Ponto 32> Memórias de computadores
- #Informática Básica
Artigos desta série: ( < ) Anterior | Índice | Seguinte ( > )
Olá, dev!
Este é mais um artigo da série DIRETO AO PONTO, que eu estou escrevendo para a DIO. Ele vai tratar das memórias usadas nos em computadores, desde as primeiras até as atuais.
Sumário
1. Introdução
2. Histórico
3. Tipos de memórias
4. Conceitos importantes
5. Considerações finais
6. Referências
1 – Introdução
Eu criei a série de artigos DIRETO AO PONTO com o objetivo de apresentar, de forma simples e direta, conhecimentos básicos da programação e de computação, principalmente, para os iniciantes.
Aqui, tratamos de temas como lógica de programação, linguagens, hardware dos computadores, história da computação e assuntos relacionados à plataforma da DIO, incluindo a escrita de artigos e desafios de código, por exemplo.
Neste artigo, será tratado o tema específico das memórias de computador.
Um dos blocos de construção dos computadores (ou de equipamentos digitais) são os circuitos sequenciais (flip-flops, registradores, memórias). No artigo anterior, já falamos dos flip-flops e de registradores.
Desde as primeiras máquinas de computar, mecânicas, a memória já era um componente imprescindível para a realização de cálculos e outras operações.
A memória de um computador tem a função básica de armazenar os programas, ou seja, a sequência de instruções a serem executadas e seus respectivos dados, se existentes, e ela é conhecida informalmente como RAM ou ROM. A memória funciona como uma espécie de mesa de trabalho, armazenando arquivos e programas em uso.
2 – Histórico
Segundo ISAACSON [1], desde as primeiras máquinas mecânicas de calcular, foram utilizadas diversas tecnologias para a implementação da funcionalidade de memória, onde eram armazenados os dados e valores temporários para serem usados nos cálculos intermediários.
Entre estas tecnologias, podemos destacar algumas:
· Relé eletromecânico – Peça de material magnético, que podia ser polarizada por uma carga elétrica, tendo um pino deslizante que abria ou fechava um circuito elétrico. Foram usadas por volta de 1940.
· Condensador elétrico – Atualmente chamado de capacitor, ele representava 1 bit de informação e mantinha a carga por apenas 1 ou 2 minutos. No início da década de 40, Atanasoff inventou um método para regenerar sua carga, por meio de um tambor cilíndrico rotativo, que entrava em contato com fios elétricos no formato de escovas metálicas, 1 vez por segundo. Esta técnica, chamada por ele de memória regenerativa, era muito barata, mas muito lenta.
· Tubos de retardo – Consiste em uma linha de retardo acústica que armazena pulsos em um longo tubo preenchido por um líquido denso (mercúrio, por exemplo). Numa das pontas, um sinal elétrico, representando um dado, era convertido em um pulso, por uma peça de quartzo. O pulso ficava ondulando dentro do tubo e podia ser recuperado pelo quartzo, que o convertia de volta para um sinal elétrico. Este método foi usado no ENIAC e custava menos de 1% do valor para implementar a memória com válvulas termoiônicas.
· Válvula termoiônica – a máquina Colossus, que quebrava códigos nazistas na época da guerra, deveria comparar 2 fitas perfuradas com códigos, um método muito lento, então decidiram substituí-las por válvulas termoiônicas (mais de 1000 delas), muito mais rápidas. As válvulas substituíram os relés eletromecânicos e revolucionaram a implementação de máquinas de fazer cálculos, pela sua rapidez. Uma das versões atualizadas do ENIAC usou válvulas ao invés de tubos de retardo.
· Tambor magnético – Era um cilindro revestido por um material magnético, com cabeças de leitura/escrita. Foi usada em computadores até na década de 50, como o IBM 650.
· Memória de núcleo magnético – Utilizava pequenos anéis de ferrite para armazenar bits por meio da polaridade magnética, montados em uma matriz de fios condutores, que endereçavam os núcleos. Criada nos anos 50, substituiu todas as outras formas de memória de computador e continuou sendo amplamente usada até os anos 70.
· Memória semicondutora – após a invenção dos semicondutores (diodos e transistores) e do circuito integrado (CI, ou chip), a Intel lançou a primeira memória semicondutora, o CI 1103, com memória DRAM (“Dynamic Random Access Memory”). Este tipo de memória substituiu todos os outros citados anteriormente e é usado até hoje.
Figura: válvula termoiônica (esquerda) e uma memória de núcleo de ferrite (direita).
3 – Os tipos de memória
A memória é um componente muito importante na estrutura de um computador ou equipamento digital. Ela é responsável pela execução dos programas, pelo armazenamento dos códigos executáveis dos programas e pelos valores temporários usados na execução de um programa.
Imagine que a memória é um conjunto enorme de registradores, de tamanho fixo, dispostos em sequência, que podem ser endereçados individualmente.
Elas podem ser divididas nas categorias: memórias de armazenamento temporário (voláteis), cujo conteúdo é apagado quando a alimentação elétrica é retirada, e as de armazenamento permanente (não voláteis), que mantém seus conteúdos gravados mesmo após o desligamento da alimentação elétrica.
As primeiras memórias semicondutoras que surgiram foram as memórias RAM (“Random Access Memory”), ou memórias de acesso aleatório.
De acordo com MORIMOTO [2], existem vários tipos de memórias usadas nos computadores, de acordo com a tecnologia empregada na sua construção, cada um com suas especificidades e aplicações. No caso das memórias voláteis, temos:
· RAM (“Random Access Memory”) - Memória para armazenamento de dados temporários, que o computador precisa acessar rapidamente. Seu principal uso é como memória principal do sistema, usada para executar programas e processar dados;
· DRAM (“Dynamic Random Access Memory”) - Tipo de RAM que usa capacitores para armazenar dados, necessitando de atualização constante (“refresh”) para manter os dados.
· SRAM (“Static Random Access Memory”) – Esta memória usa transistores para armazenar dados e não necessita refresh. Usada principalmente em cache de processadores e outras aplicações que requerem alta velocidade. Ela é mais rápida que a DRAM e mais cara;
· SDRAM (”Synchronous Dynamic Random Access Memory”) - Tipo de DRAM que é sincronizada com o sinal de clock (relógio) do sistema, permitindo maior eficiência e velocidade. É usada como memória principal em computadores mais antigos. Ela é mais rápida que a DRAM convencional;
· DDR (“Double Data Rate SDRAM”) - Tipo de SDRAM que transfere dados em ambas as bordas (subida e descida) do ciclo de clock, dobrando a taxa de transferência de dados. É usada na memória principal do sistema em computadores modernos. Apresenta melhor desempenho que a SDRAM;
· DDR2, DDR3, DDR4 e DDR5 – Evoluções do tipo DDR, todas apresentando, em relação à evolução anterior, maior capacidade, velocidade e eficiência energética, ampliando a largura de banda e proporcionando um consumo menor.
Com relação às memórias não voláteis, existem vários tipos, cada um com características distintas em termos de programação e reprogramação. Aqui estão as principais diferenças:
· ROM (“Read-Only Memory”) - Memória apenas de leitura, programada durante a fabricação, não podendo ser alterada. Usada para armazenamento de firmware e software que não precisa ser modificado. Foi Introduzida nos anos 60;
· PROM (“Programmable Read-Only Memory”) - Memória que pode ser programada uma única vez, após a fabricação. Uma vez programada, seus dados não podem ser alterados. É utilizada em dispositivos onde a programação é feita uma vez e não precisa ser alterada. Introduzida nos anos 70. Ver figura abaixo;
· EPROM (“Erasable Programmable Read-Only Memory”) - Pode ser apagada e reprogramada várias vezes, por meio da exposição do chip à luz ultravioleta, através de uma janela de quartzo. É utilizada em desenvolvimento e testes de software, onde a reprogramação é necessária. Também foi introduzida nos anos 70. Ver figura abaixo;
· EEPROM (“Electrically Erasable Programmable Read-Only Memory”) – memória que pode ser apagada e reprogramada eletricamente, sem a necessidade de remoção do chip do circuito, processo mais rápido e conveniente. É utilizada em dispositivos onde a atualização de firmware é necessária, como em BIOS de computadores. Foi introduzida nos anos 80;
· Memória Flash (“Flash memory”) – Memória não volátil, com baixo consumo de energia, alta durabilidade e velocidade de acesso variável, mas menor que a velocidade de uma DDR. É usada como armazenamento interno em dispositivos móveis (smartphones e tablets), cartões de memória, unidades USB (pendrives) e dispositivos SSD (“Solid State Drives”).
Figura. Memória PROM (esquerda) e EPROM (direita), com a janela superior para entrada da luz ultravioleta.
No passado, a memória ROM (e suas evoluções) era usada para armazenar a BIOS (“Basic Input/Output System”) do computador, que carrega os primeiros códigos executáveis e configurações de uma máquina na operação de inicialização (boot), ao se ligar o equipamento ou reiniciá-lo (reset).
Hoje, a BIOS está sendo substituída pela UEFI (”Unified Extensible Firmware Interface”), ou Interface Unificada de Firmware Extensível, uma especificação de interface de software entre o sistema operacional e o firmware da plataforma.
As memórias usadas no computador também se diferenciam pelos tipos de soquetes. Antigamente, as memórias eram soldadas diretamente na placa-mãe do computador. Depois, tiveram a ideia de soldar soquetes (ou slots) de memória, que serviam para encaixar as placas dos módulos de memórias, método muito mais prático.
Estes soquetes de memória se diferenciam pelo número de contatos eletrônicos, pela distribuição dos contatos (separação em grupos) e por chanfros nas laterais dos módulos de memória, de forma que um tipo de memória diferente não se encaixa em um soquete que não seja adequado para ela.
Os tipos de módulos (soquetes) mais comuns são:
· SIMM (“Single Inline Memory Module”) – Tem contatos em um dos lados do módulo, disponível com 30 ou 72 pinos. É usado em computadores mais antigos.
· DIMM (“Dual Inline Memory Module”): Possui contatos nos dois lados do módulo, com conectores de 168 (SDRAM), 184 (DDR), 240 (DDR2 e DDR3), 288 (DDR4 e DDR5) pinos, dependendo do tipo específico de RAM. Substituiu os SIMMs por causa de limitações de velocidade e de capacidade; é utilizado em desktops. As memórias DIMM ainda eram categorizadas como PC66, PC100 e PC133, de acordo com suas taxas de operação (66 MHz,100 MHz e 133 MHz);
· SODIMM (“Small Outline DIMM”): É menor que o DIMM, tem conectores de 144 (SDRAM), 200 (DDR e DDDR2), 204 (DDR3), 260 (DDR4) e 288 (DDR5) pinos, dependendo dos tipos de RAM. É usado em laptops e dispositivos compactos.
As figuras abaixo ilustram os tipos de módulos de memória, SIMM, DIMM e SO-DIMM.
4 – Conceitos importantes
Para entender claramente a importância e o uso das memórias no computador, é preciso esclarecer alguns conceitos básicos sobre elas. TORRES [3] descreve muito bem os conceitos a seguir:
MEMÓRIA CACHE
A memória cache é uma memória de alta velocidade localizada dentro ou próxima ao processador. Ela armazena temporariamente dados e instruções frequentemente acessados, permitindo que o processador os recupere rapidamente sem precisar acessar a memória principal (RAM). Memórias cache são bem mais rápidas que a memória RAM.
Os processadores modernos têm vários níveis de cache, como L1 (mais rápido e menor capacidade), L2 e L3 (um pouco mais lento, mas tem tamanho maior). O uso de cache ajuda a melhorar muito o desempenho geral do sistema.
Numa execução sequencial, é muito provável que uma instrução/dado que a CPU necessita esteja no bloco armazenado na L1, L2 ou L3. Além disso, é mais rápido ler um bloco de memória RAM do que o conteúdo de um só endereço de cada vez.
O funcionamento das memórias cache se dá da seguinte maneira:
· A CPU precisa de um novo dado da memória RAM;
· Um bloco de memória RAM grande (8 MB) é lido e copiado no cache L3;
· Um bloco de memória menor (256 KB) é lido e copiado no cache L2;
· Um bloco de memória ainda menor (64 KB) é lido e copiado no cache L;
A figura abaixo ilustra a arquitetura das memórias cache em um computador, com uma CPU de 2 núcleos ("cores").
EXECUÇÃO DE PROGRAMAS
Ao executar um programa instalado no seu computador (ou um aplicativo no seu smartphone), ele precisa ser copiado da unidade de armazenamento permanente (disco, HD, SSD) para a memória de armazenamento temporário, pois é lá que o sistema operacional procura as instruções do código executável para executá-lo.
Assim, quanto mais memória RAM disponível o sistema tiver, mais espaço ele terá para a execução das instruções, criação de espaço (dinâmico) para as variáveis e para os processamentos temporários que o programa exija, além de permitir a execução de outros programas em paralelo.
Na verdade, a quantidade de memória disponível afeta diretamente o desempenho do equipamento e, na maioria das vezes, muito mais que um processador um pouco mais rápido.
Então, fica a dica: É melhor investir na compra de mais memória do que de um processador 2% mais rápido!
A figura abaixo mostra os passos para a execução de um programa no computador:
1. Programas armazenados no HD, memória RAM vazia;
2. O código do programa Excel é copiado do HD para a memória RAM;
3. O processador aponta para o início do código executável na memória e começa a executá-lo.
SWAP
A memória swap é uma área do disco rígido usada como uma extensão da memória RAM. Quando a RAM está cheia, o sistema operacional move dados menos usados da RAM para a área de swap, liberando espaço na RAM para carregar novos dados. Ela é conhecida também como memória virtual.
Em sistemas Linux, você pode configurar uma partição de swap ou um arquivo de swap. Quando você abre muitos programas e a RAM fica cheia, o sistema começa a usar a memória swap para evitar travamentos.
Caso o seu computador tenha pouca memória e não conseguir carregar um programa grande inteiro para executá-lo, os computadores oferecem uma técnica chamada de “page swap” (ou troca de página) para resolver isso (ou mitigar o problema).
Dessa forma, um código que não cabe completamente na memória tem outras partes carregadas, quando são necessárias.
O problema é que a velocidade de acesso ao disco é muito menor que a da memória RAM, e essas trocas tornam a execução do programa muito lenta, podendo até chegar a travar o computador.
A figura abaixo mostra os passos para a execução de um programa no computador, cujo código não cabe na memória RAM e é usada a área de swap:
1. Programas armazenados no HD, memória RAM vazia;
2. Parte do código do programa Word (em azul claro) é copiada do HD para a memória RAM, pois ele não cabe totalmente na memória RAM. O processador aponta para o início do código executável na memória e começa a executá-lo;
3. Ao precisar executar código que não foi carregado na RAM, parte do código já copiado é movido para a área de swap, no HD;
4. A parte que não tinha sido copiada antes é copiada para a memória RAM e a execução continua a partir dela.
OBS: Este processo é repetido cada vez que um código precise ser executado e não esteja na memória.
LIMITE DE 4 GB
Refere-se à quantidade máxima de memória RAM que os processadores e sistemas operacionais de 32 bits podem endereçar diretamente.
Os primeiros computadores pessoais, na época do Sistema Operacional DOS (“Disk Operating System”), usavam processador de 16 bits e podiam acessar até 1 MB (megabyte) de memória, com 20 bits para os endereços, usando segmentação de 16 blocos de 64 KB.
Após o lançamento do processador 386, que usava 32 linhas para endereçamento da memória, o limite de memória passou para 4 GB, resultado da conta 232 posições diferentes, cada uma com 1 byte, equivalendo a 4 GB.
Na verdade, a memória disponível para uso é menor do que os 4 GB, pois um bom espaço já é usado para armazenar o sistema operacional, drives e outros utilitários.
Da mesma forma, o sistema operacional instalado no computador também pode limitar a memória em 4 GB. Se o seu computador tiver mais de 4 GB de RAM instalada, se ele usa uma versão de 32 bits do Windows, o sistema só poderá usar até 4 GB. Para utilizar mais memória, é necessário um sistema operacional de 64 bits, que pode endereçar muito mais memória (até 18 exabytes).
A figura abaixo mostra a quantidade de posições de memória endereçadas por várias linhas (pinos de contato) de endereçamento.
MEMÓRIAS DE VÍDEO
Além das memórias usadas no computador para armazenamento de informações temporárias, temos as placas de vídeo, que geram as imagens nas telas e monitores, que usam tipos específicos, e muito avançados, de memórias.
Os principais tipos destas memórias, usadas em placas de vídeo antigas e atuais, foram desenvolvidos para atender às crescentes demandas de desempenho gráfico e eficiência energética nas placas de vídeo. Eles são DDR, GDDR (e suas evoluções (GDDR2 até GDDR6) e HBM.
Mas isso é assunto para um artigo futuro dedicado às placas de vídeo.
5 – Considerações finais
Este é mais um artigo da série DIRETO AO PONTO, que eu estou escrevendo para a DIO. No artigo anterior, tratamos dos circuitos digitais sequenciais, especificamente, dos flip-flops e dos registradores. Desta vez, foi apresentado mais um tipo de circuito digital sequencial, que são as memórias.
Basicamente, elas podem ser divididas em 2 categorias diferentes: as memórias voláteis, que têm seus dados apagados se a alimentação elétrica for desligada, e as não voláteis, que mantém os dados armazenados mesmo na ausência de alimentação elétrica.
No primeiro caso, temos as memórias RAM e suas evoluções, usadas como memória principal dos computadores, responsáveis pelo espaço de execução dos programas.
No segundo caso, temos as memórias ROM e suas evoluções, usadas principalmente para inicializar os computadores, na BIOS ou, atualmente, na UEFI.
Além destes tipos de memórias, temos as memórias flash, que se encaixam mais como dispositivos de armazenamento permanente. Isso é assunto para outro artigo, no futuro, que focará nos discos rígidos (HDs) e outras tecnologias mais atuais (cartão de memória, pendrive, SSD).
Da mesma forma, as memórias usadas em placas de vídeo, por terem tecnologias bem diferentes, também serão tratadas em um artigo futuro.
No próximo artigo, vamos tratar do uso da memória por um programa de computador.
6 – Referências
[1] ISAACSON, Walter. Os Inovadores – Uma biografia da revolução digital. Companhia das Letras, 2014.
[2] MORIMOTO, Carlos, Hardware II, o Guia Definitivo. Sul Editores, 2010.
[3] TORRES, Gabriel, Hardware 2ª Edição, Clube do Hardware, 2022.
Artigos desta série: ( < ) Anterior | Índice | Seguinte ( > )