Memória do computador
Na computação, memória é um dispositivo ou sistema usado para armazenar informações para uso imediato em um computador ou hardware de computador relacionado e dispositivos eletrônicos digitais. O termo memória geralmente é sinônimo do termo armazenamento primário ou memória principal. Um sinônimo arcaico para memória é armazenar.
A memória do computador opera em alta velocidade em comparação com o armazenamento que é mais lento, mas mais barato e com maior capacidade. Além de armazenar programas abertos, a memória do computador serve como cache de disco e buffer de gravação para melhorar o desempenho de leitura e gravação. Os sistemas operacionais emprestam capacidade de RAM para armazenamento em cache, desde que não sejam necessários para o software em execução. Se necessário, o conteúdo da memória do computador pode ser transferido para armazenamento; uma forma comum de fazer isso é através de uma técnica de gerenciamento de memória chamada memória virtual.
A memória moderna é implementada como memória semicondutora, onde os dados são armazenados em células de memória construídas a partir de transistores MOS e outros componentes em um circuito integrado. Existem dois tipos principais de memória semicondutora, volátil e não volátil. Exemplos de memória não volátil são memória flash e memória ROM, PROM, EPROM e EEPROM. Exemplos de memória volátil são a memória dinâmica de acesso aleatório (DRAM) usada para armazenamento primário e a memória estática de acesso aleatório (SRAM) usada para o cache da CPU.
A maioria das memórias de semicondutores é organizada em células de memória, cada uma armazenando um bit (0 ou 1). A organização da memória flash inclui um bit por célula de memória e uma célula multinível capaz de armazenar vários bits por célula. As células de memória são agrupadas em palavras de comprimento de palavra fixo, por exemplo, 1, 2, 4, 8, 16, 32, 64 ou 128 bits. Cada palavra pode ser acessada por um endereço binário de N bits, possibilitando o armazenamento de 2N palavras na memória.
História
No início da década de 1940, a tecnologia de memória geralmente permitia uma capacidade de alguns bytes. O primeiro computador digital programável eletrônico, o ENIAC, usando milhares de tubos de vácuo, podia realizar cálculos simples envolvendo 20 números de dez dígitos decimais armazenados nos tubos de vácuo.
O próximo avanço significativo na memória do computador veio com a memória acústica de linha de atraso, desenvolvida por J. Presper Eckert no início dos anos 1940. Através da construção de um tubo de vidro cheio de mercúrio e conectado em cada extremidade com um cristal de quartzo, as linhas de atraso poderiam armazenar bits de informação na forma de ondas sonoras que se propagam através do mercúrio, com os cristais de quartzo atuando como transdutores para ler e escrever bits. A memória da linha de atraso era limitada a uma capacidade de até alguns milhares de bits.
Duas alternativas à linha de atraso, o tubo de Williams e o tubo de Selectron, surgiram em 1946, ambos usando feixes de elétrons em tubos de vidro como meio de armazenamento. Usando tubos de raios catódicos, Fred Williams inventou o tubo de Williams, que foi a primeira memória de computador de acesso aleatório. O tubo Williams era capaz de armazenar mais informações do que o tubo Selectron (o Selectron era limitado a 256 bits, enquanto o tubo Williams podia armazenar milhares) e era mais barato. O tubo de Williams era, no entanto, frustrantemente sensível a distúrbios ambientais.
Os esforços começaram no final da década de 1940 para encontrar memória não volátil. A memória de núcleo magnético permitia a recuperação da memória após a perda de energia. Foi desenvolvido por Frederick W. Viehe e An Wang no final dos anos 1940 e aprimorado por Jay Forrester e Jan A. Rajchman no início dos anos 1950, antes de ser comercializado com o computador Whirlwind em 1953. A memória de núcleo magnético era a forma dominante de memória até o desenvolvimento da memória semicondutora MOS na década de 1960.
A primeira memória semicondutora foi implementada como um circuito flip-flop no início dos anos 1960 usando transistores bipolares. A memória semicondutora feita de dispositivos discretos foi enviada pela primeira vez pela Texas Instruments para a Força Aérea dos Estados Unidos em 1961. No mesmo ano, o conceito de memória de estado sólido em um chip de circuito integrado (IC) foi proposto pelo engenheiro de aplicações Bob Norman na Fairchild Semiconductor. O primeiro chip IC de memória semicondutora bipolar foi o SP95 introduzido pela IBM em 1965. Embora a memória semicondutora oferecesse melhor desempenho em relação à memória de núcleo magnético, ela permaneceu maior e mais cara e não deslocou a memória de núcleo magnético até o final dos anos 1960.
Memória MOS
A invenção do transistor de efeito de campo de metal-óxido-semicondutor (MOSFET) permitiu o uso prático de transistores de metal-óxido-semicondutor (MOS) como elementos de armazenamento de células de memória. A memória MOS foi desenvolvida por John Schmidt na Fairchild Semiconductor em 1964. Além de maior desempenho, a memória MOS semicondutora era mais barata e consumia menos energia do que a memória de núcleo magnético. Em 1965, J. Wood e R. Ball do Royal Radar Establishment propuseram sistemas de armazenamento digital que usam células de memória CMOS (complementary MOS), além de dispositivos de alimentação MOSFET para a fonte de alimentação, acoplamento cruzado comutado, comutadores e linha de atraso armazenar. O desenvolvimento da tecnologia de circuito integrado MOS de porta de silício (MOS IC) por Federico Faggin na Fairchild em 1968 permitiu a produção de chips de memória MOS. A memória NMOS foi comercializada pela IBM no início dos anos 1970. A memória MOS ultrapassou a memória de núcleo magnético como a tecnologia de memória dominante no início dos anos 1970.
Os dois principais tipos de memória volátil de acesso aleatório (RAM) são a memória estática de acesso aleatório (SRAM) e a memória dinâmica de acesso aleatório (DRAM). A SRAM bipolar foi inventada por Robert Norman na Fairchild Semiconductor em 1963, seguida pelo desenvolvimento da MOS SRAM por John Schmidt na Fairchild em 1964. A SRAM tornou-se uma alternativa à memória de núcleo magnético, mas requer seis transistores para cada bit de dados. O uso comercial da SRAM começou em 1965, quando a IBM introduziu seu chip SP95 SRAM para o System/360 Model 95.
A Toshiba introduziu células de memória DRAM bipolar para sua calculadora eletrônica Toscal BC-1411 em 1965. Embora oferecesse desempenho aprimorado, a DRAM bipolar não podia competir com o preço mais baixo da então dominante memória de núcleo magnético. A tecnologia MOS é a base da DRAM moderna. Em 1966, Robert H. Dennard no IBM Thomas J. Watson Research Center estava trabalhando na memória MOS. Ao examinar as características da tecnologia MOS, ele descobriu que era possível construir capacitores, e que armazenar uma carga ou nenhuma carga no capacitor MOS poderia representar o 1 e 0 de um bit, enquanto o transistor MOS poderia controlar a escrita da carga no capacitor. Isso levou ao desenvolvimento de uma célula de memória DRAM de transistor único. Em 1967, Dennard registrou uma patente para uma célula de memória DRAM de transistor único baseada na tecnologia MOS. Isso levou ao primeiro chip DRAM IC comercial, o Intel 1103 em outubro de 1970. A memória dinâmica de acesso aleatório síncrona (SDRAM) estreou posteriormente com o chip Samsung KM48SL2000 em 1992.
O termo memória também é frequentemente usado para se referir à memória não volátil, incluindo a memória somente leitura (ROM) até a memória flash moderna. A memória somente leitura programável (PROM) foi inventada por Wen Tsing Chow em 1956, enquanto trabalhava para a Divisão Arma da American Bosch Arma Corporation. Em 1967, Dawon Kahng e Simon Sze, da Bell Labs, propuseram que a porta flutuante de um dispositivo semicondutor MOS pudesse ser usada para a célula de uma ROM reprogramável, o que levou Dov Frohman, da Intel, a inventar a EPROM (PROM apagável) em 1971. EEPROM (PROM eletricamente apagável) foi desenvolvido por Yasuo Tarui, Yutaka Hayashi e Kiyoko Naga no Laboratório Eletrotécnico em 1972. A memória flash foi inventada por Fujio Masuoka na Toshiba no início dos anos 80. Masuoka e seus colegas apresentaram a invenção do flash NOR em 1984 e depois do flash NAND em 1987. A Toshiba comercializou a memória flash NAND em 1987.
Desenvolvimentos em tecnologia e economias de escala possibilitaram o chamado muito computadores com grande memória (VLM).
Memória volátil
Memória volátil é a memória do computador que requer energia para manter as informações armazenadas. A maioria das memórias voláteis de semicondutores modernos é RAM estática (SRAM) ou RAM dinâmica (DRAM). A DRAM domina a memória do sistema de desktop. A SRAM é usada para o cache da CPU. A SRAM também é encontrada em pequenos sistemas embarcados que requerem pouca memória.
A SRAM retém seu conteúdo enquanto a energia estiver conectada e pode usar uma interface mais simples, mas requer seis transistores por bit. A RAM dinâmica é mais complicada para interface e controle, precisando de ciclos de atualização regulares para evitar a perda de seu conteúdo, mas usa apenas um transistor e um capacitor por bit, permitindo atingir densidades muito maiores e custos por bit muito mais baratos.
Memória não volátil
A memória não volátil pode reter as informações armazenadas mesmo quando não está ligada. Exemplos de memória não volátil incluem memória somente leitura, memória flash, a maioria dos tipos de dispositivos magnéticos de armazenamento de computador (por exemplo, unidades de disco rígido, disquetes e fita magnética), discos ópticos e métodos de armazenamento de computador antigos, como fita de papel e cartões perfurados.
As tecnologias de memória não volátil em desenvolvimento incluem RAM ferroelétrica, célula de metalização programável, RAM magnética de torque de transferência de rotação, SONOS, memória resistiva de acesso aleatório, memória de pista de corrida, Nano-RAM, 3D XPoint e memória milípede.
Memória semivolátil
Uma terceira categoria de memória é semivolátil. O termo é usado para descrever uma memória que tem uma duração não volátil limitada depois que a energia é removida, mas os dados são perdidos. Um objetivo típico ao usar uma memória semivolátil é fornecer alto desempenho e durabilidade associados a memórias voláteis, ao mesmo tempo em que fornece alguns benefícios da memória não volátil.
Por exemplo, alguns tipos de memória não volátil sofrem desgaste durante a gravação. Uma célula desgastada tem maior volatilidade, mas continua funcionando. Locais de dados que são gravados com frequência podem, portanto, ser direcionados para usar circuitos desgastados. Desde que o local seja atualizado dentro de algum tempo de retenção conhecido, os dados permanecem válidos. Após um período de tempo sem atualização, o valor é copiado para um circuito menos desgastado e com maior retenção. Escrever primeiro na área desgastada permite uma alta taxa de gravação, evitando desgaste nos circuitos não desgastados.
Como um segundo exemplo, um STT-RAM pode se tornar não volátil construindo grandes células, mas isso aumenta o custo por bit e os requisitos de energia e reduz a velocidade de gravação. O uso de células pequenas melhora o custo, a potência e a velocidade, mas leva a um comportamento semivolátil. Em algumas aplicações, o aumento da volatilidade pode ser gerenciado para fornecer muitos benefícios de uma memória não volátil, por exemplo, removendo a energia, mas forçando um despertar antes que os dados sejam perdidos; ou armazenando em cache dados somente leitura e descartando os dados em cache se o tempo de desligamento exceder o limite não volátil.
O termo semivolátil também é usado para descrever o comportamento semivolátil construído a partir de outros tipos de memória. Por exemplo, uma memória volátil e uma não volátil podem ser combinadas, onde um sinal externo copia dados da memória volátil para a memória não volátil, mas se a energia for removida antes da cópia ocorrer, os dados serão perdidos. Ou, uma memória volátil com bateria, e se a energia externa for perdida, há algum período conhecido em que a bateria pode continuar a alimentar a memória volátil, mas se a energia for desligada por um longo período de tempo, a bateria descarrega e os dados são perdidos.
Gestão
O gerenciamento adequado da memória é vital para o funcionamento adequado de um sistema de computador. Os sistemas operacionais modernos possuem sistemas complexos para gerenciar adequadamente a memória. Deixar de fazer isso pode levar a bugs, desempenho lento ou controle por vírus e software mal-intencionado.
Erros
O gerenciamento inadequado de memória é uma causa comum de bugs, incluindo os seguintes tipos:
- Um vazamento de memória ocorre quando um programa pede memória do sistema operacional e nunca retorna a memória quando é feito com ele. Um programa com este bug irá gradualmente exigir mais e mais memória até que o programa falha à medida que o sistema operacional é executado.
- Uma falha de segmentação resulta quando um programa tenta acessar a memória que não tem permissão para acessar. Geralmente, um programa que o faça será encerrado pelo sistema operacional.
- Um fluxo de buffer ocorre quando um programa escreve dados para o final de seu espaço alocado e, em seguida, continua a escrever dados além disso à memória que foi alocada para outros fins. Isso pode resultar no comportamento do programa errático, incluindo erros de acesso à memória, resultados incorretos, um acidente ou uma violação da segurança do sistema. Eles são, portanto, a base de muitas vulnerabilidades de software e podem ser mal-intencionados.
Primeiros sistemas de computador
Nos primeiros sistemas de computador, os programas geralmente especificavam o local para gravar na memória e quais dados colocar lá. Esse local era um local físico no hardware de memória real. Os primeiros computadores não tinham os complexos sistemas de gerenciamento de memória usados hoje.
Essa abordagem tem suas armadilhas. Se o local especificado estiver incorreto, isso fará com que o computador grave os dados em alguma outra parte do programa. Os resultados de um erro como esse são imprevisíveis. Em alguns casos, o erro pode substituir a memória usada pelo sistema operacional. Os hackers podem aproveitar essa falta de proteção para criar vírus e malware.
Memória virtual
Memória virtual é um sistema em que a memória física é gerenciada pelo sistema operacional normalmente com a ajuda de uma unidade de gerenciamento de memória. Ele permite que vários tipos de memória sejam usados. Por exemplo, alguns dados podem ser armazenados na RAM enquanto outros dados são armazenados em um disco rígido (por exemplo, em um swapfile), funcionando como uma extensão da hierarquia do cache. Isso oferece várias vantagens. Os programadores de computador não precisam mais se preocupar com o local onde seus dados são armazenados fisicamente ou se o computador do usuário terá memória suficiente. O sistema operacional colocará os dados usados ativamente na RAM, que é muito mais rápida que os discos rígidos. Quando a quantidade de RAM não é suficiente para executar todos os programas atuais, pode resultar em uma situação em que o computador gasta mais tempo movendo dados da RAM para o disco e vice-versa do que realizando tarefas; isso é conhecido como surra.
Memória protegida
Memória protegida é um sistema em que cada programa recebe uma área de memória para usar e é impedido de sair desse intervalo. Se o sistema operacional detectar que um programa tentou alterar a memória que não lhe pertence, o programa é encerrado (ou restrito ou redirecionado). Dessa forma, apenas o programa ofensivo falha e outros programas não são afetados pelo mau comportamento (seja acidental ou intencional). O uso de memória protegida aumenta muito a confiabilidade e a segurança de um sistema de computador.
Sem memória protegida, é possível que um bug em um programa altere a memória usada por outro programa. Isso fará com que outro programa seja executado fora da memória corrompida com resultados imprevisíveis. Se a memória do sistema operacional estiver corrompida, todo o sistema do computador pode travar e precisar ser reinicializado. Às vezes, os programas alteram intencionalmente a memória usada por outros programas. Isso é feito por vírus e malware para assumir computadores. Também pode ser usado benignamente por programas desejáveis que se destinam a modificar outros programas, depuradores, por exemplo, para inserir pontos de interrupção ou ganchos.
Contenido relacionado
Pedaço
KB
Recuperação Auxiliada pelo Conhecimento no Contexto da Atividade