Pseudosuperskalar (Intel 860) - Procesor

Transkrypt

Pseudosuperskalar (Intel 860) - Procesor
SUPERSKALARY:
- Pseudosuperskalar (Intel 860) - Procesor pseudosuperskalarny nie ma możliwości decydowania o
równoczesnym wykonaniu instrukcji, decyzję podejmuje programista lub kompilator
- Superskalar z kolejnym wykonaniem instrukcji - wstrzymanie jednego potoku, powoduje
równoczesne wstrzymanie wszystkich, wykonanie jest możliwe, gdy instrukcje nie zależą od instrukcji
poprzedzających kierowanych do wykonania w tym samym cyklu
- Superskalar z kolejnym rozpoczynaniem i niekolejnym kończeniem - Stopień szeregujący rozpoczyna
wykonanie w kolejności programowej, instrukcje mogą być kończone w innej kolejności od programowej
( błędy asynchronizacyjne )
- Superskalar z niekolejnym wykonaniem instrukcji ( Core ) - Skierowanie instrukcji do wykonania
zachodzi wtedy, gdy są gotowe argumenty źródłowe, instrukcję uznaje się za ostatecznie wykonaną, jeśli
również wszystkie instrukcje ją poprzedzające zostały wykonane, przed ostatecznym zakończeniem
wykonania instrukcja nie może w sposób trwały modyfikować kontekstu procesora ani pamięci
Problemy:
- WAR, RAW - hazardy usunięte przez przemianowanie rejestrów - dodanie większej ilości rejestrów
fizycznych, pozostawienie logicznych bez zmian - Każda instrukcja opuszczająca stopień szeregujący
otrzymuje „nowy” fizyczny rejestr docelowy, zastępujący numer rejestru modelu programowego
Przewidywanie skoków i redukcja opóźnień:
- Utworzenie buffora docelowego skoków ( BTB ), zawierającego historię skoków, równocześnie z
pobraniem każdej instrukcji następuje przeszukanie bufora z wartością scanPC jako kluczem. W
podstawowej formie nie może przewidywać skoków dynamicznych i warunkowych ze zmiennym
warunkiem
- Predyktor - Automaty decydujące o sposobie spekulatywnego wykonania
przewidywanego skoku warunkowego na podstawie historii
wykonania programu, istnieją:
- dwustanowe, najprostsze
- czterostanowe, z "silnymi" i "słabymi" realizowalnościami skoku
- dwupoziomowe ( korelatory ) - Powolne „uczenie się” predyktora, lecz trafność na poziomie 95%,
niewrażliwość na nieregularność wykonania, Predyktor gLocal lepiej przewiduje pętle iterowane niewielką
liczbę razy, zaś gShare lepiej przewiduje rozejścia zależne od wartości danych
- trójpoziomowy - jest hybrydą dwóch predyktorów, zwykle gLocal i gShare, zmiana wyboru
schematu dla danego skoku zachodzi, gdy dotychczas wybrany schemat przewidział skok błędnie, a
alternatywny schemat – poprawnie
KIESZENIE:
- Kieszeń pełnoasocjacyjna - mała pojemność, dostęp do danej następuje poprzez porównanie danej w
kieszeni z wzorcem dostarczonym z zewnątrz, kieszeń może równocześnie przechowywać dane spod
dowolnych adresów – duża elastyczność w porównaniu z następnymi architekturami
Kieszeń bezpośrednio adresowana - szybka, duża pojemność, zbudowana na bazie zwykłej, szybkiej
pamięci RAM i jednego komparatora, w kieszeni nie można zapamiętać dwóch danych, których środkowe
części adresu są identyczne
Kieszeń zbiorowo-asocjacyjna - powstaje z połączenia paru pamięci asocjacyjnych, charakterystyka
podobna do kieszeni bezpośrednio adresowanej, ale bez wady dotyczącej środkowych części adresu
Kieszenie wielopoziomowe:
- Kieszenie inkluzywne - Każdy obiekt zawarty w wyższej warstwie jest również obecny w
warstwie niższej -> Pojemność L2 musi być znacząco większa od L1
- Kieszenie wyłączne - Kieszeń L2 ( kieszeń ofiar ) jest napełniana wyłącznie obiektami usuwanymi z L1,
Efektywna sumaryczna pojemność kieszeni jest równa sumie pojemności poszczególnych warstw kieszeni
Protokoły utrzymania spójności w kieszeniach, wartości linii:
M - modified - linia ważna, jedyna aktualna kopia we własnej kieszeni, zawartość pamięci
nieaktualna
- E - exlusive - linia ważna, jedyna kopia we własnej kieszeni, identyczna z zawartością
pamięci
- I - invalid - linia nieważna
- S - shared - linia ważna, jednakowa kopia u wszystkich, identyczna z zawartością pamięci
- O - owned - linia ważna, jednakowa kopia u wszystkich, u pozostałych stan S, zawartość
pamięci nieaktualna
Protokoły: ( nazwy pochodzą od stanów )
- MEI, MESI, MOESI
OCHRONA SYSTEMU:
Poziomy zaufania:
- poziom jądra systemu – pełny dostęp do wszystkich zasobów
- poziom usług systemu (opcjonalny) – dostęp ograniczony, ale o
znacznych uprawnieniach
-poziom użytkownika – dostęp do zasobów przydzielonych przez
system, na zasadach określonych przez system
- System ma możliwość zakończenia wykonania procesu naruszającego zasady ochrony i
usunięcia go
- Praca z przydziałem czasu jest realizowana poprzez periodyczne przejmowanie kontroli przez system
operacyjny
- Ochrona urządzeń wejścia - wyjścia: zwykle realizowana przez całkowite odizolowanie procesów
użytkowych od fizycznych urządzeń, fizyczną obsługą urządzeń zajmuje się system operacyjny
Maszyny wirtualne: Współdzielenie komputera przez kilka systemów wymaga:
- oprogramowania nadrzędnego w stosunku do systemów – hypervisora
- obniżenia poziomu zaufania systemu w sposób, który nie byłby zauważalny przez pracujący w ten sposób
system
ZARZĄDZANIE PAMIĘCIA:
- Jednostka zarządzania pamięcią - jednostka tłumacząca adres logiczny ( widoczny dla modelu
programowego ) na rzeczywisty adres fizyczny
- Prosta relokacja - system operuje w fizycznej przestrzeni adresowej, przestrzeń adresowa procesu ma
postać jednego, ciągłego bloku. Obszar może być rozszerzony, o ile obszar położony
bezpośrednio za nim nie jest zajęty przez inny proces, jednak powoduje to fragmentacje pamięci - powstanie
wielu pustych miejsc w pamięci o małym rozmiarze, wywołane alokacją i delokacją. Niemożliwa jest
wirtualizacja pamięci.
- Segmentacja - przestrzeń adresowa podzielona na kod, dane statyczne, stos i sterte. Logiczna przestrzeń
jest dwuwymiarowa, zaś adres logiczny składa się z dwóch członów - identyfikatora segmentu oraz
adresu wewnątrzsegmentowego (offset)
Zasada działania:
- Na podstawie identyfikatora segmentu jednostka segmentacji
odnajduje deskryptor segmentu ( znacznik ważności, prawa dostępu, rozmiar, liniowy adres )
- Jeżeli błąd nie zostanie wykryty, jednostka segmentacji generuje adres liniowy odwołania poprzez
zsumowanie liniowego adresu bazowego z deskryptora segmentu z adresem wewnątrzsegmentowym
przesłanym przez jednostkę wykonawczą
Zalety: skuteczna relokacja, bardzo dobra ochrona
Wady: komplikacja modelu programowego, problematyczna i niewydajna dynamiczna alokacja,
nieralizowalność wirtualizacji.
- Stronicowanie: Polega na podziale logicznej i fizycznej przestrzeni adresowej na
bloki o długości wyrażonej potęgą liczby 2, naturalnie wyrównane, realizowane przez jednostkę
stronicowania. Podstawową strukturą sprzętową jednostki stronicowania jest bufor translacji - jest kieszenią
pełnoasocjacyjną lub zbiorowo-asocjacyjną, przechowuje pewną liczbę ostatnio używanych ważnych
deskryptorów stron
Translacja adresu w jednostce stronicowania:
- Na podstawie VPN ( nr. str. wirtualnej ) bufor translacji odnajduje deskryptor strony
- Jeżeli informacja o typie dostępu z jednostki wykonawczej nie jest zgodna z prawami dostępu
opisanymi w deskryptorze jednostka stronicowania zgłasza błąd i blokuje dostęp
- W przeciwnym razie adres fizyczny powstaje przez konkatenację
fizycznego numeru strony i adresu wewnątrzstronicowego
Duża liczba stron umożliwia elastyczne określenie zbioru roboczego . W celu zmniejszenia
zajętości pamięci deskryptory przechowuje się w pamięci strukturach tablicowo-drzewiastych. Stały
rozmiar strony eliminuje fragmentację pamięci operacyjnej i masowej.
Każdy proces ma własne tablice deskryptorów. Odwzorowanie adresów wirtualnych w fizyczne jest
unikatowe dla każdego procesu
Redukcja chybień bufora translacji polega na braku wirtualizacji pewnych obszarów:
- jądro systemu
- cała pamięć fizyczna komputera odwzorowana w przestrzeni systemu
- urządzenia wejścia-wyjścia, np. sterownik graficzny (pamięć obrazu)
SYTUACJE WYJĄTKOWE:
Wyjątek - Zdarzenie w systemie komputerowym wymagające przerwania wykonania bieżącego strumienia
instrukcji i przekazania sterowania do systemu operacyjnego
- Przerwania: Powstają poza procesorem, asynchroniczne względem wykonywanych instrukcji, Służą do
sygnalizacji zdarzeń istotnych dla systemu operacyjnego ( np wciśnięcie klawisza )
- Pułapki: Generowane przez procesor, powodowane przez konkretną instrukcję, na końcu wykonania
instrukcji, sygnalizują błędy po wykonaniu instrukcji - MIPS – nadmiar w ADD, SUB, wywołanie
SYSCALL oraz w x86 - DIV, IDIV, AAM
- Błędy: generowane przez przez jednostkę wykonawczą jak i przez jednostkę zarządzania pamięcią
( wyjątek – błąd transmisji – generowany poza procesorem), służą do sygnalizacji błędnych i
niedozwolonych zachowań oprogramowania i sprzętu ( np. brak dostępu do pamięci )
Obsługa wyjątku przez procesor - fazy
1) Rozpoznanie i identyfikacja źródła wyjątku: jeżeli wyjątek powstał w procesorze ( błąd, pułapka ) to nie
musimy go identyfikować, jeśli nie to identyfikacja przez procesor wymaga przeprowadzenia zapytania, w
postaci specjalnego cyklu transmisji. Identyfikator jest generowany przez układ arbitrażu przerwań
2) Przerwanie wykonania strumienia instrukcji i zapamiętanie bieżącego kontekstu procesora:
Zapamiętywane wartości podczas obsługi wyjątku, należy zapamiętać systemowy rejestr stanu
procesora, czyli:
- PC i rejestr stanu z informacjami systemowymi
- informacje niezbędne do rozpoznania dokładnej przyczyny wyjątku, a które mogą zostać zamazane
w trakcie wykonania programu
- nextPC ( przerwania, pułapki wywołania systemu ) lub currentPC ( błąd wykonania i pułapki je
sygnalizujące - potrzebne do identyfikacji)
- należy zapamiętać poziom zaufania z chwili wystąpienia wyjątku
- należy zapamiętać poziom wrażliwości (tzw. maskę przerwań) z chwili wystąpienia przerwania
3) Załadowanie nowego kontekstu procesora i rozpoczęcie wykonywania nowego strumienia instrukcji –
procedury systemowej zapewniającej programową reakcję systemu na wyjątek
4) Powrót: Nie z każdej obsługi wyjątku powrót jest możliwy - błąd ochrony może wymagać zamknięcia
programu. Powrót polega na odtworzeniu informacji zapamiętanych podczas
obsługi (co najmniej PC i rejestr stanu).
Priorytety na poziomie systemu - wynikają z pilności zdarzenia
 przerwania – krytyczne czasowo
 pułapki (wywołanie systemu) – decyduje o wydajności aplikacji
 błędy – usunięcie programu, pamięć wirtualna
