Architektura Komputerów/Wykład 1: Teoria


Plan wykładu



• Pojęcie komputera
• Taksonomie architektur komputerowych
• Pojęcie hierarchii pamięci
• Maszyna von Neumanna
• Architektury Harvard, Princeton, Harvard-Princeton


Komputer



• Urządzenie do przetwarzania danych, wyposażone w możliwość wprowadzania, przechowywania i wyprowadzania danych
• wprowadzanie i wyprowadzanie danych może być realizowane w postaci odpowiedniej dla człowieka (klawiatura, ekran) lub właściwej dla współpracy z jakimś obiektem (np. czujnik temperatury grzejnik)


Taksonomie


• Służą do klasyfikacji architektur komputerowych
• podział na kategorie
• określanie własności
• Taksonomia Flynna - 1968
• prosta
• ma znaczenie historyczne - należy ją znać
• Taksonomia Skillicorna - 1988
• ilustruje strukturę komputera
• stosunkowo mało znana, ale przyda się do wyjaśnienia kilku istotnych elementów podczas kursu


Taksonomia Flynna



• Zaproponowana przez Michaela J. Flynna około 1968 roku
• Zakłada, że komputer jest urządzeniem przetwarzającym strumienie danych na podstawie strumieni instrukcji
• Klasyfikuje komputery według liczby strumieni instrukcji i danych
• Liczba strumieni może wynosić 1 lub n (więcej niż 1)


Taksonomia Flynna - tabela


Rysunek przedstawia oryginalną tabelę taksonomii Flynna. Są w niej umieszczone cztery klasy architektur komputerowych.


Typy architektur Flynna


• SISD (Single Instruction stream, Single Data stream)
• pojedynczy strumień instrukcji i danych
• przykład: uniprocesor von Neumanna
• najbardziej rozpowszechniony typ architektury
• SIMD (Single Instruction stream, Multiple Data streams)
• jeden strumień instrukcji, wiele strumieni danych
• jedna instrukcja powoduje wykonanie tej samej operacji na wielu kompletach danych
• przykład: procesor wektorowy lub macierzowy
• Ml SD (Multiple Instruction streams, Single Data stream)
• nie bardzo wiadomo, co to jest (procesor potokowy?)
• Ml MD (Multiple Instruction streams, Single Data stream)
• przykład: wieloprocesor. wielokomputer


Przykładem architektury klasy SISD jest najbardziej rozpowszechniona architektura – uniprocesor von Neumanna, opisany w dalszym ciągu wykładu.


Klasa MISD jest dość problematyczna – trudno wskazać wzorcowego reprezentanta tego typu. Można przyjąć, że założenia MISD w pewnym sensie realizują maszyny potokowe, np. procesory graficzne.


Do klasy MIMD należą tzw. wieloprocesory lub wielokomputery von Neumanna, czyli maszyny złożone z wielu połączonych uniprocesorów von Neumanna.



Rozszerzenie taksonomii Flynna



Tabelę Flynna można rozszerzyć o dodatkowy wiersz i kolumnę, odpowiadające zerowej liczbie strumieni instrukcji i danych. Urządzenie bez strumieni danych nie jest komputerem – w tej części tabeli można by umieścić niektóre automaty. Znacznie bardziej interesujący jest wiersz odpowiadający architekturom bez strumieni instrukcji. Są to tzw. komputery sterowane przepływem danych.



• Urządzenia bez strumieni danych nie są komputerami
• komputer musi przetwarzać dane
• Urządzenia bez strumieni instrukcji mogą przetwarzać dane
• same dane mogą nieść informacje o potrzebnym przetwarzaniu
• są to tzw. maszyny sterowane przepływam danych (dataflow)
• Możemy wyróżnić uniprocesory i wieloprocesory Dataflow


Komputery sterowane przepływem danych



