Architektura komputerów
Struktura i organizacja typowego systemu komputerowego.
System komputerowy – układ współdziałania dwóch składowych: sprzętu komputerowego oraz oprogramowania, działających coraz częściej również w ramach sieci komputerowej.
Struktura systemu komputerowego składa się z pięciu zasadniczych warstw:
warstwa sprzętowa
programy narzędziowe
Sprzęt – zapewnia podstawowe możliwości obliczeniowe (procesor, pamięć, urządzenia wejścia/wyjścia) – podstawowe zasoby systemu komputerowego.
Oprogramowanie systemowe – kontroluje i koordynuje działanie zasobów sprzętowych przez zastosowanie różnych programów użytkowych dla różnych użytkowników. Warstwa tworzona przez twórców systemu operacyjnego – są to zazwyczaj wysoko wyspecjalizowani specjaliści.
Oprogramowanie narzędziowe – dogodne interfejsy użytkowe wspomagające zarządzanie zasobami sprzętowymi oraz usprawniające, modyfikujące oprogramowanie systemowe, zazwyczaj pisane przez niezależnych programistów, którzy mają na celu usprawnienia wykonywania programów w bardziej wygodny i wydajny sposób, a przy tym często eliminują błędy czy też niedociągnięcia oprogramowania systemowego.
Oprogramowanie użytkowe – określają sposoby użycia zasobów systemowych do rozwiązywania problemów obliczeniowych zadanych przez użytkownika (kompilatory, systemy baz danych, gry, oprogramowanie biurowe), tworzone przez programistów.
Użytkownicy – ludzie, maszyny, inne komputery, mają bezpośredni kontakt z oprogramowaniem użytkowym.
Organizacja systemu komputerowego to opis zależności sprzętowych, przedstawienie poszczególnych podzespołów komputera, który funkcjonuje według pewnych reguł i zasad, współpracuje ze sobą – by osiągnąć określony cel. Organizacja systemu komputerowego określa zasady, reguły, cele oraz sposób wspomagania działań poszczególnych podzespołów.
Budowa i działanie typowego procesora ogólnego przeznaczenia.
Procesor (ang. processor) - urządzenie cyfrowe sekwencyjne potrafiące pobierać dane z
pamięci, interpretować je i wykonywać jako rozkazy. Wykonuje on bardzo szybko ciąg
prostych operacji (rozkazów) wybranych ze zbioru operacji podstawowych określonych
zazwyczaj przez producenta procesora jako lista rozkazów procesora.
Procesor wykonywany jest zwykle jako układ scalony (struktura VLSI) zamknięty w
hermetycznej obudowie posiadającej złocone wyprowadzenia. Złoto jest konieczne, aby
zmniejszyć pojemności pasożytnicze połączeń oraz rezystancji połączeń. Jego sercem
jest monokryształ krzemu, na który naniesiono techniką fotolitografii szereg warstw
półprzewodnikowych. Tworzą one sieć od kilku do kilkudziesięciu milionów tranzystorów.
Połączenia wykonane są z metalu (aluminium, miedź). Ważnym parametrem procesora
jest rozmiar elementów tworzących jego strukturę. Im są one mniejsze tym niższe jest
zużycie energii, napięcie pracy oraz wyższa częstotliwość pracy.
Najważniejsze elementy budowy obecnie produkowanych procesorów to :
Jednostka arytmetyczno-logiczna (ALU) - układ cyfrowy przeprowadzający operację na liczbach całkowitych
Koprocesor, jednostka zmiennoprzecinkowa (FLU) – układ cyfrowy przeprowadzający
operację na liczbach zmiennoprzecinkowych
Rejestry procesora - komórki pamięci o niewielkich rozmiarach (najczęściej 4/8/16/32/64/128
bitów) umieszczone wewnątrz procesora i służące do przechowywania tymczasowych wyników
obliczeń, adresów lokacji w pamięci operacyjnej itd. Większość procesorów przeprowadza działania
wyłącznie korzystając z wewnętrznych rejestrów, kopiując do nich dane z pamięci i po zakończeniu
obliczeń odsyłając wynik do pamięci
Pamięć cache (pamięć podręczna) - Pamięć cache przyspiesza dostęp do relatywnie wolnej pamięci
RAM. Charakteryzuje się bardzo krótkim czasem dostępu. Jest używana do przechowywania danych,
które będą w niedługim czasie przetwarzane. Na współczesnych procesorach są 2 lub 3 poziomy
pamięci cache: L1, L2 i L3
Kontroler pamięci – nowoczesne procesory mają wbudowane kontrolery pamięci operacyjnej RAM,
dzięki czemu odciążony zostaje chipset płyty głównej, zwiększona zaś zostaje wydajność całego
systemu.
Zegar procesora – układ cyfrowy generujący sygnał determinujący szybkość przetwarzania
informacji w procesorze
Wykonywanie rozkazów przez procesor(y), przerwania, wyjątki.
Program składa się z zestawu rozkazów przechowywanych w pamięci. Procesor realizuje
proces wykonywania programu w dwóch etapach.
1. procesor odczytuje rozkaz z pamięci
2. procesor realizuje rozkaz
Wykonanie pojedynczego rozkazu jest nazywane cyklem rozkazu i dzieli się na
cykl pobierania i wykonania. Wykonywanie programu może być przerwane tylko w
określonych sytuacjach.
Na początku cyklu rozkazu procesor pobiera rozkaz z pamięci, o tym który to ma być
rozkaz decyduje licznik programu (PC). Po uruchomienia komputera licznik PC zaczyna
kolejno podawać adresy komórek pamięci zawierających rozkazy.
Pobrany rozkaz jest wprowadzony do rejestru rozkazu (RR). Rozkaz ten posiada formę
kodu binarnego określającego działanie, które ma podjąć komputer. Po interpretacji
rozkazu następuje jego wykonanie.
Przerwanie jest to sytuacja szczególna, w której procesor przerywa wykonywanie
aktualnego programu, (specjalny program zwany procedurą obsługi przerwania) a
następnie powraca do poprzednio wykonywanego programu.
Procedura wykonania przerwania może mięć związek z wykonaniem programu lub nie.
Większość przerwań ma charakter losowy. Programy obsługi przerwania są krótkimi
programami.
Ze względu na źródło sytuacji szczególnej przerwania dzielimy:
przerwania sprzętowe - są generowane przez urządzenia fizyczne
przerwania programowe - są zaplanowane przez programistę - polegają na
wstawieniu do kodu programu odpowiedniego polecenia (INT n - gdzie n to
numer przerwania)
przerwania awaryjne - procesor sam podejmuje decyzje o przerwaniu programu.
Wyjątek (ang. exception) jest mechanizmem przepływu sterowania używanym w mikroprocesorach oraz współczesnych językach programowania do obsługi zdarzeń wyjątkowych, a w szczególności błędów, których wystąpienie zmienia prawidłowy przebieg wykonywania programu. W momencie zajścia niespodziewanego zdarzenia generowany jest wyjątek, który musi zostać obsłużony poprzez zapamiętanie bieżącego stanu programu i przejście do procedury jego obsługi. W niektórych sytuacjach po obsłużeniu wyjątku można powrócić do wykonywania przerwanego kodu, korzystając z zapamiętanych informacji stanu. Przykładowo obsługa błędu braku strony pamięci polega najczęściej na pobraniu brakującej strony z pliku wymiany, co umożliwia kontynuowanie pracy programu, natomiast błąd dzielenia przez zero powoduje, że wykonywanie dalszych obliczeń nie ma sensu i musi zostać przerwane na trwałe.
Dane i ich przetwarzanie w systemie komputerowym.
Współczesne komputery działają w systemie binarnym. Wszystkie dane, na których
operuje komputer, są zapisane w postaci ciągów cyfr binarnych – bitów (BInary Digit),
interpretowanych najczęściej jako liczby binarne o długości 8x2^n bitów (np. 8, 16, 32,
64). Dane o charakterze nie liczbowym muszą być zapisane (zakodowane) w postaci liczb
lub grup liczb.
Każdy znak jest reprezentowany przez liczbę stanowiącą jego kod w tablicy kodowej.
Najczęściej używane kody:
ASCII – 128 pozycji. Zawiera 95 znaków widocznych (małe i wielkie litery alfabetu
łacińskiego, cyfry, znaki interpunkcyjne, podstawowe symbole matematyczne)
i 33 niewidoczne (odstępy (spacja – kod 32 ), inne znaki formatujące)
UNICODE – pierwotnie 216 obecnie 232 możliwych pozycji; reprezentacja
wszystkich znaków używanych na świecie (obecnie jest zdefiniowanych
kilkadziesiąt tysięcy znaków)
Dane na których może operować komputer można podzielić na:
Wartości logiczne (true/false)
Tekstowe
Liczbowe – całkowite (ujemne, nieujemne), niecałkowite (stałoprzecinkowe,
zmienno przecinkowe)
Dźwięki i inne sygnały jednowymiarowe
Obrazy rastrowe (Rasteryzacja – w grafice komputerowej działanie polegające na jak najwierniejszym
przedstawieniu płaskiej figury geometrycznej na urządzeniu rastrowym, dysponującym skończoną rozdzielczością.)
Jednostki informacji:
● bit(b) – najmniejsza jednostka informacji (0-1, TAK-NIE, TRUE-FALSE)
● bajt(B) – najmniejsza jednostka informacji adresowana przez procesor (8 bitów)
● słowo – jednostka informacji na której operuje komputer (1, 2, 4, 8, 16 bajtów)
● słowo procesora – jednostka informacji o długości naturalnej dla danego
procesora (długość odpowiada długości rejestrów – obecnie 32 lub 64 bity)
● słowo pamięci – jednostka informacji możliwa do przetransmitowania w jednym
cyklu transmisji do lub z pamięci. Czym większa długość tym szybsza transmisja
danych (obecnie 64 – 128 bitów)
Organizacja pamięci.
W komputerach uniwersalnych jednostką adresowania jest bajt. Dane wielobajtowe
zajmują odpowiednią liczbę komórek pamięci (i adresów). Słowo pamięci ma długość nie
mniejsza niż słowo procesora (zwykle 64 lub 128 bitów).
Istnieją dwie konwencje zapisu danych wielobajtowych (konwencje adresowania danych):
Little Endian – najmniej znaczący bajt pod najmniejszym adresem. Adres bajtu
odzwierciedla wagę bajtu w liczbie. Istotna cecha tego zapisu to , że jeżeli
zapiszemy w pamieci daną całkowitoliczbową w długim formacie (np. 64bity), to
przy dostępach do jej mniej znaczącej części o mniejszej długości (np. jednego,
dwóch lub czterech bajtów) adres danej będzie taki sam w każdym przypadku.
Jest to wygodne przy częstym rzutowaniu typów całkowitoliczbowych.
Big Endian – najbardziej znaczący bajt pod najmniejszym adresem. Dostęp do
danej całkowitoliczbowej w pamięci wymaga zmiany wartości adresu w zależności
od długości danej. Jeżeli liczba 32-bitowa zostanie zapisana pod adresem A to
jej wartość w postaci jednobitowej ma adres A+3. Zaletą tej konwencji jest
możliwość szybkiego porównywania łańcuchów tekstowych przy użyciu instrukcji
operujących na liczbach całkowitych o dł. 32 lub 64 bity. Wektor znaków (bajtów)
interpretowany jako liczba ma w najbardziej znaczącym bajcie pierwszy bajt
łańcucha. Zamiast więc prowadzić operację porównywania łańcuchów znak po
znaku, można ją wykonać posługując się grupami znaków o długości słowa
procesora.
Koncepcja „konwencjonalnej maszyny”, język maszynowy, asembler.
Język maszynowy (kod maszynowy) – język programowania, w którym zapis programu
wymaga instrukcji bezpośrednio jako liczb, które są rozkazami i danymi bezpośrednio
pobieranymi przez procesor wykonujący ten program.
Kod maszynowy może być generowany w procesie kompilacji (w przypadku języków
wysokiego poziomu) lub asemblacji (w przypadku asemblera). W trakcie procesu
tworzenia kodu maszynowego tworzony jest często kod pośredni, który może być
zapisywany w pliku o odpowiednim formacie. Kod pośredni poddawany jest linkowaniu,
które wygeneruje ostateczny obraz programu w taki sposób, że system operacyjny
będzie mógł go wczytać, z ewentualnym dostosowaniem argumentów będących adresami
do adresów odpowiednich bloków programu w pamięci, i wykonać zawarte w nim
instrukcje.
Ponieważ każdy typ procesora ma swój własny język maszynowy, jest to najmniej przenośny język programowania.
Asembler - język programowania niskiego poziomu powstały na bazie języków
maszynowych danego procesora poprzez zastąpienie kodów operacji ich mnemonikami
(składający się z kilku liter kod-słowo, które oznacza konkretną czynność procesora).
Dzięki stosowaniu kilkuliterowych skrótów poleceń zrozumiałych dla człowieka pozwala
to z jednej strony na tworzenie oprogramowania, z drugiej strony bezpośrednia
odpowiedniość mnemoników oraz kodu maszynowego umożliwia zachowanie wysokiego
stopnia kontroli programisty nad działaniem procesora. Składnia języka może być różna
w zależności od stosowanego procesora.
Przykładowe polecenia (mnemoniki) w języku Asembler x86:
mov ax, 0D625h
mov es, ax ; wprowadź do rejestru segmentowego ES wartość z AX wynoszącą
D625 szesnastkowo (54821 dziesiętnie)
mov al, 24
mov ah, 0 ; załaduj do rejestru AX wartość 24 (wyzeruj AH – starszą
połówkę rejestru AX i zapisz wartość 24 w młodszej AL)
int 21h ; wywołaj przerwanie nr 33 (21 szesnastkowo)
Pierwszym asemblerem był skonstruowany przez Konrada Zuse w 1945 r.
Pierwszym polskim asemblerem był SAS komputera XYZ z okolo 1958 r.
Połączenia wewnątrz i zewnątrz systemowe, urządzenia wejścia/wyjścia.
Urządzenie wejścia-wyjścia, urządzenie we/wy, urządzenie I/O (ang. input/output device) służy do komunikacji systemu przetwarzania danych (np. komputera) ze światem zewnętrznym – użytkownikiem, urządzeniem lub innym systemem przetwarzania danych. Urządzenie wejścia-wyjścia służy często do zamiany wielkości fizycznych na dane przetwarzane przez system lub odwrotnie. Np. mysz komputerowa przetwarza ruch ręki, odbiornik GPS aktualne położenie geograficzne, a Monitor komputera przetwarza dane komputerowe na obraz.
Dane wejściowe to te, które są przekazywane do systemu. Dane wyjściowe to te, które z systemu są wysyłane. Niektóre z urządzeń są typowymi urządzeniami wejścia, inne wyjścia, pozostałe natomiast jednocześnie wejścia i wyjścia.
typowe urządzenia wejścia to np.: klawiatura, mysz komputerowa, skaner, dżojstik, mikrofon. Mniej typowe to: odbiornik GPS, czytnik linii papilarnych, kamera internetowa.
typowe urządzenia wyjścia to np.: monitor, drukarka, głośniki, słuchawki. Mniej typowe: kontrolki stanu urządzenia, brzęczyk.
typowe urządzenia wejścia i wyjścia to np.: karta sieciowa, modem, ekran dotykowy, moduł Bluetooth, moduł IrDA, złącze USB oraz wszelkie inne nośniki danych z możliwością zapisu i odczytu.
Realizacja przetwarzania równoległego w systemach komputerowych.
Przetwarzanie równoległe jest to forma wykonywania obliczeń, w której
wiele instrukcji jest wykonywanych jednocześnie.
Ze względu na poziom, na którym sprzęt wspomaga operacje równoległe można wyróżnić komputery:
jednoprocesorowe wielordzeniowe (zawierające jeden procesor wielordzeniowy)
symetryczne wieloprocesorowe (zawierające kilka identycznych, równorzędnych procesorów)
oraz systemy składające się z wielu maszyn: klastry (grupa połączonych ze sobą
komputerów)systemy MPP (przetwarzanie współbieżne na wielu procesorach),
czy gridy (sieci komputerów).
Do prowadzenia obliczeń równoległych, oprócz sprzętu, konieczne są również odpowiednie algorytmy nazywane równoległymi. Są one trudniejsze w implementacji niż sekwencyjne[3], ponieważ współbieżność wprowadza dodatkowe możliwości popełnienia błędu. Powstają również dodatkowe problemy w uzyskaniu wysokiej wydajności z powodu dodatkowych nakładów na komunikację i konieczność synchronizacji obliczeń.
Poziomy równoległości:
Poziom programów – wiele programów wykonywanych równolegle dzięki
podziałowi czasu i wieloprocesorowości (problem: projektowanie algorytmów
równoległych)
Poziom procedur – równolegle wykonywanie procedur składających się na jeden
program (problem: podział programu na równolegle-szeregowe segmenty)
Poziom międzyrozkazowy – równoczesna realizacja różnych instrukcji tej samej
procedury (problem: analiza zależności między danymi)
Poziom wewnątrzrozkazowy – równoczesność realizacji operacji (mikrokodów)
składających się na jeden rozkaz (problem: rozbicie rozkazów na operacje i
konstrukcja sprzętu)
Optymalizacja wydajności procesora(ów) i systemu komputerowego.
Procesor:
- zwiększanie częstotliwości zegara taktującego
- zwiększanie wielkości rejestrów i pamięci podręcznych a także szybkości ich działania
- wielordzeniowość (skutek widoczny jedynie w aplikacjach wykorzystujących wielowątkowość)
- integrowanie kontrolerów: pamięci i we/wy
- zmiana procesu technologicznego – im niższy stopień procesu technologicznego, tym więcej
tranzystorów można umieścić na jednej strukturze krzemowej, mniejsze są odległości między nimi,
zmniejszane jest zapotrzebowanie na energię elektryczną oraz ilość wydzielanego ciepła
System komputerowy:
- wąskie gardła - wąskie gardła to potoczna nazwa elementów komputera spowalniający wymianę
informacji między najważniejszymi podzespołami takimi jak procesor, chipset, karta graficzna,
pamięć operacyjna. Wąskimi gardłami w typowym systemie komputerowym jest szyna danych
(mechanizm i fizyczne rozwiązania przesyłu danych), dysk twardy (w momencie konieczności
wczytania danych do pamięci operacyjnej), chipset płyty głównej wraz z kontrolerami I/O (problem
w komunikacji procesora z pamięcią operacyjną i/lub urządzeniami nie będącymi elementami płyty
głównej – np. karty graficznej) oraz sama pamięć operacyjna.
Sposoby usuwania:
- zwiększanie wydajności dysków twardych (zwiększenie szybkości obrotowej talerzy, ulepszenie
interfejsów we/wy (SATA, SAS, SCSI, FibreChannel), rezygnacja z mechanicznych elementów
dysków twardych – dyski w technologii SSD), tworzenie fizycznych macierzy dyskowych
wykorzystujących mechanizm zapisu równoległego (dane są dzielone na części, a następnie
zapisywane równolegle na kilku dyskach twardych)
- udoskonalenie szyn pamięci – zwiększenie ich przepustowości, najczęściej poprzez zwiększenie
częstotliwości przesyłu informacji
- wielokanałowość pamięci operacyjnej – obecnie stosowane technologie dual- i triple-channel,
dzięki którym, podobnie jak w przypadku macierzy dyskowych, dane są rozdzielane między banki
pamięci i wykorzystywane równolegle
- umieszczenie kontrolerów pamięci oraz kontrolerów we/wy w samym procesorze – dzięki temu
zabiegowi eliminowane jest pośrednictwo chipsetu płyty głównej w przesyle danych. Bliskość
kontrolerów do właściwego procesora zapewnia małe opóźnienia w przesyle