Skip to main content

O que é coerência de memória?

A coerência da memória é um problema que ocorre em um computador quando um processador tenta examinar um setor de memória. Esse problema ocorre apenas em sistemas multicore ou computadores que possuem mais de uma unidade de processamento central (CPU). Quando os vários processadores examinam o mesmo setor de memória e um atualiza o setor, o outro pode ficar com uma versão antiga da memória do computador. Para corrigir esse problema, regras de consistência são usadas para garantir que os processadores não acessem a mesma memória ou que as atualizações sejam consistentes entre eles. Existem vários modelos de consistência diferentes, portanto, programadores e desenvolvedores de computadores devem conhecer o modelo exato usado.

O problema de coerência da memória é aquele que ocorre apenas em computadores que usam pelo menos duas CPUs devido à maneira como acessam a memória. Quando uma CPU está acessando um setor de memória, ela pode capturar, usar e alterar a memória sem nenhum conflito, porque não há outras peças de hardware competindo pela memória. Se duas CPUs forem usadas, elas poderão pegar o mesmo setor de memória. Embora não haja problemas com as duas CPUs compartilhando a memória, um problema ocorre se uma CPU atualizar a memória. Isso deixa a segunda CPU com memória desatualizada que, se desmarcada, pode fazer com que o computador inteiro tenha duas versões separadas e conflitantes da memória do computador.

Existem esquemas de programação criados especificamente para corrigir a coerência da memória, o que pode ser um problema importante. Eles são conhecidos coletivamente como regras de consistência de memória e existem muitas versões. No geral, cada versão diz às várias CPUs como compartilhar adequadamente a memória do computador sem causar o problema de coerência da memória. Isso pode ser feito atualizando as duas versões da memória quando uma versão é alterada ou impedindo que as CPUs acessem a mesma memória ao mesmo tempo.

Embora o uso de regras de consistência ajude a evitar o problema de coerência da memória, outro problema surge disso. Cada conjunto de consistências possui programação e regras diferentes; portanto, os programadores que estão criando programas ou escrevendo código que lidam diretamente com as CPUs precisam adaptar a codificação para as regras de consistência exatas. Caso contrário, isso poderá substituir a consistência ou causar um grande conflito entre a codificação do programador e as regras de consistência, e o computador poderá deixar de funcionar.