• Jednostka przetwarzana - token
• zawiera dane oraz "metkę" (tag), opisującą zawartość
• metka jest odpowiednikiem instrukcji, opisującej, co należy zrobić z danymi
• W wyniku przetworzenia uzyskuje się nowy token, zawierający zmodyfikowane dane i zmodyfikowaną metkę
• Przetworzony token może podlegać dalszemu przetwarzaniu
• Maszyny dataflow nie są obecnie konstruowane
• ok. 1985 roku firma NEC produkowała mikroprocesor dataflow
• Paradygmat przetwarzania sterowanego przepływem danych jest używany do opisu procesów przetwarzania informacji
• nie ma to nic wspólnego ze sprzętem komputerowym

Komputer sterowany przepływem danych nie ma jawnych instrukcji. Operuje on na tzw. „tokenach”, czyli obiektach złożonych z danych i opisujących je znaczników – metek.


Metka zastępuje instrukcję. Na podstawie metki procesor sterowany przepływem danych przekształca cały token- zarówno dane jak i metkę, tworząc nowy token.


O ile maszyny dataflow nie są współcześnie konstruowane, to samo podejście dtaflow jest używane do opisu procesów informacyjnych.



Taksonomia Flynna - podsumowanie




• Taksonomia Flynna nie ma istotnego znaczenia - poza historycznym
• Cztero literowe skróty - symbole architektur - są w powszechnym użyciu i należy je znać


Taksonomia Skillicorna



• Zaproponowana około 1988 roku przez Davida Skillicorna
• Taksonomia opisuje budowę komputera jako strukturę złożoną ze składników
• Dwa poziomy szczegółowości 
• tutaj przedstawimy tylko jeden

Taksonomia Skillicorna jest zbudowany całkowicie odmiennie od taksonomii Flynna. Zakłada ona, że każda architektura stanowi połączenie pewnej liczby składników. W ten sposób taksonomia syntetyzuje architekturę, zamiast ją klasyfikować.


Abstrakcyjne składniki architektury



• "abstrakcyjne" - bo nie ma bezpośredniej odpowiedniości pomiędzy składnikami modelu Skillicorna i fizycznymi elementami komputera
• Składniki:
• Procesory instrukcji (IP) - pobierają i analizują instrukcje
• Procesory danych (DP) - wykonują operacje na danych
• Hierarchie pamięci instrukcji (IM) - przechowują instrukcje
• Hierarchie pamięci danych (DM) - przechowują dane - argumenty operacji i wyniki
• Procesory nie zawierają żadnych elementów pamiętających
• Z definicji każdemu procesorowi odpowiada jedna hierarchia pamięci
• nawet jeśli w rzeczywistej strukturze komputera jest inaczej

Taksonomia Skillicorna posługuje się abstrakcyjnymi składnikami architektury. Procesory instrukcji pobierają instrukcje z hierarchii pamięci instrukcji i przekazują je procesorom danych do wykonania. Procesory danych wykonują operacje na danych pobieranych z hierarchii pamięci danych i zapisują wyniki tych operacji z powrotem do hierarchii pamięci. Same procesory danych nie zawierają żadnych elementów pamiętających.


W modelach architektur przyjmuje się, że liczba hierarchii pamięci jest równa liczbie procesorów danego typu. Oznacza to, że model architektury ze wspólną hierarchią pamięci dla kilku procesorów jest przedstawiany jako model z kilkoma hierarchiami pamięci i możliwością dostępu każdego procesora do każdej hierarchii pamięci.



Budowa modeli w taksonomii Skillicorna



• Każdy procesor instrukcji współpracuje z hierarchią pamięci instrukcji, a procesor danych - z hierarchią pamięci danych
• Liczba procesorów danych może wynosić 1 lub N, a procesorów instrukcji - 0, 1 lub N
• Połączenia składników:
• Procesory z hierarchiami pamięci
• Procesory instrukcji z procesorami danych
• Procesory jednego rodzaju pomiędzy sobą
• Rodzaje połączeń:
• 1 - 1 
• 1 - N
• N - N ("każdy ze swoim", czyli N połączeń 1 - 1)
• N x N ("każdy z każdym")

