SPARC

Mikroprocesor Sun UltraSPARC II

SPARC (ang. Scalable Processor ARChitecture) – architektura mikroprocesorów RISC zaprojektowana początkowo przez firmę Sun Microsystems, a od roku 1989 rozwijana przez organizację SPARC International.

Opis

Architektura SPARC określa 32-bitowy (SPARC version 8) oraz 64-bitowy (SPARC version 9) model programowy mikroprocesora (ang. ISA – Instruction Set Architecture) oraz zawiera wskazówki pomagające w implementacji tej architektury. SPARC jest otwartą architekturą (zgodnie z dawną definicją otwartości – przyp. autora), oznacza to, że dostępna jest publicznie cała dokumentacja opisująca ISA oraz wskazówki dla osób lub firm implementujących. Dodatkowo firmy będące członkami organizacji SPARC mają wpływ na rozwój tej architektury oraz prawo do używania znaków handlowych. Dostępna jest także otwarta implementacja – na licencji GNU LGPL, kod w języku VHDL – procesora o nazwie LEON.

Procesory opracowane na podstawie architektury SPARC używane są powszechnie w wysokowydajnych serwerach, stacjach roboczych, a także systemach wbudowanych (ang. embedded). Zaprezentowane po raz pierwszy w 1985 roku przez Sun Microsystems. Architektura SPARC, będąca zawczasu bardzo radykalna, pozwala na ominięcie wielokrotnych pętli mnożenia i dzielenia. Inną podstawową cechą architektury SPARC, nieczęsto spotykaną w innych rozwiązaniach, jest zastosowanie bardzo dużego zestawu rejestrów ogólnego przeznaczenia (zalecenia implementacyjne mówią nawet o zestawie 64 do 528 – 64-bitowych rejestrów) dostępnych poprzez „okna rejestrów”, które mogą być przełączane podczas każdorazowego wywołania podprogramu czy obsługi przerwania za pomocą instrukcji SAVE tak, że zbiór rejestrów stanowiących parametry wywołania podprogramu staje się automatycznie zbiorem rejestrów parametrów lokalnych bez dodatkowych działań programowo-sprzętowych (patrz obrazek).

Zasada działania okna rejestrów

Specyfikacja SPARC-v9

Architektura SPARC-v9 zawiera dwa typy rejestrów: rejestry ogólnego przeznaczenia (nazywane rejestrami roboczymi) oraz rejestry statusowe/kontrolne.

  • Zestaw rejestrów roboczych zawiera:
    • Rejestry całkowitoliczbowe (rejestry r),
    • Rejestry zmiennopozycyjne (rejestry f).
  • Zestaw rejestrów statusu/kontrolne zawiera, m.in.:
    • Rejestr licznika programu (PC),
    • Rejestr stanu procesora (PSTATE),
    • Rejestr adresu bazowego pułapki (TRAP),
    • Rejestr wskaźnika aktualnego okna (CWP),
    • i wiele innych...

Rejestry ogólnego przeznaczeniar, podzielone są na grupy: 8 rejestrów globalnych (ang. global registers), 8 alternatywnych rejestrów globalnych (ang. alternate global registers) oraz zależną od implementacji liczbę zestawów 24 rejestrów dostępnych jako okno rejestrów (ang. register window) podzielone jako: 8 rejestrów wejściowych (ang. in), 8 rejestrów lokalnych (ang. local) i 8 rejestrów wyjściowych (ang. out). Rejestry r[0] – r[7] stanowią zestaw rejestrów globalnych o nazwach odpowiednio g0 – g7. Rejestr globalny g0 (r[0]) zawiera zawsze wartość zero i zwraca ją podczas odczytu, natomiast podczas zapisu do tego rejestru zapisywana wartość jest ignorowana (tak naprawdę, to odwołanie do tego rejestru za pomocą pewnych instrukcji – LDD, LDA, STD, STA, powoduje zapisanie wyniku w rejestrze r[0]). Drugim specyficznym rejestrem jest r[15] do którego zapisywany jest adres instrukcji wywołania CALL. Wybór pomiędzy zestawami rejestrów globalnych – aktualnym i alternatywnym – odbywa się poprzez wybór w polu AG (ang. alternate global) rejestru stanu procesora PSTATE. Dodatkowy zestaw rejestrów globalnych został wprowadzony w specyfikacji v9. Przełączanie okien rejestrów ogólnego przeznaczenia r realizowane jest za pomocą instrukcji SAVE (zwiększająca numer aktywnego okna) oraz RESTORE (zmniejszająca numer aktywnego okna). Przekroczenie możliwych wartości w rejestrze CWP wskazującego na aktualne okno rejestrów jest kontrolowane przez zawartość rejestrów CANSAVE oraz CANRESTORE i w przypadku przekroczenia procesor generuje pułapkę (ang. trap).

