Memória compartilhada
Em computação, memória compartilhada é uma memória que pode ser acessada simultaneamente por múltiplos programas com a intenção de prover comunicação entre eles ou para evitar cópias redundantes. Dependendo do contexto, os programas podem ser executados em somente um processador ou por pelo menos dois processadores distintos. O conceito de memória compartilhada geralmente não inclui usar a memória para a comunicação de diferentes threads de um mesmo processo.
No hardware, a memória compartilhada se refere tipicamente a grandes blocos de RAM que podem ser acessados por diferentes unidades centrais de processamento (CPU) em um sistema de multiprocessamento. Um sistema de memória compartilhada é simples de ser programado já que todos os processadores compartilham a mesma visão dos dados, e a comunicação entre processadores pode ser tão rápida quanto o acesso à memória na mesma posição. O problema com sistema de memória compartilhada é que várias CPU necessitam acesso rápido à memória e por isso utilizam sistemas de cache na própria CPU, o que possui duas complicações. A primeira é que conexão da CPU para a memória se torna um gargalo no sistema. Computadores com memória compartilhada não possuem boa escalabilidade. A segunda diz respeito à integridade do cache, a condição de que ele esteja atualizado com as informações corretas, mais atuais. Mudanças no cache de um processador devem ser replicadas nos outros.
Em software, a memória compartilhada é tanto um método de comunicação entre processos quanto um método de conservação do espaço de memória. Para o primeiro, um processo pode criar uma área na RAM que outros processos sendo executados simultaneamente pode acessar. Para o segundo, ao invés de replicar cópias de blocos de memória entre diferentes processos, há somente uma instância. Já que ambos os processos podem acessar a memória compartilhada como outra memória qualquer, este é um método muito rápido de comunicação entre processos (em contraste de outros métodos como pipe nomeado, socket Unix ou sistemas como o CORBA). Por outro lado, não é tão robusto dado que, por exemplo, os processos devem estar sendo executados numa mesma máquina, enquanto há métodos de comunicação entre processos que podem interagir numa rede de computadores. Deve-se tomar cuidado também com a questão da integridade do cache citada acima, caso a arquitetura já não o faça.