Tworząc modele w taksonomii Skillicorna przyjmuje się kilak założeń. Liczba hierarchii pamięci jest równa liczbie procesorów. Komputer musi zawierać przynajmniej jeden procesor danych. Dozwolone są połączenia pomiędzy procesorami i hierarchiami pamięci tego samego rodzaju (kodu albo danych) oraz połączenia pomiędzy procesorami.


Taksonomia Skillicorna - składniki



Rysunek przedstawia prosty model w taksonomii Skillicorna (jest to model uniprocesora von Neumanna). Procesory są oznaczone symbolicznie kołami, a hierarchie pamięci – trójkątami. Strzałki reprezentują połączenia i kierunki przesyłania informacji.


Strzałki pionowe z prawej strony procesorów i hierarchii pamięci reprezentują żądania dostępów, a strzałki po prawej stronie – przepływ instrukcji i danych. Na kolejnych rysunkach podwójne strzałki zostaną zastąpione pojedynczymi, reprezentującymi kierunki przepływu danych i instrukcji, z pominięciem żądań dostępu.



Współpraca składników



• Procesor instrukcji - hierarchia pamięci instrukcji
• Procesor przesyła do hierarchii pamięci żądania pobrania instrukcji
• Hierarchia pamięci instrukcji zwraca instrukcje
• Procesor instrukcji - procesor danych
• procesor instrukcji przesyła instrukcje w postaci zrozumiałej dla procesora danych
• procesor danych zwraca informacje o stanie przetwarzania oraz informacje dotyczące przebiegu wykonania programu
• Procesor danych - hierarchia pamięci danych
• procesor przesyła żądania odczytu i zapisu danych
• hierarchia pamięci przesyła dane - argumenty operacji
• Procesor danych - procesor danych - wymiana danych


Procesor instrukcji przesyła do hierarchii pamięci instrukcji żądanie pobrania instrukcji. W odpowiedzi otrzymuje instrukcje. instrukcje przesyłane są po zdekodowaniu do procesora danych, który wykonuje operacje na danych.


Procesor danych przesyła do hierarchii pamięci żądania operacji odczytu i zapisu. Dane pomiędzy procesorem danych i hierarchią pamięci danych przesyłane są w dwóch kierunkach (strzałka po prawej stronie).


Procesor danych przesyła do procesora instrukcji informacje o stanie przetwarzania, umożliwiające procesorowi instrukcji decydowanie o dalszym przebiegu wykonania programu w zależności od wyników przetwarzania danych.



Modele w taksonomii Skillicoma




• Można zbudować około 30 różnych modeli architektur
• Tylko 6 z tych modeli ma sensowne znaczenie:
• uniprocesor dataflow
• wieloprocesor dataflow
• uniprocesor von Neumanna (SISD)
• procesor wektorowy (SIMD)
• wieloprocesor słabo sprzężony (MIMD)
• wieloprocesor silnie sprzężony (MIMD)
• Sprzężenie pomiędzy procesorami tego samego typu
• ma sens tylko dla procesorów danych
• słabe - przez kanał komunikacji pomiędzy procesorami
• silne - poprzez wzajemny dostęp do hierarchii pamięci (praktycznie wspólna hierarchia pamięci)

Spośród około 30 możliwych topologicznie modeli tylko 7 reprezentuje realizowalne architektury komputerów.


Architektury dataflow




Uniprocesor von Neumanna i procesor wektorowy




Wieloprocesory von Neumanna




Hierarchia pamięci




• nie da się zbudować pamięci o dowolnie dużej pojemności i dowolnie krótkim czasie dostępu
• czas dostępu rośnie z pojemnością
• struktura hierarchiczna-warstwowa
• kolejne warstwy mają coraz większe pojemności i czasy dostępu

Taksonomia Skillicorna posługuje się pojęciem hierarchii pamięci w miejsce dużo bardziej popularnego pojęcia pamięci. Słowo „hierarchia” dobrze oddaje budowę pamięci współczesnego komputera, w którym znajduje się kilka bloków funkcjonalnych służących do przechowywania programów i danych.


Idealny komputer powinien mieć jak największą i jak najszybszą pamięć. Pojemność pamięci wpływa na jej fizyczne rozmiary, a te – na czas dostępu. Nie można więc zbudować dowolnie dużej i jednocześnie szybkiej pamięci.


