przedmiot: Architektura komputerów
prowadzący: dr inż. SŁAWOMIR GRYŚ
Politechnika Częstochowska
Wydział Elektryczny, pokój C 113,
forma zaliczenia: egzamin pisemny i ustny
proponowana literatura:
1. Pozycje książkowe
Patterson D., Hennessy J.: Computer Organisation and Design: The Hardware/Software Interface, Morgan Kaufmann, 1994.
Hamacher C., Vranesic Z. i in.: Computer Organization, McGraw-Hill, 1996.
Kai Hwang: Advanced Computer Architecture: Parallelism, Scalability, Programmability, McGraw-Hill, 1993.
Weiss S., Smith J.: POWER and PowerPC, Morgan Kaufmann, 1994.
Stallings W.: Organizacja i architektura systemu komputerowego, WNT, Warszawa 2003.
Metzger P.: Anatomia PC, Wydawnictwo Helion.
Misiurewicz P.: Układy mikroprocesorowe, W-wa 1983.
Misiurewicz P.: Podstawy techniki mikroprocesorowej, WNT, Warszawa 1991.
Badźmirowski K. i in.: Układy i systemy mikroprocesorowe, Cz.1 i 2, WNT, Warszawa 1990.
Tietze U., Schenk Ch.: Układy półprzewodnikowe, WNT, Warszawa 1993.
Lipowski J, Małysiak H. i in.: Modułowe systemy mikroprocesorowe, WNT, Warszawa 1984.
Modrzewski M. i in.: Układy mikroprocesorowe serii Intel 8080, Motorola 6800, Wyd. Politechniki Warszawskiej, Warszawa 1985.
Fedyna K., Mizeracki M.: Układy mikroprocesorowe Z80, WKŁ, Warszawa 1987.
Rydzewski A.: Mikrokomputery jednoukładowe rodziny MCS-48/51, WNT, Warszawa 1995.
Małysiak H.: Mikrokomputery jednoukładowe serii MCS48, MCS51, MCS96, Wyd. Pracowni Komputerowej Jacka Skalmierskiego, Gliwice 1992.
Pochopień B.: Arytmetyka systemów cyfrowych, Wyd. Politechniki Śląskiej, Gliwice 1997.
Pankiewicz S.: Arytmetyka liczb zapisywanych w systemach niedziesiętnych, Politechnika Śląska, Gliwice 1985.
2. Czasopisma:
IEEE Micro "Hot Chips",
IEEE Computer,
IEEE Parallel and Distributed Technology PC Magazine po polsku,
PC Kurier,
PC World Komputer,
Enter,
Chip,
Byte.
3. Strony internetowe:
- producentów procesorów i komputerów:
IBM, Intel, Motorola, AMD, Siemens, Atmel, Philips, Texas Instruments, NEC, Zilog, Sharp, Cyrix, SGS, DEL;
ośrodków akademickich i branżowe:
http://www.library.upenn.edu (Library of University of Pensylwania)
http://www.berkeley.edu (University of Berkeley)
http://www.cam.ac.uk (University of Cambridge)
http://cag-www.lcs.mit.edu (Masachussets Intitute of Technology),
Wykład I
Historia komputerów
Komputer - urządzenie elektroniczne automatycznie przetwarzające informacje (dane) zapisane cyfrowo, służące do szybkiego wykonywania obliczeń, przechowywania, porządkowania i wyszukiwania danych oraz sterowania pracą innych urządzeń.
M. Szymczak: Słownik języka polskiego, PWN, W-wa 1995
Era maszyn mechanicznych
B. Pascal (1623-1662) - konstruktor mechanicznego kalkulatora pomocnego bankierom i geodetom,
G. Leibniz (1646-1716) - wtórny, po Chińczykach, odkrywca systemu dwójkowego, udoskonalił mechaniczny kalkulator,
J. Jacquard (1752-1834) - wynalazca karty perforowanej,
Stern (1769-1842) - twórca maszyny pierwiastkującej,
Ch. Babbage (1791-1871) - najwybitniejszy twórca mechanicznych maszyn liczących (zrealizowana maszyna różnicowa, projekt maszyny analitycznej).
G. Boole (1815-1864) - prekursor logiki formalnej.
Wiek XX wiekiem elektryczności
1930 - J. Atanasoff z Iowa State University zbudował tzw. Linear Equation Solver (300 lamp elektronowych, przekaźniki),
1942 - J. Mauchly i J. Eckert z University of Pensylvania skonstruowali komputer ENIAC (Electronic Numerical Integrator And Computer): 17468 lamp elektronowych, pobór mocy 140 kW, waga 30 ton, 5 tys. operacji dodawania lub 300 mnożenia na sekundę, program na wymienialnych płytach,
1944 - Harvard MARK I: taśma perforowana,
1946 - prace nad komputerem IAS prowadzone przez zespół J. von Neumanna w Princeton Institute for Advanced Studies,
1948 - IBM SSEC: kalkulator złożony z 66 stacji czytających dane z taśmy perforowanej,
1950 - UNIVAC: komercyjna wersja ENIAC'a,
1952 - IBM seria 700: pierwsze komputery komercyjne do zastosowań biurowych.
Od tranzystora do......
1947 - tranzystor bipolarny (Bell Telephone Laboratories),
1957 - DEC (Digital Equipment Corporation) wprowadza komputer PDP-1,
1958 - układ scalony w technologii TTL,
~1960 - IBM seria 7000: komputer komercyjny,
1960 - tranzystor w technologii MOS (ang. metal oxide semiconductor),
1964 - masowa produkcja układów cyfrowych w technologii TTL (Texas Instruments),
1964 - IBM seria 7000 i 360, DEC PDP-8: komputery komercyjne,
1970 - produkcja układów cyfrowych w technologii MOS,
1970 - pamięć półprzewodnikowa (Fairchild),
1971 - 4-bitowy p 4004 w tech. PMOS (Intel): pierwszy uniwersalny mikroprocesor, 60000 rozkazów na sekundę,
1972 - 8-bitowy p 8008 w tech. PMOS (Intel),
1974 - 8-bitowy p 8080 w tech. NMOS (Intel),
1975 - 8-bitowy p 6800 w tech. NMOS (Motorola),
1975 - IBM 801: minikomputer wyposażony w procesor RISC I ,
1975-76 - 8-bitowe pry: 2660 (Signetics), 6502 (Rockwell, MOS Technology), Z80 (Zilog),
1976 - 16-bitowy p TI 9900 w technologii HNMOS (Texas Instruments),
1978 - 16-bitowy p 8086/8088 w technologii HNMOS (Intel),
1979 - 16-bitowe pry: Z8000 (Zilog), NS 16016 (National Semiconductors), i in.,
1979 - 16/32-bitowy p 68000 (Motorola),
1982 - 16-bitowy p 80286 (Intel): praca w trybie chronionym,
1985 - 32-bitowy p 80386 w technologii HCMOS III (Intel),
1990 - 32-bitowy p: 80486,
......? - 32-bitowe pry x486 (AMD, Cyrix),
1993 - 32/64-bitowy p Pentium P5 (Intel),
1996-2002 - 32/64-bitowe pry Intel Pentium II-IV, AMD, IBM&Motorola&Apple, NEC.
2003 - ......................................................?
Rys. 1. Komputer ENIAC
Rys. 2. Wymiana lampy w komputerze ENIAC
Wykład II
Struktura systemu komputerowego
Rys. 3. Komputer o strukturze: a) - sztywnej (ang. „hardwire”), b) - elastycznej (ang. „software”)
Maszyna von Neumanna (ang. von Neumann machine) - koncepcja komputera, utrzymującego w pamięci zarówno program jak i dane; możliwość wymiany programu i danych na inne. Zarówno program, jak i dane są przechowywane w pamięci w kodzie dwójkowym, a ich przetwarzanie odbywa się w arytmometrze.
Rys. 4. Schemat blokowy komputera o architekturze trójmagistralowej
Operacje sprzętowe w komputerze:
odczyt z pamięci programu do procesora,
odczyt z pamięci danych do procesora,
zapis danych z procesora do pamięci danych,
odczyt z układów wejścia-wyjścia do procesora,
zapis danych z procesora do układów wejścia-wyjścia,
bezpośredni odczyt z pamięci danych przez układy wejścia-wyjścia (ang. direct memory access, DMA),
bezpośredni zapis do pamięci danych przez układy wejścia-wyjścia (ang. direct memory access, DMA),
operacje na rejestrach wewnętrznych procesora,
obsługa przerwań.
Elementy składowe komputera:
Szyna, magistrala (ang. bus) - wiązka przewodów lub zespół ścieżek na płytce obwodu drukowanego, do wzajemnej komunikacji pomiędzy elementami komputera. W definicji szyny, prócz samych przewodów sygnałowych, mieści się ściśle zdefiniowany protokół, precyzujący zbiór komunikatów. Przykłady standardów szyn: ISA, PCI, SCSI, PCMCIA.
Jednostka centralna (ang. central processing unit, CPU) - element komputera, który pobiera i wykonuje rozkazy. Składa się z jednostki arytmetyczno-logicznej, jednostki sterującej, rejestrów, dekodera rozkazów. W przypadku komputerów jednoprocesorowych oznacza po prostu procesor. Natomiast jeśli mówimy o komputerze wieloprocesorowym, CPU oznacza wszystkie procesory.
Pamięć danych (ang. data memory) - pamięć do zapisu i odczytu przeznaczona do przechowywania danych.
Pamięć programu (ang. program memory) - pamięć do odczytu przeznaczona do przechowywania kodu programu.
Układ wejścia-wyjścia (ang. input-output circuit, I/O) - element komputera, służący do wymiany informacji między komputerem a urządzeniem zewnętrznym.
Elementy składowe procesora:
Rys. 5. Ogólna struktura procesora
Jednostka arytmetyczno-logiczna zwana również arytmometrem (ang. arithmetic and logic unit), część procesora wykonująca podstawowe operacje arytmetyczne i logiczne, pobierającą argumenty działań z rejestrów procesora lub z pamięci oraz określająca znaczniki w rejestrze stanu procesora.
Typowe operacje wykonywane przez ALU:
suma logiczna OR (funkcja alternatywy),
iloczyn logiczny AND (funkcja koniunkcji),
różnica symetryczna EX-OR (funkcja różnowartościowości),
negacja NOT,
dodawanie i odejmowanie arytmetyczne liczb dwójkowych i dziesiętnych w kodzie BCD (ang. binary coded decimal),
porównywanie dwóch liczb,
przesunięcia i rotacje,
mnożenie i dzielenie arytmetyczne liczb dwójkowych i dziesiętnych w kodzie BCD.
Typowe znaczniki (flagi) ustawiane w wyniku operacji:
zera (ang. zero, Z),
znaku (ang. sign, S),
parzystości (ang. parity, P),
przepełnienia (ang. overflow, OV),
przeniesienia (ang. carry, C),
przeniesienia połówkowego (ang. auxiliary carry, AC).
Jednostka sterująca (ang. control unit) - część procesora, która zapewnia przebieg operacji zdefiniowanej kodem rozkazu, steruje przenoszeniem danych wewnątrz procesora oraz wymianą danych i sygnałów sterujących poprzez magistrale zewnętrzne.
Dekoder rozkazu (ang. instruction decoder) - dekoder tłumaczący kod rozkazu na mikrorozkazy realizowane przez układy wewnętrzne procesora.
Rejestr (ang. register) - część procesora przechowująca dane lub adres.
Podstawowe rejestry procesora:
akumulator (ang. accumulator, A, ACC),
rejestry robocze (ang. general purpose registers),
licznik rozkazów (ang. program counter, PC),
wskaźnik stosu (ang. stack pointer, SP),
rejestr stanu (wskaźników, flag) (ang. flag register, F, program status word, PSW),
rejestr rozkazów (ang. instruction register, IR),
pamięć podręczna (ang. cache memory),
rejestry buforowe danych i adresu (ang. buffer registers).
Cykl pracy komputera:
Cykl rozkazowy (ang. instruction cycle) - ciąg czynności, które wykonuje układ sterowania jednostki centralnej w czasie realizowania jednego rozkazu. Na cykl rozkazowy składają się: jednakowa dla wszystkich rozkazów faza pobrania, w której pobierany jest kod operacji z komórki pamięci o adresie zapisanym w liczniku rozkazów (zawartość licznika zwiększa się, a kod operacji jest dekodowany) oraz faza wykonania, w której następuje realizacja operacji wskazanej przez rozkaz. Jeżeli w treści wykonywanego rozkazu jest adres lub argument bezpośredni, to w fazie wykonywania może nastąpić kolejne zwiększenie zawartości licznika rozkazów. Na cykl rozkazowy składają się jeden lub kilka cykli maszynowych.
Rys. 6. Cykl rozkazowy procesora
Cykl maszynowy (ang. machine cycle) - cykl, w którym następuje przesłanie danych (odczyt lub zapis) między jednostką centralną a pamięciową lub układem wejścia - wyjścia. W zależności od rodzaju przesłania rozróżnia się cykl maszynowy: pobrania kodu operacji, odczytu i zapisu pamięci, odczytu i zapisu wejścia - wyjścia, przyjęcia przerwania.
W każdym cyklu maszynowym następuje wysłanie:
adresu na magistralę adresową,
danych na magistralę danych,
sygnałów sterujących, informujących o rodzaju cyklu, na magistralę sterującą.
Układy pamięci lub wejścia - wyjścia powinny w tym czasie wykonać odpowiednie czynności - zapisać dane lub wysłać je na magistralę danych. Jeden cykl maszynowy wykonywany jest w czasie jednego lub kilku (w zależności od procesora i rodzaju cyklu) taktów zegara systemowego.
Zegar systemowy (ang. system clock) - generator impulsów prostokątnych, taktuje procesor, układy pamięciowe i układy wejścia-wyjścia.
Cykl pamięci (ang. memory cycle) - ciąg operacji składających się na jeden dostęp (odczyt lub zapis) do pamięci. Cykl pamięci często jest utożsamiany z cyklem maszynowym.
Rys. 7. Graf stanów cyklu rozkazowego
wpisz R2, #n; R2 n
prześlij [R1],[R3+]; wykonaj n-razy:
{
[R1] [R3]
R1 R1 + 1
R3 R3 + 1
}
Licznik rozkazów (ang. program counter) - rejestr procesora; adresuje pamięć programu, przechowując adres, spod którego należy pobrać kod następnego rozkazu lub argument bieżącego rozkazu.
Wskaźnik stosu (ang. stack pointer) - rejestr procesora; adresuje pamięć o organizacji typu „stos” (ang. LIFO - last in first out), wskazując tzw. wierzchołek stosu, czyli adres ostatnio zapisanych danych. Wykorzystywany jest do:
tymczasowego zapisu danych:
przechowywanych w rejestrach (rozkazy połóż na stos, zdejmij ze stosu),
w fazie wykonywania rozkazu przez mikroprocesor;
zapisu zawartości licznika rozkazów PC podczas wykonywania rozkazu wywoływania podprogramu, lub podczas obsługi przerwania. Adres przechowywany w PC zostaje zapamiętany na stosie w celu umożliwienia powrotu do programu głównego po zakończeniu wykonywania podprogramu;
przechowywania danych wyrażanych za pomocą notacji przyrostkowej, zwanej również odwrotną notacją polską.
Przykład zapisu wyrażenia algebraicznego:
notacja wrostkowa notacja przyrostkowa
(ang. infix) (ang. postfix)
A+B*C+(D+E)*F ABC*+DE+F*+
Wykład III
Potokowe przetwarzanie rozkazów
Przetwarzanie potokowe (ang. pipelining) - polega na równoczesnym przetwarzaniu grupy rozkazów, znajdujących się w różnych fazach (ang. stage) cyklu rozkazowego. Wyróżnia się co najmniej fazę pobierania i wykonania rozkazu.
Przykładowa dekompozycja rozkazu na 6 faz:
pobranie rozkazu (ang. instruction fetch) - FI,
dekodowanie rozkazu (ang. instruction decoding) - DI,
obliczanie adresu argumentów (ang. operand computing) - CO,
pobieranie argumentów (ang. operand fetch) - FO,
wykonanie rozkazu (ang. instruction execution) - EI,
zapisanie argumentów (ang. operand writing) - WO.
czas
Rys. 8. Przetwarzanie potokowe 9 rozkazów
Założenia przyjęte do rys. 8:
jednakowy czas trwania każdej z faz,
każdy rozkaz przechodzi przez wszystkie fazy,
brak konfliktów dostępu do pamięci (fazy FI, FO, WO odwołują się do pamięci),
brak przerwań lub przerwania zablokowane,
brak rozkazów skoku (rozgałęzień),
niezależność rozkazów (kolejny rozkaz nie czeka na argument obliczany przez wcześniejsze rozkazy).
fragment przykładowego programu:
wpisz R2, #n; R2 #n
dodaj R1, [R2]; R1 R1 + [R2]
skocz adres, C; C=1 => PC adres
Rysunek 9 ilustruje wpływ występowania rozkazu skoku warunkowego na potok rozkazów. Rozkaz 3 jest rozkazem skoku do rozkazu 15. Do zakończenia fazy EI nie ma możliwości przewidzenia, który rozkaz będzie wykonany jako następny. W 8 jednostce czasu rozkaz 15 wchodzi do potoku. Od jednostki 9 do 12 nie kończy się wykonywanie żadnego rozkazu - brak fazy WO, co oznacza stratę czasu.
czas
Rys. 9. Przetwarzanie potokowe 9 rozkazów
w przypadku rozkazu skoku warunkowego
|
|
|
RW |
RN |
|
|
RA |
|
|
kierunek przetwarzania
programu
Rys. 10. Adresowanie pamięci programu w wyniku wykonania rozkazu skoku warunkowego
Opis:
RW - rozkaz wykonywany,
RN - rozkaz następny (wykonany, gdy nie spełniony warunek skoku),
RA - rozkaz alternatywny (wykonywany, gdy spełniony warunek skoku)
Metody zwiększania wydajności przetwarzania potokowego w przypadku rozkazu skoku warunkowego:
zwielokrotnienie strumienia potoków,
buforowanie fragmentu programu,
zmiana kolejności wykonywania rozkazów,
przewidywanie rozgałęzień.
Zwielokrotnienie strumienia potoków polega na przetwarzaniu równoległych potoków, zapoczątkowanych przez rozkazy RN i RA. Wady:
może wystąpić konflikt dostępu do pamięci (równoległe fazy FI),
w równoległych potokach mogą pojawić się kolejne rozkazy skoków.
Buforowanie fragmentu programu polega na przechowywaniu fragmentu programu w wewnętrznej pamięci procesora. Metoda ta jest przydatna przy operowaniu pętlami. Jeśli bufor jest dostatecznie pojemny, aby zmieścić wszystkie rozkazy stanowiące pętlę, to rozkazy te muszą być pobrane tylko raz. Przy kolejnych obiegach pętli procesor nie odwołuje się do pamięci.
Zmiana kolejności wykonywania rozkazów polega na pobieraniu rozkazów w takiej kolejności, aby grupować rozkazy skoków lub umieszczać je poza pętlami.
Przewidywanie rozgałęzień polega na zgadywaniu, czy wystąpi warunek powodujący skok, czy też nie. Metody przewidywania dzielą się na statyczne i dynamiczne. Metody statyczne nie bazują na historii skoków warunkowych wykonanych przez program.
Wśród metod statycznych można wyróżnić:
przyjmowanie, że skok nie nastąpi,
przyjmowanie, że skok nastąpi (korzystniejsze niż metoda poprzednia, gdy występują rozkazy skoków bezwarunkowych),
przewidywanie po analizie kodu rozkazu
np. rozkaz DJNZ R1, adres
(R1 R1 - 1, R1<>0 => PC adres).
|
|
|
RA |
|
|
|
RW |
RN |
|
kierunek przetwarzania
programu
Rys. 11. Adresowanie pamięci programu w wyniku realizowania tzw. pętli
Wśród metod dynamicznych można wyróżnić:
przewidywanie na podstawie bitu skok nastąpił/ nie nastąpił, (jeśli ostatnio skok nastąpił to przyjmuje się, że również wystąpi przy kolejnym rozkazie skoku; korzystne w przypadku pętli - błędne przewidywanie wystąpi dwukrotnie, tj. w pierwszym i ostatnim obiegu pętli),
przewidywanie na podstawie tablicy historii rozgałęzień (wady: wymaga wewnętrznej pamięci procesora oraz rozbudowanych układów wnioskowania).
Przetwarzanie superpotokowe (ang. superpipelining) - zaawansowane przetwarzanie potokowe, w którym dwa rozkazy znajdują się w tej samej fazie potoku, lecz w różnych podfazach. Takie rozwiązanie jest możliwe, gdy w obrębie fazy zostaną wyodrębnione dwa nienakładające się zadania.
Wykład IV
Superskalarne przetwarzanie rozkazów
Przetwarzanie superskalarne - polega na równoczesnym przetwarzaniu grupy (przynajmniej dwóch) rozkazów, znajdujących się w tych samych fazach (ang. stage) cyklu rozkazowego.
czas
Rys. 12. Porównanie różnych rozwiązań
Czynniki wpływające na efektywność potoku superskalarnego:
prawdziwa zależność danych,
zależność proceduralna,
konflikt zasobów,
zależność wyjściowa,
antyzależność.
Prawdziwa zależność danych występuje wtedy, gdy drugi rozkaz potrzebuje danych tworzonych za pomocą pierwszego rozkazu. Wykonanie drugiego rozkazu ulega opóźnieniu o tyle faz ile jest wymaganych do usunięcia zależności.
Przykład 1:
dodaj R1, R2; R1 R1 + R2
prześlij R3, R1; R3 R1
Usuwanie prawdziwej zależności danych polega na optymalizacji kodu programu (zmianie kolejności rozkazów) na etapie kompilacji.
Zależność proceduralna jest związana z rozkazami skoku (rozgałęzień) oraz występowaniem rozkazów o różnej ilości faz. Rozkazy następujące po rozgałęzieniu nie mogą być wykonane przed zakończeniem rozgałęzienia. W maszynach o architekturze RISC'owej (ang. reduced instruction set computer) większość rozkazów jest wykonywanych w jednym cyklu maszynowym. Stąd, w tych maszynach nie występuje drugi z czynników powodujących zależność proceduralną.
Konflikt zasobów polega na jednoczesnym rywalizowaniu dwóch lub więcej rozkazów o te same zasoby systemowe, np. ALU, rejestry procesora, pamięć podręczną, pamięć główną, układy we-wy.
Usunięcie konfliktu zasobów jest możliwe poprzez powielanie zasobów - fizycznie, np. dwie ALU w procesorze, lub logicznie, np. dynamiczne przydzielanie rejestrów czyli tzw. przemianowanie (ang. renamimg), przełączanie banków rejestrów.
czas
Rys. 13. Wpływ zależności na superskalarne przetwarzanie rozkazów
Zależność wyjściowa występuje, gdy wynik działania rozkazu z drugiej pary (znajdujących się w innej fazie potoku - rys. 12) jest niszczony przez działanie rozkazu z pierwszej pary. Taka sytuacja zachodzi w procesorach o zmiennej długości trwania rozkazów. W przykładzie 2 zależność wyjściowa występuje pomiędzy rozkazami I1 i I3.
Przykład 2:
R3 R3 ∧ R5 (I1)
R4 R3 + 1 (I2)
R3 R5 - 1 (I3)
R7 R3 ⊕ R4 (I4)
Antyzależność występuje, gdy rozkaz z drugiej pary (znajdującej się innej fazie potoku - rys. 12) niszczy dane używane przez rozkaz z pierwszej pary. Taka sytuacja zachodzi w procesorach o zmiennej długości trwania rozkazów. W przykładzie 2 antyzależność występuje pomiędzy rozkazami I2 i I3.
Fazy cyklu rozkazowego procesora Pentium:
pobieranie wstępne z pamięci podręcznej programu - PF,
pierwszy etap dekodowania - D1 (dekodowanie opcodu, kontrola dobierania parami, przewidywanie rozgałęzień na podstawie historii rozgałęzień),
drugi etap dekodowania - D2 (wyznaczanie adresów argumentów),
wykonanie rozkazu - EX,
zapisanie argumentów - WB (aktualizacja rejestrów i znaczników stanu).
Układ kontroli dobierania parami sprawdza na bieżąco możliwość wykonania kolejnej fazy potoku przez parę rozkazów (sprawdza zachodzenie jednego z ww. rodzajów zależności).
Pentium zawiera dwa niezależne ALU, oznaczane U i V, pracujące na 32-bitowych liczbach zapisanych w formacie stałopozycyjnym.
Rys. 14. Potoki procesorów firmy Intel:
a) 80486, b) Pentium
Rys. 15. Struktura potoku całkowitoliczbowego procesora Pentium
Pentium wykorzystuje dynamiczną metodę przewidywania rozgałęzień opartą na historii wykonań rozkazów rozgałęzienia. W buforze celu rozgałęzienia są przechowywane: adres aktualnie wykonywanego rozkazu rozgałęzienia (32 bity), adres rozkazu docelowego, wykonywanego jako rozkaz kolejny w przypadku rozgałęzienia programu (32 bity), dwa bity historii.
Po wykonaniu rozkazu rozgałęzienia bity historii są aktualizowane. W tej metodzie przewiduje się, że rozgałęzienie nie wystąpi tylko wtedy, gdy oba bity historii są zerami. Różnica w stosunku do metody statycznej korzystającej z bitu nastąpi/nie nastąpi jest taka, że do przewidywania są używane dwa bity przypisane konkretnemu rozkazowi. Bufor celu rozgałęzienia (ang. branch target buffer) jest zorganizowany w pamięci podręcznej procesora. Jeżeli wystąpi brak miejsca do dokonania nowego wpisu jest usuwany wpis najstarszy.
Rys. 16. Graf stanów bufora celu rozgałęzienia
Wykład V
Przetwarzanie równoległe (paralelne)
Zastosowania przetwarzania równoległego:
wielowątkowość (ang. multi-threading) - wykonywanie kilku niezależnych programów,
obliczenia wektorowe (ang. vector computing),
obliczenia wyrażeń wymagających powtarzania identycznych operacji.
Przykład 1:
obliczenia skalarne obliczenia wektorowe
C = A + B C = A + B
7 = 3 + 4
prześlij A , [R1] prześlij A , [R1]
prześlij B , [R2] prześlij B , [R2]
dodaj A , B prześlij dodaj A , B
prześlij [R3] , A prześlij [R3] , A
zwiększ R1
zwiększ R2
zwiększ R3
Przykład 2:
obliczanie wartości wielomianu
wg klasycznej formuły:
y = an·xn + an-1·xn-1 + an-2·xn-2 + .... + a1·x + a0
wg algorytmu Hornera:
y = ((((an·x + an-1) ·x + an-2) ·x + an-3) ·x .... a1) ·x + a0
obliczanie wartości silni
wg klasycznej formuły:
n! = 1 · 2 · 3 · ... · n!
wg algorytmu rekurencyjnego:
n! = (n - 1)! · n
Wieloprocesor - system wieloprocesorowy, w którym każdy procesor ma pełny dostęp do wspólnych zasobów, tj. (pamięci, układów we-wy).
Rys. 18. Wieloprocesor ze wspólną magistralą
Wielokomputer (transputer) - system wieloprocesorowy, w którym każdy procesor ma dostęp do wydzielonych zasobów, tj. (pamięci, układów we-wy). Procesory współpracują przez szybkie kanały we-wy.
Rys. 19. Typowe topologie wielokomputera: a) pierścień (ang. ring), b) siatka (ang. mesh), c) drzewo (ang. tree), d) hipersześcian (ang. hypercube)
Dany blok danych może występować jednocześnie w pamięciach podręcznych wielu procesorów. Jeżeli procesory mogą swobodnie modyfikować zawartość własnych pamięci podręcznych (brak arbitrażu), to może powstać niespójny obraz pamięci (ang. cache coherence). Problem ten występuje w strukturze wieloprocesora.
Rys. 20. Powielenie bloku danych w pamięciach podręcznych procesorów A i B
Rozwiązania problemu spójności pamięci podręcznych:
programowe (analiza kodu na etapie kompilacji)
zapobieganie przesyłania wspólnych danych do pamięci podręcznych (nieefektywne - gdy kilka procesorów jedynie czyta te dane),
czasowe zapobieganie przesyłania wspólnych danych do pamięci podręcznych (wymaga zaimplementowania w kompilatorze złożonych procedur analizy kodu programu),
sprzętowe (analiza kodu na etapie wykonywania)
protokoły katalogowe,
protokoły podglądania.
Protokoły katalogowe bazują na przechowywaniu w pamięci głównej zbioru informacji o zawartości poszczególnych pamięci podręcznych oraz aktualnie wydanych prawach dostępu. Niezbędny jest układ logiczny (arbiter), nadzorujący przesyłanie danych pomiędzy pamięciami podręcznymi a pamięcią główną. Przed udzieleniem prawa wyłączności jednemu z procesorów arbiter żąda unieważnienia kopii bloku danych przechowywanych w pozostałych procesorach.
W protokołach podglądania utrzymywanie spójności spoczywa na wszystkich procesorach. Stosowane są dwie metody podglądania: zapis z unieważnieniem (analogicznie jak w protokole katalogowym) oraz zapis z aktualizacją, który polega na rozesłaniu zaktualizowanej wartości do wszystkich procesorów przechowujących wspólny blok. W zapisie z unieważnieniem stosuje się dwubitowe pole stanu dla każdego wiersza pamięci, określające jeden z możliwych stanów: zmodyfikowany, wyłączny, wspólny, nieważny (ang. modified, exclusive, shared, invalid) - stąd nazwa protokół MESI.
Znaczenie poszczególnych stanów:
Zmodyfikowany. Wiersz pamięci został zmodyfikowany, a więc różni się od swojego odpowiednika w pamięci głównej.
Wyłączny. Wiersz pamięci jest taki sam jak w pamięci głównej i nie występuje w innych pamięciach podręcznych (może być modyfikowany).
Wspólny. Wiersz pamięci jest taki sam jak w pamięci głównej i może występować w innych pamięciach podręcznych (nie może być modyfikowany).
Nieważny. Wiersz nie zawiera ważnych danych.
Chybienie odczytu/zapisu - adres docelowy nie znajduje się w pamięci podręcznej.
Trafienie odczytu/zapisu - adres docelowy znajduje się w pamięci podręcznej.
Możliwe przejścia do innych stanów.
Opis skrótów:
PI - procesor inicjujący, PP - pozostałe procesory, BS - bity stanu, pp - pamięć podręczna, pg - pamięć główna.
Chybienie odczytu:
BS(PP)=wyłączny/wspólny => BS(PP)=wspólny, odczyt bloku z pg do pp(PI), odczyt danych z pp(PI), BS(PI)=wspólny;
BS(PP)=zmodyfikowany => zapis bloku z pp(PP) do pg, BS(PP)=wspólny, odczyt bloku z pg przez PI, odczyt danych z pp(PI), BS(PI)=wspólny;
w pp(PP) nie ma kopii bloku => odczyt bloku z pg do pp(PI), odczyt danych z pp(PI), BS(PI)=wyłączny;
Trafienie odczytu: odczyt danych z pp(PI).
Chybienie zapisu:
BS(PP)=zmodyfikowany => zapis bloku z pp(PP) do pg, BS(PP)=nieważny, odczyt bloku z pg do pp(PI), zapis danych do pp(PI), BS(PI)=zmodyfi-kowany;
BS(PP)=wyłączny/wspólny => odczyt bloku z pg do pp(PI), zapis danych do pp(PI), BS(PP)=nie-ważny), BS(PI)=zmodyfikowany.
Trafienie zapisu:
BS(PI)=wspólny => BS(PP)=nieważny, zapis danych do pp(PI), BS(PI)=zmodyfikowany;
BS(PI)=wyłączny => zapis danych do pp(PI), BS(PI)=zmodyfikowany;
BS(PI)=zmodyfikowany => zapis danych do pp(PI).
Klasyfikacja systemów komputerowych:
z pojedynczym strumieniem rozkazów i danych (ang. single instruction single data stream - SISD) - system jednoprocesorowy z przetwarzaniem potokowym;
z pojedynczym strumieniem rozkazów i zwielokrotnionym strumieniem danych (ang. single instruction multiply data stream - SIMD) - procesory wektorowe;
ze zwielokrotnionym strumieniem rozkazów i pojedynczym strumieniem danych (ang. multiply instruction single data stream - MISD) - brak realizacji praktycznych,
ze zwielokrotnionym strumieniem rozkazów i danych (ang. multiply instruction multiply data stream - MIMD) - systemy wieloprocesorowe.
Wykład VI
Rozkazy procesora - typy i przetwarzanie
Rozkazy maszynowe są przetwarzane przez procesor jako dane binarne (zerojedynkowe). Każdy rozkaz posiada unikatowy kod operacji oraz opcjonalnie dodatkowe elementy:
kod operacji (ang. opcode) - określa operację, jaka ma być przeprowadzona;
odniesienie do argumentów źródłowych (ang. source), którymi mogą być: dane bezpośrednie, adresy pamięci, rejestry procesora;
odniesienie do argumentów przeznaczenia (ang. destination) lub wyniku (ang. result), którymi mogą być: adresy pamięci, rejestry procesora;
odniesienie do następnego rozkazu - określa adres następnego rozkazu, który będzie wykonany po rozkazie bieżącym.
Przykład 1:
ADD A , R1; A A + R1
ADD - opcode zapisany w języku symbolicznym, tzw. mnemonik
A, R1 - argumenty źródłowe, A - argument przeznaczenia.
Przykład 2:
JMP adres; PC adres
JMP - opcode,
adres - adres następnego rozkazu.
Typowe rodzaje operacji wykonywane przez procesor:
transferu (przesłań) danych,
arytmetyczne,
logiczne,
konwersji,
wejścia-wyjścia,
sterowania systemowego,
przekazywania sterowania.
Opis skrótów:
aź - argument źródłowy,
ad - argument docelowy,
aźd - argument jednocześnie źródłowy i docelowy,
(...) - zawartość.
Rodzaj operacji |
Nazwa operacji |
Opis |
Transfer danych |
Move Store Load Exchange Clear Set Push Pop |
skopiuj aź ap zachowaj aź w pamięci załaduj ad z pamięci (aźd1) (aźd2) wyzeruj aźd (ustaw 0...0b) ustaw aźd (ustaw 1...1b) zachowaj aź na wierzchołku stosu załaduj ad z wierzchołka stosu |
Arytmetyczne |
Add Subtruct Multiply Divide Absolute Negate Increment Decrement |
ad aź1 + aź2 ad aź1 - aź2 ad aź1 * aź2 ad1...2 aź1 / aź2 aźd |aź| aźd - aź aźd aźd + 1 aźd aźd - 1 |
logiczne |
AND OR NOT EX-OR Test Compare
Shift Rotate |
aźd aź1 ∧ aź2 aźd aź1 ∨ aź2 aźd neguj aź1 aźd aź1 ⊕ aź2 sprawdź bit i ustaw flagi porównaj logicznie/arytme-tycznie i ustaw flagi przesuń w prawo/lewo aź obracaj w prawo/ lewo aź |
konwersji |
Translate Convert |
aźtabela przyporząd.aźd zmiana postaci (aź) na inną |
wejścia-wyjścia |
Input Output Start I/O Test I/O |
odczytaj ad z układu we-wy zapisz aź do układu we-wy zapisz kod do układu I/O odczytaj kod stanu z układu I/O |
sterowania systemowego |
Set control bits Clear control bits |
ustaw flagi ogólnego przeznaczenia i systemowe zeruj flagi ogólnego przeznaczenia i systemowe |
przekazywania sterowania |
Jump (branch) Jump conditional Jump to Subroutine Return
Execute
Skip Skip conditional Halt
Wait (hold)
No operation |
skocz pod adres (aź), czyli PC (aź) skocz pod adres (aź), jeśli warunek spełniony/nie spełniony
skocz do podprogramu, zachowaj na stosie adres powrotu wróć z podprogramu (pobierz ze stosu adres powrotu) pobierz argument i wykonaj jak rozkaz, PC bez zmian pomiń następny rozkaz pomiń następny rozkaz, jeśli warunek spełniony/nie spełniony zatrzymaj wykonywanie programu zatrzymaj wykonywanie programu a następnie wznów po spełnieniu warunku nie wykonuj żadnego działania
|
Podstawowe cechy mikroprocesora 8086
przestrzeń adresowa pamięci fizycznej - 1MB;
przestrzeń adresowa we-wy - 64KB;
segmentowa organizacja logicznej przestrzeni adresowej;
stała pojemność segmentu - 64KB;
8/16-bitowe rejestry użytkownika;
16-bitowa jednostka ALU;
16-bitowa szyna danych;
20-bitowa szyna adresowa;
multipleksowane szyna danych i adresowa;
operacje na bitach, bajtach i słowach;
90 podstawowych typów rozkazów;
6-bajtowa kolejka rozkazów;
wbudowany mechanizmy do pracy w systemach wieloprocesorowych oraz do współpracy z układami rodziny 82xx, tj.: koprocesorem, sterownikiem magistrali, kontrolerem przerwań, kontrolerem DMA, zegarem, arbitrem magistrali, i.in.;
przerwania sprzętowe: linie INTR i NMI;
przerwania programowe (wyjątki): dzielenie przez zero, nadmiar, praca krokowa, rozkaz przerwania.
Rys. 21. Architektura mikroprocesora 8086
Znaczenie flag rejestru stanu (gdy flaga ustawiona):
O - przepełnienie dla liczb w kodzie U2,
D - zwiększanie wskaźnika danych,
I - zezwolenie na przerwania,
T - praca krokowa,
S - liczba ujemna,
Z - zero w wyniku operacji logicznej/arytmetycznej,
A - przeniesienie połówkowe dla liczb w kodzie BCD,
P - parzysta liczba jedynek,
C - przeniesienie dla liczb bez znaku.
Adres logiczny komórki pamięci: segment: offset
Adres fizyczny komórki pamięci: segment*16+offset =
< 0 , 220 > = < 00000h, FFFFFh> 1 MB
Operacje na bajcie i słowie:
DS:SI, DS:DI, DS:BX - adresowanie argumentu,
Operacje na ciągach:
DS:SI - adresowanie argumentu źródła,
ES:DI - adresowanie argumentu przeznaczenia,
Operacje na stosie:
SS:SP - adresowanie wierzchołka stosu,
SS:BP - adresowanie elementów stosu.
Rys. 22. Organizacja pamięci mikroprocesora 8086
Rys. 23. Rozkład wyprowadzeń mikroprocesora 8086
Rys. 24. Cykl magistrali mikroprocesora 8086
Podstawowe cechy mikroprocesora MC 68000
32-bitowe rejestry danych i adresowe;
16-bitowa jednostka arytmetyczno-logiczna;
wspólna przestrzeń adresowa pamięci i we-wy o pojemności 16MB;
architektura von Neumanna (wspólna przestrzeń pamięci danych i programu);
architektura Harvard'a (rozdzielone szyny danych i adresowa);
16-bitowa magistrala danych;
24-bitowa magistrala adresowa;
operacje na bitach (ang. bit), półbajtach (ang. nibble), bajtach (ang. byte), słowach (ang. word), podwójnych słowach (ang. double word);
dwa tryby pracy: systemowy i użytkownika;
przerwania zewnętrzne (ang. interrupt): linie IPL2-0 (7-poziomowy system priorytetowy), linia RESET, linia BERR (błąd magistrali);
zdarzenia wyjątkowe: (ang. exceptions):
nielegalny kod rozkazu,
niedozwolony rozkaz (próba wykonania w trybie użytkownika rozkazu zastrzeżonego dla trybu systemowego),
błąd adresu (zapis/odczyt słowa pod nieparzystym adresem),
dzielenie przez zero,
nadmiar;
przerwanie wewnętrzne, tj. rozkaz TRAP;
praca krokowa (ustaw. bit T w rejestrze słowa).
Rys. 25. Rejestry mikroprocesora Motorola 68000
Rys. 26. Rozkład wyprowadzeń MC 68000
Rys. 27. Opis funkcjonalny wyprowadzeń MC68000
Rys. 28. Przykładowy cykl magistrali MC 68000
Wykład VII
Przegląd różnych procesorów - przykłady
Podstawowe cechy mikroprocesora jednoukładowego NEC 78310/12
wewnętrzna pamięć RAM o pojemności 256 bajtów;
architektura von Neumanna (wspólna przestrzeń pamięci danych i programu);
multipleksowana magistrala danych i adresowa;
8-bitowa magistrala danych;
16-bitowa magistrala adresowa;
16-bitowe rejestry danych i adresowe;
operacje na bitach (ang. bit), półbajtach (ang. nibble), bajtach (ang. byte), słowach (ang. word);
16-bitowa jednostka arytmetyczno-logiczna (wyjątkowo dzielenie 32/16 bity);
3-bajtowa kolejka rozkazów;
dwa 16-bitowe liczniki rewersyjne;
dwa 16-bitowe układy odmierzania czasu;
dwa wyjścia PWM (ang. pulse width modulation);
8-bitowy, 4-kanałowy przetwornik a/c;
dwa 4-bitowe porty wyjściowe do sterowania linii wyjściowych w czasie rzeczywistym;
48 linii we/wy równoległych;
układ kontroli przerwań (5 zewnętrznych i 14 wewnętrznych);
trzy rodzaje obsługi przerwań: wektorowe, „context switching” oraz „macro service”;
układ transmisji szeregowej (tryb pracy synchronicznej i asynchronicznej);
wewnętrzny WATCHDOG;
tryby obniżonego poboru mocy.
PSWH:
0 |
RBS2 |
RBS1 |
RBS0 |
0 |
0 |
IE |
0 |
PSWL:
S |
Z |
RSS |
AC |
UF |
P/V |
SUB |
CY |
Rys. 29. Rejestr PSW mikroprocesora NEC 78310/12
Rys. 29. Schemat blokowy mikroprocesora
NEC 78310/12
Podstawowe cechy mikroprocesorów serii NS 32000
dwie jednostki: klasyczny CPU oraz moduł DSP;
32-bitowe rejestry danych;
32-bitowa jednostka arytmetyczno-logiczna;
wspólna przestrzeń adresowa pamięci i we-wy o pojemności 16MB;
architektura von Neumanna (wspólna przestrzeń pamięci danych i programu);
16-bitowa magistrala danych;
24-bitowa magistrala adresowa;
multipleksowana magistrala danych i adresowa;
CPU umożliwia operacje na: bitach, półbajtach, bajtach, słowach, podwójnych słowach;
moduł DSP umożliwia operacje na liczbach: całkowitych w U2 (16 bitów), ułamkowych w U2 (16 lub 32 bity), zespolonych (16 bitów - część rzeczywista, 16 bitów - część urojona),
dwa tryby pracy: systemowy i użytkownika;
8-bajtowa kolejka rozkazów;
wewnętrzna pamięć danych typu RAM o pojemności 2 lub 4KB;
przerwania zewnętrzne: linia RSTI, linie NMI oraz INT;
zdarzenia wyjątkowe;
praca krokowa (ustawiony bit T w rejestrze PSR).
przeznaczenie: urządzenia komunikacyjne, faksy, modemy, systemy poczty głosowej, drukarki, karty graficzne, urządzenia do wyświetlania danych,
rozkazy wspomagające operacje graficzne: kompresja/dekompresja rozmiarów czcionek, podkreślanie znaków, operacje na całych blokach danych, umożliwiające: wypełnianie, czyszczenie, przenoszenie, rysowanie linii poziomych, pionowych i pod kątem 45o, wyznaczanie wzajemnych odległości elementów obrazu, testowanie bitu (pixela), itp.
Rys. 30. Schemat blokowy mikroprocesorów
National Semiconductor 32000
Rys. 31. Rejestry mikroprocesorów serii NS 32000
Podstawowe cechy mikroprocesora sygnałowego
(ang. signal processor) TMS320Cx
wykonywanie w jednym cyklu operacji mnożenia i dodawania zgodnie z wyrażeniem acc=acc + x*y, będącym podstawą algorytmów cyfrowego przetwarzania sygnałów, dotyczących obliczania korelacji sygnałów, DFT, FFT, filtracji cyfrowej;
dedykowany do pracy w systemach przetwarzania „w czasie rzeczywistym”, tj.: sygnałów akustycznych, obrazów i innych sygnałów szybkozmiennych;
architektura harwardzka;
32-bitowe rejestry danych;
obliczenia na liczbach w formacie stało- lub zmiennoprzecinkowym;
wspomaganie obliczeń na liczbach zespolonych;
wbudowanie mechanizmów kompresji/dekom-presji danych (przetwarzanie sygnału mowy)
przetwarzanie potokowe.
Podstawowe cechy mikroprocesora pomiarowego
TI MSP430
architektura RISC'owa;
bardzo niski pobór mocy (160 A przy 1 MHz, 2.2 V) - przeznaczenie do pracy w systemach zasilanych bateryjnie;
zastosowanie: pomiar sygnałów analogowych, przetwarzanie na postać cyfrową, transmisja do systemów nadrzędnych (ang. host), np. drogą radiową;
16-bitowe rejestry danych;
16-bitowa jednostka arytmetyczno-logiczna;
brak magistrali danych/adresowej/systemowej;
14 linii we-wy;
analogowy komparator;
16-bitowy układ czasowy z funkcją przechwytywania/porównywania (ang. capture/compare);
precyzyjny przetwornik A/C z pojedynczym całkowaniem.
Rys. 32. Rozkład wyprowadzeń mikroprocesorów MSP430
Podstawowe cechy mikroprocesora VLIW
(ang. Very Long Instruction Word)
stała długość i format rozkazu (do 128 bitów) z jednoznacznym przyporządkowaniem „slotów” do poszczególnych jednostek funkcyjnych;
zaleta - prosta struktura dekodera rozkazów i układu sterującego (ang. Instruction Issue Unit), równoległa praca jednostek funkcyjnych;
wada - wymaga inteligentnego kompilatora to optymalnej alokacji kodu dla każdej instrukcji.
Rys. 33. Struktura mikroprocesora VLIW
Podstawowe cechy mikroprocesora segmentowego
poszczególne części procesora realizowane przez oddzielne układy scalone,
kaskadowe łączenie segmentów w ALU o dowolnej długości,
zalety - zbudowanie procesora o żądanej długości słowa w szybkich technologiach, tj. TTL, ECL odpornych na zakłócenia elektromagnetyczne;
wada - duże wymiary systemu mikroprocesorowego.
Podstawowe cechy transputera (ang. dataflow)
komunikacja z innym transputerem przez szybkie kanały szeregowe (praca w trybie duplex);
wspólna magistrala zewnętrzna do współpracy z otoczeniem;
zaleta - przeznaczenie do pracy w systemach wieloprocesorowych o dużej mocy przetwarzania;
wada - wymaga specjalizowanych kompilatorów.
Rys. 34. Struktura transputera T424 firmy Inmos
Wykład VIII
Układy wejścia-wyjścia
Układ wejścia-wyjścia (ang. Input-Output module)
- „inteligentny” element komputera umożliwiający współpracę poprzez magistrale systemowe urządzeń peryferyjnych z procesorem.
Rys. 35. Schemat blokowy układu wejścia wyjścia
Czynniki powodujące potrzebę stosowania układów wejścia-wyjścia (w skrócie I/O):
różnorodność urządzeń peryferyjnych (karta muzyczna, drukarka, fax, modem),
różna szybkość i częstość przesyłu danych (mysz a karta grafiki),
różne formaty i sposoby przesyłu danych (wysyłanie bezpośrednich rozkazów do urządzeń a pakietowy przesył danych, transmisja szeregowa a równoległa).
Funkcje układu wejścia-wyjścia:
sterowanie transferem danych,
komunikacja z procesorem i urządzeniem peryferyjnym,
buforowanie danych,
wykrywanie błędów.
Przykład sterowania transferem danych:
Procesor żąda od I/O sprawdzenia stanu dołączonego urządzenia peryferyjnego.
I/O udziela odpowiedzi o stanie.
Jeśli urządzenie działa i jest gotowe do przesłania danych, procesor zgłasza zapotrzebowanie wysyłając rozkaz do I/O.
I/O otrzymuje dane od urządzenia peryferyjnego.
I/O przesyła dane do procesora.
Otrzymuje potwierdzenie od procesora otrzymania danych.
Komunikacja z procesorem i urządzeniami peryferyjnymi obejmuje:
dekodowanie poleceń (przykłady: odczytaj sektor, wydrukuj znak, przesuń papier w drukarce),
przesyłanie danych i informacji o stanie (przykład: stan gotowości urządzenia peryferyjnego),
rozpoznawanie adresu.
Buforowanie danych polega na przechowywaniu danych w rejestrze lub wewnętrznej pamięci I/O do czasu gotowości urządzenia peryferyjnego lub procesora.
Wykrywanie błędów obejmuje:
błędy mechaniczne, elektryczne i związane z obsługą urządzenia peryferyjnego (brak „styku” na złączu krawędziowym, brak papieru w drukarce),
błędy transmisji spowodowane działaniem czynników zewnętrznych, np. pól elektromagnetycznych (przykłady: bit parzystości, kody korekcyjne CRC5, CRC16, kod Hamminga).
Sposoby realizacji wymiany danych pomiędzy procesorem/pamięcią i I/O:
programowe sterowanie I/O z odpytywaniem (ang. polling),
obsługa I/O w przerwaniu,
bezpośredni dostęp do pamięci przez kanał DMA (ang. Direct Memory Access).
Rys. 36. Sposoby realizacji wymiany danych:
a) programowe sterowanie, b) obsługa w przerwaniu,
c) bezpośredni dostęp do pamięci
W programowym sterowaniu I/O „przetwarzanie” danych odbywa się całkowicie pod kontrolą programu realizowanego przez procesor. Zadaniem I/O jest logiczne i elektryczne dopasowanie sygnałów wymienianych pomiędzy procesorem a urządzeniami peryferyjnymi.
Zaleta - prostota realizacji sprzętowej.
Wady:
ciężar współpracy przerzucony na procesor i programistę, który musi znać protokół i specyfikację techniczną urządzenia,
zajętość procesora spowodowana oczekiwaniem na stan gotowości urządzenia peryferyjnego.
Obsługa w przerwaniu umożliwia prawie natychmiastową reakcję na żądanie obsługi przez urządzenie peryferyjne. Po wykryciu przerwania zawartość podstawowych rejestrów (zwykle PC, A, F) jest przechowywana na stosie, aby można po zakończeniu obsługi przerwania powrócić do wykonywania programu głównego. W przypadku wielu urządzeń peryferyjnych wymagana jest identyfikacja źródła przerwania.
Identyfikacja sprzętowa polega na określeniu adresu obsługi przerwania na podstawie stanu wejść procesora lub układu kontrolera przerwań (typowe oznaczenia INT0..n, IRQ0..n, NMI).
Identyfikacja programowa polega na określeniu adresu obsługi przerwania na podstawie podawanego przez urządzenie numeru.
W sytuacji równoczesnego zgłaszania kilku przerwań obsługiwane jest to o najwyższym priorytecie. Istnieje również możliwość zawieszenia wykonywania obsługi przerwania przez kolejne przerwanie o wyższym priorytecie.
Zaleta - obsługa urządzenia tylko wtedy, gdy jest zgłaszana taka potrzeba.
Wada - konieczność programowej i sprzętowej obsługi przerwań (zewnętrzny kontroler przerwań).
Zaletą bezpośredniego dostępu do pamięci jest wymiana danych bez udziału procesora. Daje to możliwość szybszego przesyłania danych przy dużych, podobnych blokach danych.
Bezpośredni dostęp do pamięci może być realizowany w dwojaki sposób:
przez blokowanie pracy procesora na pełny czas transmisji danych (procesor otrzymuje sygnał żądania zwolnienia magistrali),
przez wykradanie taktów zegarowych z cyklu rozkazowego, w czasie których procesor nie korzysta z magistrali.
Cykl pracy sterownika DMA:
urządzenie peryferyjne sygnalizuje zamiar transmisji danych,
sterownik DMA wysyła do procesora sygnał żądania zwolnienia magistrali,
po zakończeniu bieżącego cyklu rozkazowego procesor zwalnia magistralę i wysyła sygnał potwierdzenia;
kontrolę nad magistralą przejmuje sterownik i realizuje transfer danych;
sterownik zdejmuje sygnał żądania zwolnienia magistrali i kontrolę nad magistralą odzyskuje procesor.
Architektura komputerów - wykład
44
Systemy jednoprocesorowe
skalarne superskalarne
z przetwarzaniem z przetwarzaniem
potokowym superpotokowym
Rys. 17. Przetwarzanie równoległe w systemach komputerowych
pamięć główna pamięć podręczna
systemu CPU - A
pamięć podręczna
CPU - B
wieloprocesor wielokomputer
Systemy wieloprocesorowe