Zestaw rejestrów zmiennopozycyjnych (ang. floating-point) f zawiera:

  • 32 rejestry pojedynczej precyzji (ang. single-precision – 32-bity) oznaczane jako f[0], f[1], – f[31],
  • 32 rejestry podwójnej precyzji (ang. double-precision – 64-bity) oznaczone jako f[0], f[2], – f[62],
  • 16 rejestrów poczwórnej precyzji (ang. quad-precision – 128-bitów) oznaczone jako f[0], f[4], – f[60].

Zestaw tej zorganizowany jest w ten sposób, że rejestry mogą na siebie nachodzić. Zestaw ten w przeciwieństwie do rejestrów ogólnego przeznaczenia nie jest podzielony na okna rejestrów i jest dostępny cały czas. Dostęp i operacje wykonywane na tych rejestrach realizowany jest za pomocą specjalnych instrukcji zmiennopozycyjnych FPop. Zestaw rejestrów oraz wykonywane na nich operacje zgodne sa z normą IEEE std 754-1985.

Architektura SPARC-v9 zawiera kilka specyficznych, w porównaniu do x86 i innych znanych procesorów, aspektów, m.in.:

  • instrukcje warunkowego przesłania danych – stosowane w przypadku prostego warunkowego przypisania zmiennych, umożliwiają wyeliminowanie instrukcji skoku
  • instrukcje wymuszające wstępne pobranie danych (ang. prefetch) – umożliwiają zminimalizowanie opóźnienia związanego z dostępem do danych które nie znajdują się w pamięci cache
  • instrukcje załadowania danych które nie generują wyjątków (ang. nonfaulted-load) – stosowane główne ze względu na możliwość dostępu do danych z wyprzedzeniem, a które to wyprzedzenie mogłoby naruszyć zasady ochrony danych
  • instrukcje skoków opóźnionych – wszystkie instrukcje zmieniające sekwencję wykonania programu (z wyjątkiem instrukcji: DONE, RETRY i instrukcji pułapek Tcc) powodują modyfikację rejestru nPC (rejestr ten wskazuje zawsze na instrukcję która będzie wykonywana po instrukcji następnej do wykonania wskazywanej przez rejestr PC) i skutkują zawsze wykonaniem jednej instrukcji następującej bezpośrednio za tą instrukcją
  • architektura jest standardowo typu big-endian, lecz tak naprawdę jest niezależna od zastosowanej konwencji i może wprost obsługiwać dane jako little-endian, właściwość ta zmieniana jest za pomocą bitu w rejestrze stanu procesora PSTATE za pomocą instrukcji uprzywilejowanej.

Organizacja SPARC International

SPARC International została założona w 1989 roku jako niezależna organizacja niekomercyjna (ang. non-profit) w celu nadzorowania i kierowania rozwojem architektury SPARC. Organizacja posiada prawa do modelu programowego (ang. ISA – Instruction Set Architecture) architektury SPARC, znaków handlowych (ang. trademarks) SPARC, oraz pochodnych znaków handlowych (ang. derivative trademarks – TM) SPARC. Organizacja jest utrzymywana wyłącznie przez członków organizacji wspierających architekturę SPARC oraz technologie otwartych standardów. Członkami organizacji SPARC są m.in.: Fujitsu, ORACLE America (dawniej Sun Microsystems), Texas Instruments, LSI Logic, Toshiba Corporation oraz wiele mniej lub bardziej znanych firm.

Producenci procesorów SPARC

Linki zewnętrzne

Media użyte na tej stronie

SPARC-okno-rejestrow.png
SPARC-zasada działania okna rejestrów
Sun UltraSPARCII.jpg
Autor: unknown, Licencja: CC-BY-SA-3.0