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.