Problem ten rozwiązuje się przez wyodrębnienie wielu warstw o zróżnicowanej pojemności i szybkości, tworzących razem hierarchię pamięci. Kolejne warstwa w miarę oddalania się od procesora mają coraz większe pojemności i coraz dłuższe czasy dostępu.



Warstwy hierarchii pamięci



• rejestry
• kieszenie (1..3 poziomów)
• pamięć operacyjna
• pamięć masowa (rozszerzenie p. operacyjnej w systemie pamięci wirtualnej)
• pamięć masowa (system plików)
• nośniki wymienne, zasoby sieciowe

Hierarchia pamięci współczesnego komputera, z punktu widzenia konstrukcji komputera, składa się z czterech warstw.


Rejestry fizycznie znajdują się wewnątrz procesora, dzięki czemu dostęp do nich jest bardzo szybki.


Kieszenie, wprowadzone po raz pierwszy około 1968 roku, zapewniają buforowania danych pomiędzy procesorem i pamięcią operacyjną w celu przyspieszenie dostępu do pamięci.


Warstwa pamięci wirtualnej, powstała również około 1968 roku, zapewnia rozszerzenie pamięci operacyjnej.


Z punktu widzenia użytkownika do hierarchii pamięci należy zaliczyć wszelkie zasoby służące przechowywaniu danych. Logiczne staje się więc uzupełnienie rysunku o lokalny system plików komputera oraz o zasoby zdalne, w postaci nośników wymiennych i serwerów sieciowych.



Sterowanie hierarchią pamięci




• najczęściej używane obiekty przemieszczane w górę hierarchii

• sterowanie przemieszczaniem
• programista piszący program/kompilator
• sprzęt
• system operacyjny
• program użytkowy/użytkownik
• użytkownik

O ile zasada działania hierarchii pamięci dotyczy wszystkich warstw, to mechanizmy sterujące przemieszczaniem danych pomiędzy poszczególnymi warstwami są różne.


O umieszczeniu danych w rejestrach decyduje programista piszący program w języku asemblerowym lub kompilator języka wysokiego poziomu.


Styk warstwy kieszeni i pamięci operacyjnej jest sterowany na poziomie sprzętu. Stykiem pamięci operacyjnej i wirtualnej steruje system operacyjny przy użyciu jednostki zarządzania pamięcią.


O umieszczeniu danych w pamięci wirtualnej decyduje użytkownik – otwierając plik danych lub uruchamiając program.


Przemieszczaniem danych pomiędzy lokalnym systemem plików i nośnikami wymiennymi lub zasobami sieciowymi steruje użytkownik.



Hierarchia pamięci - rok 2006



Tabela przedstawia orientacyjne parametry poszczególnych warstw hierarchii pamięci. Należy zwrócić uwagę na dużą różnicę czasów dostępu kieszeni i pamięci – czas podany dla pamięci dotyczy pojedynczego, losowego dostępu do pamięci dynamicznej typu DDR.


Maszyna von Neumanna



• Instrukcje tworzące program są przechowywane w pamięci w taki sam sposób, jak dane

• Pamięć składa się z pewnej liczby ponumerowanych komórek
• dostęp do pamięci następuje poprzez podanie przez procesor numeru komórki
• numer komórki nazywamy ADRESEM
• Z powyższych postulatów wynika w praktyce, że
• zazwyczaj komputer będzie pobierał kolejne instrukcje programu z kolejnych komórek pamięci
• komórki te będą wybierane przez zwiększający się adres, który powinien być przechowywany i inkrementowany w procesorze
• adres ten jest przechowywany w specjalnym rejestrze - tzw. liczniku instrukcji (Program Counter - PC)

Architektura von Neumanna jest określona przez zestaw cech. Model maszyny von Neumanna wprowadza specyficzny mechanizm dostępu do pamięci – poprzez adres.


Z takiej organizacji pamięci i z faktu przechowywania w niej programu wynika z kolei obecność rejestru licznika instrukcji.



