====== Systemy SMP ======

===== Słowem wstępu =====

SMP (ang. Symmetric Multiprocessing, przetwarzanie symetryczne) - architektura komputerowa, która pozwala na znaczne zwiększenie mocy obliczeniowej systemu komputerowego poprzez wykorzystanie 2 lub więcej procesorów do jednoczesnego wykonywania zadań.

W architekturze SMP każdy procesor może zostać przypisany do wykonywania każdego zadania, tak aby wyrównać obciążenie ("obowiązki" są dzielone "po równo"). W architekturze SMP procesory te współdzielą zasoby pamięci oraz wejścia/wyjścia przy pomocy magistrali.

Ważną rzeczą jest wykorzystanie wielowątkowości przez programy komputerowe (oraz obsługa wielowątkowości przez system operacyjny) - upraszcza to możliwość "podzielenia" procesu dla kilku procesorów. Szczególną korzyść z przetwarzania równoległego czerpią aplikacje do renderingu i edycji wideo, małą natomiast pakiety biurowe czy gry.

Alternatywną architekturą do SMP jest MPP, przetwarzanie równoległe.


Możemy powiedzieć, że SMP to komputer z wieloma procesorami, gdzie tylko procesory są zwielokrotnione (NIE pamięć, NIE wejście-wyjście). Wszystkie procesory mają identyczne możliwości. "Jedna pamięć" oznacza spójne pamięci podręczne i jednolity czas dostępu do całej pamięci.

Rysunek poniżej przedstawia architekturę SMP:

{{:wspolczesne_systemy_komputerowe:smp.jpg|:wspolczesne_systemy_komputerowe:smp.jpg}}


===== Przetwarzanie symetryczne =====
Przetwarzanie symetryczne w systemach wieloprocesorowych polega na tym, że wszystkie procesory w systemie są wobec siebie równorzędne; każdy z nich wykonuje własną, niezależną kopię systemu operacyjnego.

W architekturze SMP zasoby pamięci i wejścia/wyjścia są współdzielone przez wszystkie procesory systemu, komunikujące się z nimi za pośrednictwem wspólnej magistrali lub, w bardziej rozbudowanych systemach, przełącznika. 

===== Wady/Zalety =====

==== Zalety ====
  * stosunkowo prosty model programowy

==== Wady ====
  * ze wzrostem liczby procesorów wspólne zasoby zaczynają stanowić wąskie gardło

  * spójność danych (z racji tego, że SMP stworzono w czasach, gdy procesory komunikowały się z pamięcią bez pośrednictwa pamięci podręcznej cache. Obecność własnej pamięci podręcznej wewnątrz współczesnych CPU narzuca konieczność zapewnienia spójności jej zawartości (cache coherency). Każdy z procesorów musi pod konkretnym adresem pamięci "widzieć" tę samą zawartość.)

  * Przy coraz większych częstotliwościach zegara pojawiają się kłopoty spowodowane zjawiskami fizycznymi - połączenia między procesorem a pamięcią powinny być jak najkrótsze, a przy sporej liczbie procesorów dołączonych do wspólnej pamięci odległości po prostu nie mogą być małe.

  * limit ilości procesorów w klasycznej architekturze SMP (maksymalna liczba procesorów w systemie "współdzielenia wszystkiego" nie powinna przekraczać 8-u, zysk wydajności na dalszej rozbudowie jest praktycznie zerowy z powodu fizycznych ograniczeń poszczególnych elementów systemu, przede wszystkim pasma przepustowości interfejsu pamięci RAM.)


===== Systemy operacyjne przystosowane do SMP =====

    * BSD
    * Linux
    * Microsoft Windows NT
    * QNX real-time operating system
    * Mac OS X
    * Mac OS 9
    * Unix variants e.g. Sun Solaris, HP-UX
    * BeOS and derivatives