Priorytety na poziomie procesora – wynikają z logicznej sekwencji czynności w procesorze
 błędy – w razie błędu nie można zakończyć wykonania instrukcji
 pułapki – obsługa stanowi ostatnią fazę wykonania instrukcji
 przerwania – obsługiwane po zakończeniu wykonania instrukcji
System przerwań - Procesor może pracować na wielu poziomach priorytetowych,
różniących się wrażliwością na przerwania ( jednopoziomowe lub wielopoziomowe ). Informacja o
aktualnym poziomie wrażliwości jest przechowywana w rejestrze stanu procesora - jest to maska przerwań.
Podczas obsługi przerwania procesor modyfikuje poziom wrażliwości tak, aby nie były przyjmowane
następne przerwania o poziomie tym samym lub niższym, co aktualnie obsługiwane. Do obsługi krytycznych
wyjątków stosuje się przerwania niemaskowane.
OBSŁUGA WEJŚCIA - WYJŚCIA:
- Aktywne oczekiwanie - angażuje ( marnuje ) czas pracy procesora, nie wymaga dodatkowych urządzeń
- Obsługa z oczekiwaniem na przerwanie - niewielki narzut sprzętowy, skomplikowana obsługa wyjątków,
nie obciąża procesora, jednak dla szybkich urządzeń system spędza zbyt dużo czasu na obsłudze
- Bezpośredni dostęp do pamięci (DMA) - transmisja między urządzeniem a pamięcią bez użycia
procesora, dane transmitowane w blokach ( wtedy zajęta jest szyna ). Wbudowane w sterownik konkretnego
urządzenia, programowany przez procesor. Używany np do USB.
STRUKTURA KOMPUTERA:
- Architektura pamięciowo - centryczna: pamięć stanowi centrum komputera, mała elastyczność, koszty
- Architektura szynowa: łatwa rozbudowa i konfiguracja komputera, sterowniki we / wy widzane przez
procesor tak samo jak pamięć, wygodny model logiczny, jednak ograniczony poziom transmisji danych
- Architektura dwuszynowa - jedna szybka szyna łącząca procesor z pamięcią oraz druga szyna łączona
przez mostek północny, obsługująca sterowniki we/wy - jednak niewystarczająca dla szybkich urządzeń
- Architektura trzyszynowa - dołączony most południowy - jedna szyna dla procesora i pamięci -> most
północny -> szyna dla szybkich urządzeń -> most południowy -> szyna dla wolnych. Problemy to to, że
szyna szybka jest za wolna dla sterowników graficznych, a wolna szyna w sumie zbędna
- Architektura punkt - punkt: aktualna, same połączenia punkt - punkt z mostem północnym.
TSS - Wszystkie informacje niezbędne do zarządzania zadaniem są przechowywane w specjalnej
strukturze zwanej segmentem stanu zadania. Procedura posiadająca dostęp do deskryptora TSS może
wywołać przełączenie procesu. 104 pierwsze bajty są interpretowane przez mikrokod procesora.
GDT (Global Descriptor Table - Globalna Tablica Deskryptorów) zawiera podstawowe informacje o
segmentach. W trybie Rzeczywistym segmenty miały maksymalny rozmiar 64KB i następowały po sobie w
16 bajtowych odstępach. W trybie chronionym możesz samemu ustalać rozmiar segmentu aż do
maksymalnego rozmiaru 4GB. Możesz także decydować gdzie ma się zaczynać każdy segment.
Przykładowo tablicę GDT zarezerwuje dla siebie System Operacyjny a dla każdego procesu stworzy osobną
tablicę LDT z jego deskryptorami segmentów.
LDT (Local Descriptor Table - Lokalna Tablica Deskryptorów) także zawiera podstawowe informacje o
sektorach ale jest ona używana dla aplikacji.
IDT (Interrupts Descriptor Table - Tablica Deskryptorów Przerwań) zawiera podstawowe informacje o
przerwaniach. Tabela ta mówi procesorowi gdzie ma znaleźć adresy wywoływanych przerwań. Dla każdego
przerwania istnieje osobny deskryptor którego rozmiar wynosi 8 bajtów. W każdym deskryptorze IDT
istnieje odniesienie do deskryptora GDT lub LDT opisującego segment w którym znajduje się wykonywany
kod przerwania
Bramy - deskryptory udostępniające inne deskryptory. Stosuje się je do wołania kodu o innym poziomie
zaufania.
- Brama Trap - obsługuje przerwania z kodem błędu
- Brama Interrupt - obsługuje zwykłe przerwania.
- Brama Call - automatycznie kopiuje parametry wołania ze stosu usera na stos systemu, pozwala z poziomu
użytkownika odwołać się do kodu na poziomie systemu.