Brak

Ile procesorów mieści się w jednym pececie? Czy wystarczy wsypać je tam szufelką? Szukamy odpowiedzi na te i nieco bardziej skomplikowane pytania dotyczące technnologii SMP.

SMP (Symmetrical Multi-Processing), czyli symetryczna wieloprocesorowość, to określenie, które robi coraz większą karierę. Odnosi się do systemów komputerowych wyposażonych w więcej niż jedną jednostkę centralną. Słowo “symetryczna” oznacza w tym przypadku, że każdemu z kilku procesorów system operacyjny może powierzyć takie same zadania; żaden z nich nie jest w jakiś sposób wyspecjalizowany czy wyróżniony.

Z realizacją systemu wieloprocesorowego wiąże się wiele komplikacji. Trudności zaczynają się już na najniższym, sprzętowym poziomie. Po pierwsze – należy stworzyć mechanizm współdzielenia zasobów przez procesory: magistral systemowych, pamięci operacyjnej i urządzeń wejścia/wyjścia. Nie może się przecież zdarzyć, że procesor pobierze z magistrali – jako swoje – dane przesyłane nią na żądanie innego procesora. Procesor nie może również modyfikować obszarów pamięci, w których inna jednostka centralna przechowuje swoje dane. Wreszcie żądania obsługi zgłaszane przez urządzenia zewnętrzne za pomocą przerwań muszą zostać obsłużone, ale tylko przez jeden procesor – kilka jednostek jednocześnie nie może obsługiwać tego samego zgłoszenia.

Kolejne problemy do rozwiązania pojawiają się na poziomie systemu operacyjnego. Zachodzące w nim procesy muszą zostać rozbite na niezależne wątki, z których każdy będzie można uruchamiać – już sekwencyjnie – na jednym z procesorów. Muszą też istnieć mechanizmy synchronizacji poszczególnych wątków, chroniące przed “wejściem” kilku procesów równocześnie do sekcji krytycznej, czyli fragmentu programu, który może być wykonywany tylko przez jeden wątek (np. modyfikacja zmiennej systemowej lub rekordu bazy danych albo obsługa przerwania). System musi też “wiedzieć”, iloma procesorami dysponuje i w jaki sposób są one połączone ze sobą. Zapewnienie takich informacji należy do pośrednika pomiędzy sprzętem a systemem operacyjnym – BIOS-u.

Maksimum korzyści wynikających z wieloprocesorowości systemu można jednak uzyskać dopiero wtedy, gdy również aplikacje zostały odpowiednio zaprojektowane. Bez znajomości struktury aplikacji dekompozycja jej kodu na fragmenty wykonywane przez różne procesory po prostu nie jest możliwa, toteż system operacyjny nie jest w stanie przeprowadzić tej operacji automatycznie. To projektant podczas tworzenia specyfikacji oprogramowania powinien wyodrębnić niezależne wątki, które można przetwarzać jednocześnie. Programista musi też dbać o poprawność wzajemnej komunikacji stworzonych procesów. Weźmy za przykład proces renderingu, polegający na wyliczaniu oświetlonego obrazu sceny na podstawie symulacji toru promienia światła. Obliczenia dla każdego z promieni – odpowiadającego kolejnemu pikselowi generowanego obrazu – mogą być prowadzone w osobnym wątku, wykonywanym przez jeden z procesorów. Musi też istnieć mechanizm “zlecania” obliczeń, “odbierania” ich wyników i łączenia ich w jedną, spójną całość.

Więcej:bezcatnews