Multiprocessamento simétrico
# Multiprocessamento simétrico

O multiprocessamento simétrico ou SMP (Symmetric Multi-Processing) ocorre em um sistema computacional com vários processadores com memória compartilhada sob controle de um único sistema operacional. Em contraste o multiprocessamento assimétrico emprega sistemas diferentes.
O multiprocessamento simétrico oferece um aumento linear na capacidade de processamento a cada processador adicionado. Não há necessariamente um hardware que controle este recurso, cabe ao próprio sistema operacional suportá-lo.
Este método também é chamado de "processamento paralelo".

## Funcionamento

Os processadores trabalham sozinhos compartilhando os recursos de hardware, geralmente são processadores iguais, similares ou com capacidades parecidas. Todos têm os mesmos privilégios de acesso ao hardware, ao contrário do que acontece em sistemas multiprocessados assimétricos, onde um processador é encarregado de gerenciar e coordenar as tarefas e ações dos demais, o que pode proporcionar melhor controle sobre a sobrecarga ou a ociosidade dos processadores subordinados. Por tratar de grandes aspectos que todos os processadores de forma igualitária, no multiprocessamento simétrico, qualquer processador pode assumir as tarefas realizadas por qualquer outro processador, as tarefas são divididas e também podem ser executadas de modo concorrente em qualquer processador que esteja disponível. Os acessos dos processadores aos dispositivos de entrada e saída e a memória são feitos por um mecanismo de intercomunicação constituído por um barramento único.
A memória principal da máquina é compartilhada por todos os processadores através de um único barramento que os interliga, de modo que esse acesso à memória é nativo, não existe a necessidade de um mascaramento da memória real a nível de aplicação. Por todo acesso à memória principal ser realizado através de um único barramento, aqui temos um ponto de gargalo do sistema, pois o acesso é serial, ou seja, o sistema fica limitado a passagem de apenas uma instrução de cada vez pelo barramento, abrindo uma lacuna de tempo entre uma instrução e outra. Memórias caches junto aos processadores diminuem o tempo de latência entre um acesso e outro à memória principal e ajudam também a diminuir o tráfego no barramento. Como estamos falando em mais de um processador, cada um com sua memória cache é imprescindível para garantir que os processadores sempre acessem a cópia mais recente da memória cache, isso se chama coerência de cache, ao qual é geralmente implementada diretamente por hardware. Um dos métodos de coerência de cache mais conhecido é o snooping, quando um dado compartilhado nas caches dos processadores é alterado, todas as cópias das caches são consideradas inválidas e logo após atualizadas mantendo assim a integridade do dado.

## Gerenciamento

O sistema operacional é quem se encarrega de realizar a interação entre os processadores e as aplicações do sistema. Deixando a existência de múltiplos processadores transparente para os usuários, pois o próprio sincroniza os processos com os processadores.
Mesmo as arquiteturas de SMP já existirem há muitos anos no mercado, até pouco tempo os sistemas não tinham uma padronização para as funções básicas de operação, cada sistema implementava suas próprias funções. O que tornava impossível que os sistemas operacionais fossem portáveis. A partir dessa necessidade foi criada a MPS (Específicações da Intel para Multiprocessadores ou do inglês - Intel's Multiprocessor Specification), com o objetivo de padronizar o desenvolvimento de SOs que suportassem essas arquiteturas. A criação da MPS fez com que a Intel saísse na frente no desenvolvimento da tecnologia multicore.

## Vantagens

Sistemas de multiprocessamento simétrico são considerados mais poderosos em relação aos de multiprocessamento assimétricos, abaixo alguns descritivos de comparação entre eles.
* No multiprocessamento simétrico muitos processos podem ser executados ao mesmo tempo sem queda no desempenho, pois o sistema operacional delega as instruções a cada processador;
* Se um processador falhar o sistema não tranca pois qualquer outro processador pode assumir as tarefas daquele que falhou, já no assimétrico por exemplo, se o processador mestre falhar o sistema trava;
* No SMP o usuário pode melhorar o desempenho da máquina simplesmente adicionando um processador.

## Tecnologias

Antigamente para utilizar SMP era necessário hardware específico, placas-mãe com dois ou mais soquetes de CPU, grandes estruturas de servidores clusterizados. Hoje em dia com a tecnologia multicore, também conhecidos como processadores multicore, os fabricantes já integram tudo isso em apenas um dispositivo físico (chip).
Alguns exemplos de processadores multicore:
* Intel i3 , i5, i7 e i9
* Intel Xeon;
* Intel Core (2,2 Duo,i3,i5,i7)
* Intel Pentium D;
* Intel Itanium;
* AMD Athlon 64 ou X2;
* Opteron 200 e 2000 processadores da série;
* UltraSPARC da Sun Microsystems;
* Fujitsu SPARC64 III;
* Hewlett Packard PA-RISC;
* IBM POWER;
* PowerPC Apple Computer(G4 e séries G5);