Warianty organizacji hierarchii pamięci w realizacjach maszyn von Neumanna




• „Harvard" - oddzielne hierarchie pamięci programu i danych

• „Princeton" - wspólna hierarchia pamięci programu i danych

• Na następnych ekranach będziemy posługiwali się symbolami wziętymi z taksonomii Skillicorna w sposób niezgodny z zasadami tworzenia modeli obowiązującymi w tej taksonomii
• nie będą to modele Skillicorna!!!
Dwa warianty architektury von Neumanna różnią się sposobem przechowywania instrukcji i danych. Architektura Harvard jest niekiedy uważana za architekturę nie spełniającą postulatów von Neumanna wobec faktu oddzielnego przechowywania instrukcji i danych.


Kolejne rysunki posługują się symbolami zapożyczonymi z taksonomii Skillicorna w sposób sprzeczny z zasadami budowy modeli wprowadzonymi przez tę taksonomię.



Architektura Harvard





• Realizacja maszyny von Neumanna z oddzielnymi hierarchiami pamięci programu i danych
• często uznawana za architekturę nie-vonneumannowską ze względu na dyskusyjność zachowania postulatu o jednakowym składowaniu instrukcji i danych

• Wysoka wydajność dzięki możliwości równoczesnego pobierania instrukcji i operacji na hierarchii pamięci danych

• Brak możliwości zapisu instrukcji do hierarchii pamięci instrukcji
• czyli brak możliwości programowania
• komputer dostarczany ze stałym programem
• dopuszczalne tylko w zastosowaniach wbudowanych


Architektura Princeton





• "Wzorcowa" realizacja maszyny von Neumanna ze wspólną hierarchią pamięci instrukcji i danych

• Wspólna hierarchia wyklucza równoczesne pobieranie instrukcji i operacje na danych
• tzw. von Neumann bottleneck
• Nieograniczone możliwości modyfikacji programu
• obiekt zapisany przez procesor danych do hierarchii pamięci jako dany może być następnie pobrany przez procesor instrukcji jako instrukcja
• możliwość programowania - potrzebna w komputerach uniwersalnych
• program może sam siebie modyfikować (automodyfikacja)
  •  nie zawsze jest to pożądana cecha


Architektura Harvard-Princeton



Hierarchia pamięci w architekturze Harvard-Princeton charakteryzuje się częściowym rozdzieleniem hierarchii pamięci. Co najmniej jeden poziom kieszeni jest oddzielny dla hierarchii pamięci instrukcji i danych.



• Realizacja maszyny von Neumanna z oddzielnymi górnymi warstwami hierarchii pamięci i wspólnymi warstwami dolnymi

• Przynajmniej jeden poziom kieszeni jest oddzielny dla procesorów instrukcji i danych

• Większość odwołań do hierarchii pamięci jest realizowanych w górnych warstwach
• szybkie działanie dzięki równoległości dostępów jak w architekturze Harvard

• Wspólne dolne warstwy hierarchii umożliwiają zapis programu
• programowalność - niezbędna w komputerach uniwersalnych

Architektura Harvard-Princeton łączy zalety architektury Harvard (wydajność) i Princeton (programowalność). Programowalność nie jest tu jednak dokładnie taka sama, jak w architekturze Princeton.


Harvard-Princeton - modyfikacja programu



• Program użytkowy nie ma pełnej kontroli nad położeniem obiektów w hierarchii pamięci
• brak możliwości automodyfikacji

• Kontrolę taką może mieć system operacyjny
• jeden program (proces) może modyfikować drugi
• możliwość ładowania programu np. z pliku
• Architektura Harvard-Princeton zaspokaja potrzeby programowalności bez narażania bezpieczeństwa
• automodyfikacja jest niebezpieczna

• Większość współczesnych komputerów uniwersalnych ma architekturę Harvard-Princeton
• w tym wszystkie współczesne komputery PC

Wszystkie produkowane współcześnie procesory do komputerów uniwersalnych mają architekturę Harvard-Princeton, z rozdzielonymi kieszeniami kodu i danych.