Podręcznik

Strona: SEZAM - System Edukacyjnych Zasobów Akademickich i Multimedialnych
Kurs: Komputery i sieci - podstawy
Książka: Podręcznik
Wydrukowane przez użytkownika: Gość
Data: sobota, 18 maja 2024, 19:32

1. Podstawowe struktury procesora

Podstawowe struktury procesora

1.1. Wprowadzenie

Architektura komputerów, a dokładniej architektura systemów komputerowych, to inaczej organizacja systemów komputerowych, choć czasami czyni się pomiędzy tymi pojęciami rozróżnienie. Architektura to według Stallingsa spojrzenie na konstrukcję systemu cyfrowego od strony programisty, a organizacja to bardziej punkt widzenia konstruktora systemu.

Czasami wygodniej jest mówić o architekturze czy organizacji systemu cyfrowego zamiast o architekturze komputerów. Pojęcie systemu cyfrowego jest bowiem nieco ogólniejsze od pojęcia systemu komputerowego.

Dla opisu architektury systemu cyfrowego posługujemy się na ogół schematami czyli rysunkami utrzymanymi w pewnej konwencji, które odzwierciedlają wzajemne połączenia i relacje pomiędzy fragmentami systemu cyfrowego. Z reguły też uzupełniamy taki schemat opisem słownym lub opisem sformalizowanym działania systemu.

Często też stosujemy do opisu architektury systemów cyfrowych specjalne języki formalne nazywane językami opisu sprzętu lub językami HDL (od ang. Hardware Description Language). Typowymi językami tego typu są VHDL, Verilog czy Abel. Języki HDL szczególnie użyteczne są w programach CAD (ang. Computer Aided Design) wspomagających projektowanie systemów cyfrowych. Programy takie umożliwiają symulację i weryfikację sposobu działania systemu cyfrowego na podstawie wprowadzonego opisu.

1.2. Architektura von Neumanna

Większość współczesnych komputerów (a dokładniej procesorów) ma architekturę stanowiącą pewną modyfikację podstawowej koncepcji von Neumanna. Procesor o architekturze von Nuemanna (mówimy także organizacja von Neumanna lub maszyna von Neumanna - ang. von Neumann machine) organizacja składa się z:

  • pamięci operacyjnej PAO (składającej się z komórek o długości n)
  • licznika rozkazów LR (ang. Program Counter lub Program Pointer, stosowane skróty to PC lub PP)
  • rejestru rozkazów RR (ang. Instruction Register, stosowany skrót to IR)
  • części wykonawczej (część wykonawcza realizuje rozkazy m.in. rozkazy arytmetyczne i logiczne np. rozkazy dodawania, odejmowania itd)
  • części sterującej (interpretującej rozkazy)

Podstawowym pojęciem jest rozkaz, instrukcja (ang. instruction) czyli elementarne polecenie. Lista wszystkich elementarnych poleceń nazywa się listą rozkazów (ang. instruction set) lub listą instrukcji. Pojęć rozkaz i instrukcja będziemy w dalszym ciągu używali wymiennie. Czasami mówimy instrukcja maszynowa lub rozkaz maszynowy dla podkreślenia, że jest to instrukcja w powyższym sensie i dla odróżnienia jej od instrukcji w języku wysokiego poziomu. Elementarne polecenie jest zapisywane w postaci słowa binarnego i po przesłaniu do rejestru rozkazów RR jest interpretowane i wykonywane.

Ciąg rozkazów („sensowny ciag rozkazów”, „ciąg rozkazów realizujący pewien algorytm”) nazywamy programem. Podstawowym celem działania procesora jest wykonanie programu zapisanego w pamięci na danych również zapisanych w tej samej pamięci. Krok po kroku wykonujemy instrukcje stanowiące program.

Procesor działa w cyklach rozkazowych. W jednym cyklu rozkazowym procesor wykonuje jedną instrukcję. Rozkazy są pobierane do wykonania po kolei zgodnie z adresem wskazywanym przez licznik rozkazów LR. Na początku cyklu rozkazowego zawartość LR jest zwiększana o 1, tzn. dokonujemy podstawienia LR := LR + 1, po czym z komórki pamięci o adresie zawartym w LR pobierana jest kolejna instrukcja programu. Jednak dopuszczalna jest zmiana kolejności wykonywania instrukcji tzw. rozkazem skoku. Rozkaz skoku sprowadza się do załadowania rejestru LR nową wartością.

Patrząc na słowo zawarte w komórce PAO w zasadzie nie możemy powiedzieć, czy jest to rozkaz czy słowo danych.

Rys.1. Architektura von Neumanna; program to ciąg instrukcji

Architektura von Neumanna ma 3 charakterystyczne cechy

  • Dane i rozkazy są pamiętane w tej samej pamięci umożliwiającej zapis i odczyt z dowolnej komórki pamięci
  • Wykonanie rozkazów programu następuje kolejno rozkaz po rozkazie (poza sytuacją gdy następuje tzw. skok).
  • Patrząc na słowo binarne zawarte w komórce pamięci nie wiemy czy to jest rozkaz czy dane.

Ważnym pojęciem w architekturze komputerów jest słowo maszynowe (ang. machine word). Jest to typowa dla danego procesora (mikroprocesora) struktura słowa, którym operujemy w systemie. Jeśli słowo maszynowe jest 8-bitowe mówimy, że procesor, mikroprocesor czy system komputerowy jest 8-bitowy, jeśli 32_bitowe, to 32-bitowy itd. Typowe długości słowa maszynowego to 8, 16, 32 i 64 bity.

Rys.2. Najprostsza struktura procesora; koncepcja minimum procesora to RR, LR, układ sterowania, zestaw rejestrów, sumator i rejestr stanu

Według przyjętej w opisie architektury von Neumanna definicji, procesor to licznik rozkazów LR, rejestr rozkazów RR, układ sterowania, układ wykonawczy i pamięć operacyjna. Często jednak zwłaszcza w systemach mikroprocesorowych nie zaliczamy pamięci operacyjnej do procesora. Procesor wykonany w postaci układu scalonego nazywamy mikroprocesorem. Schemat blokowy najprostszego procesora pokazany jest na rys.2. Na ogół procesor jest jednak znacznie bardziej skomplikowany, ponieważ zależy nam na tym by wydajność obliczeniowa, czyli jak mówimy moc obliczeniowa procesora, była jak największa.

Czasami procesor (zwłaszcza w dużych systemach komputerowych) nazywamy jednostką centralną lub CPU (ang. Central Processor Unit).

Z fizycznego punktu widzenia cykl rozkazowy to ciąg skończony taktów zegara, w których procesor wykonuje daną instrukcję. Instrukcje zależnie od ich stopnia skomplikowania mogą potrzebować różnej liczby taktów zegara na realizację. Podstawowy schemat cyklu rozkazowego z podziałem na cykl pobierania i cykl wykonania rozkazu pokazany jest na rys.3. Cykl rozkazowy dzieli się na ogół na tzw. cykle maszynowe (ang. machine cycle) zawierające pojedyncze odwołania do pamięci.

Rys. 3. Podstawowy cykl rozkazowy

Pamięć operacyjna (ang. operational memory) lub pamięć główna (ang. main memory) to pamięć RAM w której przechowywany jest wykonywany program i dane.

Język maszynowy (ang. machine language) to zbiór wszystkich słów binarnych interpretowanych jako rozkazy procesora. Programowanie w takim języku, czyli pisanie programów, jest bardzo niewygodne. Żeby ułatwić programiście operowanie instrukcjami stosuje się symboliczny zapis rozkazów.

Mnemonik (ang. mnemonic) to symboliczny zapis rozkazu. Np. typowym mnemonikiem dla rozkazu przesłania zawartości rejestru B do rejestru akumulatora A jest: MOV A, B

Asembler (ang. assembler) to język programowania, w którym każdej instrukcji odpowiada dokładnie jedna instrukcja maszynowa. Asemblerem nazywamy też program tłumaczący programy zapisane w tym języku na język maszynowy.

1.3. Architektura Harvard

Architektura Harvard polega na rozdzieleniu pamięci programu i pamięci danych na dwie niezależnie pracujące pamięci .Takie rozwiązanie umożliwia równoczesne pobieranie rozkazu i przesyłanie argumentów lub wyników wykonania rozkazu, co umożliwia podwyższenie szybkości działania komputera.

Rys.4. Architektura typu Harvard; pamięć danych i pamięć programu są rozdzielone; zaleta: dostęp do nich możemy uzyskiwać równocześnie

 

 

2. Lista rozkazów i sposoby adresowania

Lista rozkazów i sposoby adresowania

2.1. Formaty rozkazów

Istnieje kilka typowych formatów instrukcji (por. rys. 1). Każdy z formatów ma część operacyjną (ang. operational code) precyzującą, do jakiej kategorii rozkaz należy i ewentualnie dalsze części zawierające dane lub adresy. W maszynie von Neumanna zakładaliśmy, że instrukcja reprezentowana jest przez słowo binarne o stałej długości n. W praktyce nie jest to wygodne i na ogół jeden procesor ma kilka różnych formatów instrukcji.

Rys.1. Kilka podstawowych formatów instrukcji; w polu Adres znajduje się adres komórki pamięci, gdzie umieszczony jest argument, lub adres komórki, gdzie należy przesłać wynik działania instrukcji; w polu Dane mamy argument instrukcji

Poznając konkretny procesor czy mikroprocesor dowiadujemy się jakie ma on formaty instrukcji i na jakich podstawowych formatach danych operuje (formaty danych poznaliśmy w rozdziale 1 „Kody i kodowanie w systemach cyfrowych”).

2.2. Sposoby adresowania

Sposoby adresowania to inaczej tryby adresowania (ang. addressing modes). Tryb adresowania jest sposobem czyli algorytmem określenia tzw. adresu efektywnego EA na podstawie zawartości pola adresowego A w rozkazie oraz zawartości pewnych komórek pamięci lub rejestrów procesora. Adres efektywny zamieniany jest na tzw. adres fizyczny, tzn. adres pojawiający się na tzw. szynie adresowej procesora, ale w sposób w zasadzie ukryty dla programisty.

Po kolei omówimy najważniejsze tryby adresowania. Będziemy przy tym używać następującej notacji: EA to będzie tzw. adres efektywny, a A pole adresowe rozkazu.

  • Adresowanie natychmiastowe (ang. immediate addressing) jest to sposób adresowania, w którym argument dla instrukcji jest bezpośrednio podany w tej instrukcji.
  • Adresowanie bezpośrednie (ang. direct addressing) to sposób adresowania w pewnym sensie najnaturalniejszy. Adres argumentu lub wyniku jest podany w części adresowej rozkazu.
  • Adresowanie rejestrowe (ang. register addressing) jest w gruncie rzeczy adresowaniem bezpośrednim, z tym że pole adresu (zwykle bardzo krótkie) adresuje tylko adresy wewnętrzne procesora.
  • Adresowanie pośrednie (ang. indirect addressing) to podawanie adresu komórki pamięci, w której znajduje się adres argumentu lub wyniku działania instrukcji. Jeśli pośrednich odwołań jest więcej, to taki sposób adresowania nazywamy adresowaniem pośrednim wielopoziomowym.

Rys. 2. Adresowanie pośrednie

  • Adresowanie względne polega na tym, że adres efektywny EA otrzymujemy przez dodanie wartości pola adresu A do bieżącej zawartości licznika rozkazów. Zwykle przy tym sposobie adresowania pole adresowe jest traktowane jako liczba w kodzie uzupełnień do dwóch.
  • Adresowanie pośrednie rejestrowe (ang. indirect addressing) jest to w gruncie rzeczy adresowanie pośrednie ale adres argumentu lub wyniku znajduje się w rejestrze.
  • Adresowanie indeksowe (ang. indexed addressing) polega na dodaniu adresu podanego w rozkazie do tzw. rejestru indeksowego. Pole adresowe A rozkazu zawiera przy tym sposobie adresowania więcej bitów niż w przypadku adresowania bazowego.
  • Adresowanie bazowe (ang. base register addressing) polega na dodaniu do adresu podanego w rozkazie do tzw. rejestru bazowego.
  • Adresowanie bazowo-indeksowe polega na dodaniu do siebie zawartości rejestru indeksowego, rejestru bazowego i wartości pola adresowego rozkazu.
  • Adresowanie stosowe. Praktycznie w każdym procesorze organizuje się bardzo użyteczną strukturę danych jaką jest stos. Do stosu odwołujemy się za pomocą specjalnego rejestru tzw. wskaźnika stosu oznaczanego z reguły symbolem SP (od ang. stack pointer). Możemy przesłać np. słowo na stos znajdzie się ono wtedy na wierzchołku stosu. Ze stosu możemy również odczytać słowo ale tylko znajdujące się na wierzchołku stosu. Znika ono wtedy ze stosu a wskaźnik stosu SP jest odpowiednio modyfikowany.

Dobrym wyobrażeniem stosu jest stosik kartek, z którego kartkę możemy zdejmować tylko od góry i kłaść kartki w naturalny sposób na wierzch stosu kartek.

Adresowanie względne, adresowanie bazowe, adresowanie indeksowe i indeksowo-bazowe nazywa się adresowaniem z przesunięciem (ang. displacement addressing). Ogólny schemat obliczania adresu efektywnego jest tu taki

EA=A+ (R)

lub

EA=A+(R1)+(R2)

gdzie R, R1, R2 są rejestrami procesora.

Czasami używamy określenia adresowanie niejawne. Określenie to oznacza, że dany rozkaz odwołuje się do pewnych rejestrów czy komórek pamięci w sposób określony w opisie rozkazu, nie korzystając w tym trybie adresowania z pola adresowego A

2.3. Lista rozkazów

Lista rozkazów to inaczej lista instrukcji (ang instruction set). Typowa lista instrukcji współczesnego mikroprocesora zawiera 100 do 200 instrukcji.

Lista instrukcji jest podstawą do podzielenia mikroprocesorów na mikroprocesory typu RISC (ang. Reduced Instruction Set Computer) i typu CISC (ang. Complex Instruction Set Computer). Mikroprocesory typu RISC mają relatywnie krótką listę instrukcji i instrukcje są proste. Mikroprocesory typu CISC mają bardzo rozbudowaną listę instrukcji.

Rozkazy można podzielić na kilka kategorii. Przykłady podane w ramach danej kategorii dotyczą asemblera dla rodziny mikroprocesorów Intel x86.

  • Rozkazy przesłań (rozkazy transmisji danych)
MOV AX,BX ;prześlij zawartość rejestru BX do rejestru akumulatora (rejestru AX)
; również instrukcje operujące na stosie są instrukcjami przesłań
PUSH AX ; prześlij zawartość rejestru AX na szczyt stosu
POP AX ; prześlij 16-bitowe słowo znajdujące się na szczycie stosu
; do rejestru AX
  • Rozkazy arytmetyczne (dodawanie ADD, odejmowanie SUB, mnożenie MUL, dzielenie DIV)
ADD AX,BX ; dodaj zawartość rejestru AX do zawartości rejestru BX
; i wynik umieść w rejestrze AX
  • Rozkazy logiczne (NOT, OR, AND, XOR)
XOR AL,AL ; instrukcja logiczna zerująca rejestr AL
  • Przesunięcia i rotacje
RCL AX,5 ; przesuń w lewo cyklicznie akumulator o 5 pozycji w lewo
  • Skoki i wywołania podprogramów
INT 21 ; wywołanie programu obsługi przerwania 21
JMP et ; skocz do etykiety et
  • Instrukcje we/wy (IN, OUT)
IN AL, 5 ; wprowadzenie danej z portu o numerze 5 do rejestru AL
  • Instrukcje wspomagające system operacyjny

3. Współpraca pamięci cache z pamięcią operacyjną

Współpraca pamięci cache z pamięcią operacyjną

3.1. Pamięć cache

Pamięć cache to inaczej pamięć podręczna. Na ogół pamięć cache wykonywana jest jako pamięć statyczna SRAM i jest znacznie szybsza od pamięci głównej systemu komputerowego. W szerszym sensie pamięć cache to każda szybka pamięć RAM o stosunkowo niewielkiej pojemności (pamięć szybka jest z reguły droższa przy tej samej pojemności).

Będzie nas teraz interesować współpraca pamięci cache z pamięcią główną. Pamięć cache zorganizowana jest na ogół w m wierszy k-bajtowych nazywanych czasem linijkami (por. rys. 1). Znacznik jest w pamięci cache adresem wiersza. Pamięć cache ma więc organizację bajtową. Przyjmiemy, że pamięć główna ma również organizację bajtową i podzielona jest na bloki o długości równej długości wiersza. Pomiędzy pamięcią cache a pamięcią główną dane wymieniamy blokami.

 

Rys. 1. Organizacja pamięci cache; wygodnie jest przyjąć, że m i k są potęgami 2

Omówimy współpracę pamięci cache z pamięcią główną na przykładzie pamięci cache z tzw. odwzorowaniem bezpośrednim. Oznacza to, że jeśli i jest numerem (adresem) wiersza pamięci cache, j jest numerem bloku pamięci głównej, a m ilością wierszy pamięci cache, to

i = j (mod m)

Powyższa funkcja odwzorowania może być łatwo zrealizowana za pomocą podziału adresu pamięci głównej na 3 pola (znacznik, znacznik wiersza, pole pozycji bajtu). Najmniej znaczące bity adresu (czyli bity pola pozycji bajtu) określają jednoznacznie pozycję bajtu w bloku. Pozostałych s bitów określa jeden z 2s bloków pamięci głównej. Układy logiczne pamięci cache interpretują te s bitów jako znacznik złożony z s-r bitów (bardziej znaczące bity) i r bitów (mniej znaczących) określających jeden z 2r wierszy pamięci cache, czyli znacznik wiersza.

Kiedy procesorowi potrzeby jest bajt spod określonego adresu zwraca się on najpierw do pamięci cache. Jeśli znajduje tam poszukiwany bajt, to mówimy, że nastąpiło trafienie. Jeśli poszukiwanego bajtu nie ma w pamięci cache, to procesor przenosi do pamięci cache odpowiedni blok z pamięci głównej, gdzie znajduje się poszukiwany bajt.

Możemy mieć kilka poziomów pamięci cache. Najczęściej stosowane są jeden lub dwa poziomy: L1 i L2 (odpowiednio cache 1-go i 2-go poziomu) .

Często jako pamięć cache stosowana jest pamięć skojarzeniowa. Umożliwia ona operowanie wierszami w wygodniejszy sposób niż w przypadku odwzorowania bezpośredniego.

Stosowanie pamięci cache współpracującej z pamięcią główną to przykład hierarchicznej organizacji (i współpracy) pamięci o różnych szybkościach i pojemnościach. Podstawowy pomysł polega na tym by z pary:

  • wolna (ale tania) pamięć o dużej pojemności
  • szybka (i droga) pamięć o małej pojemności

zrobić pamięć względnie tanią, szybką i o dużej pojemności.

Realizację tej koncepcji stanowi również tzw. pamięć wirtualna. Istota rzeczy polega tu na tym, że programista widzi (tzn. może wykorzystać w pisanym prze siebie programie) znacznie większą pamięć operacyjną niż ta, jaką dysponuje w rzeczywistości. Tak się dzieje dzięki hierarchicznej współpracy zewnętrznej pamięci dyskowej (o bardzo dużej pojemności) z pamięcią operacyjną. Mechanizmem który umożliwia stosunkowo łatwą realizację pamięci wirtualnej jest tzw. stronicowanie pamięci czyli podział pamięci operacyjnej na strony.

Inną alternatywną organizacja pamięci jest tzw. segmentacja pamięci, czyli podział pamięci operacyjnej na segmenty.

W typowym mikroprocesorze zarządzaniem pamięcią zajmuje się specjalizowany układ, tzw. układ zarządzania pamięcią (MMU od ang. Memory Management Unit).

4. System komputerowy

System komputerowy

4.1. Przesyłanie danych wewnątrz systemu cyfrowego

Załóżmy, że mamy kilka rejestrów R1, R2, ..., Rn, pomiędzy którymi chcemy równolegle przesyłać dane. Przesłania rejestrowe w systemie cyfrowym można zorganizować na 2 sposoby:

  • Najprostsza metoda (metoda przesłań bezpośrednich między rejestrami) to połączenie rejestrów na zasadzie każdy z każdym (por. rys. 1). Rozwiązanie takie daje, jak łatwo zauważyć, szybką transmisję, ale jest kłopotliwe w realizacji i kosztowne.

Rys.1. Połączenie rejestrów na zasadzie każdy z każdym

Na rys. 2. pokazana jest organizacja szynowa przesyłania danych w systemie cyfrowym. Szyną lub magistralą (ang. bus) nazywamy wiązkę n przewodów, przez które możemy przesyłać równolegle n-bitowe słowo. Zasada przyjęta w organizacji szynowej przesyłania danych jest taka, że źródło słowa binarnego wystawianego na szynę w danym takcie zegara może być tylko jedno (nadajnik może być tylko jeden). Reszta nadajników powinna być w tym czasie wyłączona (ich wyjścia na szynę powinny znajdować się w stanie trzecim, czyli stanie wysokiej impedancji). Odbierać informację z szyny może natomiast każdy układ. którego wejścia są podłączone do szyny.

W systemie cyfrowym szyn może być kilka (zwiększa to przepustowość transmisji). Mówimy wtedy o organizacji wieloszynowej. Typowym rozwiązaniem stosowanym w systemach komputerowych jest organizacja 3-szynowa. Stosujemy osobne szyny dla danych (szyna danych, ang. data bus), dla adresów (szyna adresowa, ang. address bus) i dla sygnałów sterujących (szyna sterująca, ang. control bus). Szyny stosowane są zarówno wewnątrz mikroprocesora jak i na zewnątrz.

Zaletą organizacji szynowej jest przejrzystość organizacji systemu, znaczna oszczędność miejsca w układzie i łatwość realizacji szyny za pomocą wyjść trójstanowych (najczęściej tak właśnie się robi) lub wyjść typu OC (ang. open collector). Wadą jest ograniczona przepustowość szyny.

Rys.2. Organizacja szynowa przesyłania danych w systemie cyfrowym a) jednoszynowa b) wieloszynowa (tu dwuszynowa); rejestry i szyny są n-bitowe

4.2. System komputerowy

Poznaliśmy już pojęcie procesora i pamięci operacyjnej czyli główne. Jeśli dołączymy do tych układów tzw. układ we/wy, to otrzymamy system komputerowy. Układ we/wy łączy system komputerowy ze światem zewnętrznym, tzn. umożliwia wprowadzanie i wyprowadzanie danych ze świata zewnętrznego.

Rys. 3. Najprostszy system komputerowy

 

Rys. 4. Najprostszy system komputerowy w organizacji szynowej

 

Rys. 5. Typowa organizacja szynowa systemu komputerowego; szyna pokazana na rysunku składa się z reguły z 3 oddzielnych szyn: danych, adresowej i sterowania

5. System przerwań

System przerwań

5.1. System przerwań

Przerwanie (ang. interrupt) to przejście, skok do wykonania specjalnego programu zwanego programem obsługi przerwania.

System przerwań (ang. interrupt system) umożliwia przerwanie wykonania bieżącego programu przez mikroprocesor i przejście do wykonania programu obsługi przerwania. System przerwań umożliwia mikroprocesorowi reagowanie na zdarzenia zachodzące wprzypadkowych chwilach w samym mikroprocesorze lub w świecie zewnętrznym w stosunku do mikroprocesora.

Bezpośrednią przyczyną przerwania może być:

  • pojawienie się sygnału zgłoszenia przerwania na wejściu przerywającym mikroprocesora oznaczonym z reguły symbolem INT; czasem mamy kilka takich wejść INT1, INT2, NMI (ang. nonmaskable interrupt); sygnał INT jest z reguły wystawiany przez współpracujące z mikroprocesorem układy we/wy;
  • zajście pewnego zdarzenia wewnątrz mikroprocesora np.: próba dzielenia przez 0, wyjście podczas obliczeń poza zakres liczb reprezentowanych w systemie lub ogólniej wystąpienie błędu pewnego typu;
  • wykonanie rozkazu „wykonaj przerwanie o numerze n”; rozkaz taki ma zwykle postać INT n, gdzie INT jest mnemonikiem, czyli symboliczną nazwą rozkazu, a n numerem przerwania.
Często przerwaniem nazywamy też samo pojawienie się sygnału 1 na wejściu INT mikroprocesora.

Przerwania dzielimy na przerwania zewnętrzne (spowodowane przez współpracujące układy we/wy) i przerwania wewnętrzne wywołane przez sam mikroprocesor. Inny podział to przerwania sprzętowe i programowe.

W mikroprocesorze istnieje przerzutnik włączający i wyłączający system przerwań. Przerzutnik ten z reguły jest wyłączany sygnałem RESET zerującym mikroprocesor. Może być ponadto włączany rozkazem EI (ang. interrupt enable) i wyłączany rozkazem DI (ang. interrupt disable). Przerzutnik ten należy zazwyczaj do rejestru znaczników i jest oznaczany symbolem IF (ang. Interrupt Flag).

Na początku ( lub na końcu cyklu rozkazowego) mikroprocesor sprawdza, czy pojawiło się zgłoszenie przerwania. Jeśli się pojawiło i system przerwań jest włączony, to układ sterowania:

  • wyłącza system przerwań
  • zapamiętuje zawartość licznika rozkazów LR na stosie
  • dokonuje podstawienia LR := adres Nie, gdzie n jest numerem przerwania
  • Jest to przejście do wykonywania podprogramu, wymuszone przez przerwanie. Adres skoku oznaczony symbolem adres (n), nazywa się adresem programu obsługi przerwania.

Rys. 1. Cykl rozkazowy mikroprocesora z uwzględnieniem momentów czasu, w których sprawdzana jest obecność sygnału przerwania

Numer przyczyny przerwania n automatycznie określa adres, pod którym znajduje się uprzednio wpisany adres początku programu obsługi przerwania adres (n). Adresy zawarte w komórkach f(1), f(2),..., f(r) tworzą tzw. wektor adresów przerwań. Stąd nazwa tak działającego systemu przerwań: wektoryzowany system przerwań.

Mikroprocesor może mieć kilka wejść INT, ale większość mikroprocesorów ma jedno wejście INT i ustalanie przerwania odbywa się w momencie wystawienia przez mikroprocesor sygnału potwierdzenia INTA (ang. interrupt acknowledge), który powoduje podanie na magistralę danych numeru identyfikującego przerwania.

Powrót z podprogramu obsługi przerwania jest realizowany tak jak z każdego podprogramu (instrukcja IRET lub RETURN). Musimy jednak pamiętać, by włączyć wyłączony system przerwań. Żeby móc wrócić do punktu wyjścia po obsłużeniu przerwania musimy w momencie przyjścia przerwania przenieść na stos wszystkie zasadnicze rejestry mikroprocesora jak np. akumulator i rejestr znaczników.

Pewne problemy pojawiają się, gdy wiele sygnałów przerwań może pojawić się jednocześnie, ponieważ:

  • musimy zidentyfikować źródła
  • zadecydować o priorytecie
  • zadecydować czy przerwanie może przerwać program obsługi przerwania

W systemie przerwań wektoryzowanych na szynę danych przesyłana jest (w kodzie NKB) liczba n będąca identyfikatorem urządzenia zgłaszającego przerwanie.

Obsługa przerwań może być sekwencyjna lub wielopoziomowa, gdy dopuszczalne jest przerwanie programu obsługi przerwania przez przerwanie o wyższym priorytecie.

Zadaniem kontrolera przerwań jest obsługa wielu żądań przerwań nadchodzących do mikroprocesora i odciążenie tego ostatniego od części zadań z tym związanych. Typowym kontrolerem przerwań jest układ Intel 8259.

Rys. 2. Bezpośredni system przerwań

 

Rys. 3. Bezpośredni system przerwań z maskowaniem

6. Układy we/wy, DMA, magistrale

Układy we/wy, DMA, magistrale

6.1. Układy we/wy

Podstawowym układem wejścia-wyjścia jest równoległy układ we/wy (ang. parallel interface unit, parallel input/output circuit). Jest to z reguły układ programowany, tzn. przed rozpoczęciem pracy układu mikroprocesor przesyła do niego (ściślej do rejestru sterowania układu we/wy) polecenie określające jego tryb pracy, a dokładniej:

  • sposób wysyłania informacji (czy bezpośrednio, czy z potwierdzeniem)
  • kierunek przesyłania informacji (czy układ ma pracować jako wejście, czy jako wyjście)

Schemat blokowy typowego układu we/wy pokazany jest na rys. 1. Z punktu widzenia mikroprocesora układ we/wy jest zespołem adresowanych rejestrów z tzw. przestrzeni adresowej we/wy.

Typowym uniwersalnym układem we/wy jest np. układ Intel 8255.

Rys. 1. Schemat blokowy typowego układu we/wy

6.2. Układ czasowo-licznikowy

Układ czasowo-licznikowy (ang. timer-counter circuit) służy do zliczania impulsów przychodzących na jedną z jego końcówek lub odmierzaniu odcinków czasu w systemie komputerowym. Mówimy też o programowanych układach czasowo-licznikowych (ang. programmable timer-counter), ale praktycznie wszystkie stosowane w praktyce układy tego typu są programowane, tzn. wstępnie przed podjęciem przez nie akcji ustawiany jest ich tryb pracy.

Odmierzanie czasu łatwo można zrealizować sprzętowo (odciążając procesor) przez zliczanie impulsów zegarowych w licznikach o zadanej pojemności (tzw. liczniki programowane) i podejmowanie wymaganych działań w chwili wyzerowania się licznika lub jego przepełnienia się.

Układy czasowo-licznikowe (w skrócie CTC) produkowane są jako niezależne układy scalone (np. układ firmy Intel 8254) lub są włączane do chipu mikroprocesorowego (np. w mikroprocesorze jednoukładowym Intel 8051).

Układy czasowo-licznikowe zawierają na ogół kilka niezależnych liczników. Np. układ 8254 ma 4 liczniki programowalne służące do odmierzania czasu lub zliczania impulsów.

Budowa typowego układu CTC pokazana jest na rys. 2.

 

Rys. 2. Typowy układ licznikowo-czasowy

Układ działa w sposób następujący: Wstępnie do układu sterującego przesyłamy słowo sterujące ustawiające tryb pracy układu. Następnie do rejestru stałej przesyłamy liczbę m programującą okres licznika programowanego, która wpisywana jest do licznika. Impulsy przychodzące z wejścia zewnętrznego lub wejścia zegarowego są zliczane przez licznik (rewersyjny) aż do momentu, gdy komparator zera wykryje 0 na wyjściu licznika. Powoduje to wyprowadzenie sygnału 1 na wyjściu układu (jest to na ogół jednocześnie sygnał przerwania).

Cykl zliczania może się automatycznie powtórzyć lub nie, zależnie od tego, w jakim trybie pracy znajduje się układ czasowo-licznikowy.

Zauważmy, że komparator zera w powyższym schemacie nie musi być blokiem funkcjonalnym komparatora. Komparatorem zera jest bowiem znacznie prostszy wielowejściowy układ NOR.

6.3. Układ DMA

Układ DMA (ang. Direct Memory Access) to inaczej układ bezpośredniego dostępu do pamięci (układ ten nazywamy też sterownikiem lub kontrolerem DMA). Schemat blokowy układu i sposób współpracy z innymi fragmentami systemu komputerowego pokazany jest na rys. 3.

Celem stosowania układu jest odciążenie mikroprocesora od czynności związanych z przekazywaniem danych przez szynę systemową i jednocześnie przyśpieszenie transmisji. W architekturze mikrokomputera DMA podporządkowany jest mikroprocesorowi, który pełni funkcję jednostki nadrzędnej.

Układ DMA musi być przed transmisją zaprogramowany przez procesor przez przesłanie do DMA 3 podstawowych parametrów transmisji:

  • kierunku przesyłania (skąd, dokąd)
  • długości transmitowanego bloku
  • początkowego adresu obszaru pamięci na który będziemy zapisywać dane lub z którego będziemy czytać dane. Z reguły operujemy spójnymi obszarami pamięci.

Rys. 3. Współpraca układu DMA z mikroprocesorem, PAO i układem we/wy (tutaj sterownikiem twardego dysku)

Typowy prosty sterownik DMA składa się z licznika słów LS, licznika adresów LA, rejestru sterującego C i rejestru stanu S. Sterownik ma następujące wejścia i wyjścia:

D - dwukierunkowa szyna danych
A - magistrala adresowa np. linie A0-A15 (A0, A1 są we/wy)
HOLD (wy) - sygnał żądania dostępu do szyny
HOLDA(we) - sygnał akceptacji dostępu do szyny
DRQ (we) - sygnał zgłaszający gotowość urządzenia
DACK (wy) - polecenie przesłania słowa danych np. bajt

 

Rys. 4. Schemat blokowy typowego sterownika DMA

 

Rys. 5. Sygnały sterujące DMA

DMA zgłasza sygnałem HOLD żądanie dostępu do szyny. W momencie gdy mikroprocesor zaakceptuje żądanie dostępu do szyny, wystawia sygnał HOLDA i „przechodzi w trzeci stan”. Kontrolę nad szyną systemową i transmisją danych przejmuje DMA.

Układy DMA są stosowane w systemach mikrokomputerowych przede wszystkim do sterowania przesyłaniem bloków danych między pamięcią operacyjną PAO a szybkimi pamięciami zewnętrznymi np. twardym dyskiem.

Typowy układ DMA to np. Intel 8257

6.4. Magistrale

Magistrala to synonim szyny (ang. bus). Jest to (por. podrozdział o przesłaniach wewnątrz systemu cyfrowego) standardowa droga komunikacyjna najczęściej związana z pewnymi regułami przesyłania po niej informacji (danych, adresów, sygnałów sterujących).

Mówimy szyna danych, jeśli przesyłamy szyną dane, szyna adresowa jeśli adresy, szyna sterująca jeśli sygnały sterujące. Połączenie tych 3 szyn nazywamy najczęściej szyną systemową.

W systemie komputerowym używa się znacznie więcej typów magistral służących do różnych celów. Mamy np. magistralę FSB (ang. Front Side Bus), ISA, PCI, SCSI, AGP itd. Magistrala jest często również rozumiana jako interfejs łączący system komputerowy ze światem zewnętrznym, światem urządzeń peryferyjnych.

Zasadniczym parametrem magistrali jest jej przepustowość.

7. Przetwarzanie równoległe, potokowe i sieci systoliczne

Przetwarzanie równoległe, potokowe i sieci systoliczne

7.1. Przetwarzanie równoległe, potokowe i sieci systoliczne

Równoległy system przetwarzania danych (ang. parallel processing) pokazany jest na rys. 1. Pomysł, by w tym samym czasie realizować poszczególne fragmenty algorytmu, jest naturalną drogą pozwalającą przyśpieszyć system cyfrowy. Nie każdy jednak algorytm daje się rozbić na takie niezależne części, by mógł być realizowany równolegle. Z drugiej strony, jeśli mamy n procesorów, nie musimy na wszystkich realizować tego samego zadania.

Rys. 1. Przetwarzanie równoległe danych; P# k oznacza procesor o numerze k

Innym sposobem przyśpieszenia przetwarzania jest tzw. przetwarzania potokowe (ang. pipelining). W przetwarzaniu potokowym n procesorów realizuje fragmenty algorytmu, tak jak dzieje się to na taśmie produkcyjnej, przekazując „półprodukt” do następnego procesora po ustalonym czasie T. Schemat blokowy układu przetwarzania potokowego pokazany jest na rys.2.

Rys. 2. Przetwarzanie potokowe

Układy systoliczne lub - jak czasem mówimy - sieci systoliczne lub tablice systoliczne (ang. systolic array) łączą dwie wyżej opisane koncepcje przyśpieszania realizacji algorytmu: przetwarzanie równoległe i przetwarzanie potokowe i mają następujące cechy:

  • regularność struktury
  • modularność
  • lokalność połączeń
  • przetwarzanie równoległe i potokowe

Sieci systoliczne służą do realizacji różnych ważnych algorytmów np.:

  • sortowania
  • obliczania iloczynu skalarnego wektorów,
  • mnożenia wektora przez macierz
  • mnożenia macierzy
  • obliczania DFT (w gruncie rzeczy jest to też mnożenie wektora przez macierz)
  • realizacji metody najmniejszych kwadratów

 

a)

b)

Rys. 3. Typowe struktury sieci systolicznych a) struktura jednowymiarowa b) struktura dwuwymiarowa

Omówimy dokładniej sieci systoliczne sortujące lub - jak mówimy krócej - układy sortujące. Układy sortujące są ważnym z praktycznego punktu widzenia układem służą np. do realizacji filtrów medianowych i kwantylowych w cyfrowym przetwarzaniu sygnałów.

Warto w tym miejscu przypomnieć, co to jest sortowanie. Sortowanie ciągu liczbowego a1, a2, ...an to jego porządkowanie. Formalnie rzecz biorąc sortowanie ciągu sprowadza się do znalezienia takiej permutacji π:<1, n>→<1, n>, by spełnione były nierówności aπ(1) ≤ aπ(2) ≤ ... ≤ aπ(n).

Algorytmów sortowania jest dużo, nie wszystkie jednak dobrze nadają się do - jak mówimy w żargonie - „systolizacji”. W sieciach systolicznych znajdują zastosowanie trzy algorytmy sortowania:

  • algorytm bubblesort – sortowanie bąbelkowe
  • algorytm modified bubblesort – zmodyfikowane sortowanie bąbelkowe
  • algorytm insertion sort – sortowanie przez wstawianie

Na rys. 4. pokazana jest komórka podstawowa PC (ang. processing cell) sortującej sieci systolicznej, a na rys. 5. pokazana jest systoliczna sieć sortująca oparta na wykorzystaniu algorytmu modified bublesort.

Rys. 4. Układ komórki podstawowej PC oraz jej uproszczony symbol (po prawej)

 

Rys. 5. Sieć systoliczna sortująca (pięcioelementowy ciąg skończony liczb w kodzie NKB) oparta na algorytmie modified bubblesort; na wejście podawane są słowa o długości w

Rys. 6. Sieć systoliczna sortująca (ciąg skończony o długości n) oparta na algorytmie insertion sort; na wejście podawane są słowa o długości w; liczby zapisywane są w kodzie NKB

7.2. Arytmetyka rozłożona

Co to jest arytmetyka rozłożona i do czego służy? Jest to równoległo-szeregowa metoda - czy raczej koncepcja - układowej realizacji układów obliczających wartość kombinacji liniowej.

 y = \displaystyle\sum_{i=1}^k{a_i}{x_i} (*)

 

gdzie a1, a2, ..., ak są stałymi (reprezentowanymi przez słowa binarne), a x1, x2, ..., xk danymi wejściowymi (reprezentowanymi również przez słowa binarne).

Na wyrażenie (*) można patrzeć jak na iloczyn skalarny dwóch wektorów z przestrzeni Rn: (a1, a2, ..., ak) i (x1, x2, ..., xk).

Metoda dobrze nadaje się do realizacji filtrów cyfrowych NOI, SOI, do obliczania DFT i do realizacji cyfrowych filtrów adaptacyjnych (wymiana zawartości pamięci daje nowy filtr cyfrowy).

Rozwiązania układowe arytmetyki rozłożonej dobrze nadają się do realizacji iloczynu skalarnego (a1, a2, ..., ak) z takim „przesuwającym” się wektorem:

\quadx1, x2, x3, ..., xk
\qquad
x1, x2, x3, ..., xk
\qquad\quad x1, x2, x3, ..., xk

 

a to właśnie robią filtry FIR.

Istota rzeczy: zastępujemy mnożenie sumowaniem wyników częściowych zapisanych w pamięci. Metoda okazuje się tanią, prostą i oszczędną układowo i prosta w realizacji.

 

Wyjaśnimy koncepcję arytmetyki rozłożonej na przykładzie. Niech liczby a1, a2, ..., a∈ Q, x1, x2, ..., x∈ Q będą reprezentowane w zapisie U2. Załóżmy, że dla każdego chcemy obliczyć zdefiniowane tak:

yNie = a0xNie + a1x(n - 1) + a2x(n - 2) + b1y(n - 1) + b2y(n - 2) (**)

 

Takim właśnie równaniem różnicowym opisywana jest tzw. sekcja bikwadratowa filtru NOI (nieskończona odpowiedź impulsowa).

Przyjmijmy, że wartości bezwzględne wszystkich sygnałów nie przekraczają jedności i są przedstawione za pomocą B+1 bitów w zapisie U2, tzn.:

 x(k) = -x^0_k + \displaystyle\sum_{j=1}^Bx^j_k2^{-j} = \overset{B+1 bitów}{ \overbrace{(x^0_k, x^1_k, x^2_k, ..., x^B_k)}}

 

słowo binarne reprezentuje x(k) ( „rozpisujemy sygnały na bity”)

 y(k) = -y^0_k + \displaystyle\sum_{j=1}^By^j_k2^{-j} = {(y^0_k, y^1_k, y^2_k, ..., y^B_k)}

 

gdzie x_k^j, y_k^j  ∈ {0,1}. Nasze wyrażenie (**) na y(n) możemy teraz zapisać następująco:

 y(n) = -\overset{\text {bity znaków}}{\overbrace{x_n^0a_0 + x_{n-1}^0a_1 + a_2x_{n-2}^0 + b_1y^0_{n-1} + b_2y^0_{n-2}}} + (***)
+ \displaystyle\sum_{j=1}^{B}2^{-j}(a_0x_n^j + a_1x^j_{n-1} + a_2x^j_{n-2} + b_1y_{n-1}^j + b_2y^j_{n-2})  

Niczego nadzwyczajnego nie zrobiliśmy, poza zmianą kolejności sumowania.

Zauważmy, że w wyrażeniach w nawiasach a0, a1, a2, b1, b2 są stałe, zatem każdy „nawias” jest wartością pewnej funkcji pięciu zmiennych.

f (e_1, e_2, e_3, e_4, e_5) = a_0e_1 + a_1e_2 +a_2e_3 + b_1e_4 + b_2e_5

gdzie e1, e2, ..., e5 ∈ {0,1}. Nasza funkcja f może przyjmować tylko 32 wartości. Funkcję tę można zrealizować jako układ kombinacyjny lub zapamiętać w pamięci PROM.

Zatem przepisując (***) z użyciem nowego oznaczenia dostajemy:

y(n) = -f(x^0_n, x^0_{n-1}, x^0_{n-2}, y^0_{n-1}, y^0_{n-2}) + \displaystyle\sum_{j=1}^{B}2^{-j} f (x^j_{n}, x^j_{n-1}, x^j_{n-2}, y^j_{n-1}, y^j_{n-2})

Widać, że wyeliminowaliśmy w ten sposób mnożenie, a y(n) obliczać możemy przez sumowanie i przesuwanie odpowiedniej wartości funkcji f.

 

8. Architektura mikroprocesora Intel 8086

Architektura mikroprocesora Intel 8086

8.1. Wprowadzenie

Mikroprocesory można dzielić według różnych kryteriów. Najczęściej dzielimy je na

  • mikroprocesory CISC (ang. Complex Instruction Set Computer)
  • mikroprocesory RISC (ang. Reduced Instruction Set Computer)
  • mikroprocesory sygnałowe (mikroprocesory DSP)
  • mikrokontrolery (mikroprocesory jednoukładowe)
  • Najbardziej znane firmy produkujące mikroprocesory to Intel, Motorola, AMD (Advanced Micro Devices), Cyrix, IDT, Texas Instruments, DEC (Digital Equipment Corporation), IBM, Harris, HP (Hewlett Packard), Samsung, Atmel, Phillips. Skoncentrujemy się na mikroprocesorach firmy Intel z uwagi na ich ogromną popularność.

Intel 4004 to pierwszy mikroprocesor na świecie. Został zaprojektowany w roku 1969. Był to procesor 4-bitowy. Intel 8080 to pierwszy 8-bitowy mikroprocesor na świecie.

Intel 8086 to mikroprocesor 16-bitowy, który zainicjował rodzinę mikroprocesorów x86. Został wprowadzony do produkcji w 1978 roku, zawierał około 29 tys. tranzystorów i w momencie wprowadzania do produkcji był taktowany zegarem 8 MHz. Równolegle z mikroprocesorem Intel 8086 był produkowany Intel 8088. Była to odmiana mikroprocesora 8086 z 8-bitową szyną danych. Z Intelem 8086 i 8088 współpracował układ koprocesora numerycznego Intel 8087. Bardzo popularnym mikroprocesorem 16-bitowym był również Intel 80286 wprowadzony do produkcji w roku 1982. Intel 286 zawierał około 134 tys. tranzystorów i został w nim po raz pierwszy wprowadzony tzw. chroniony tryb pracy (ang. protected mode).

Intel 80386 był pierwszym 32-bitowym mikroprocesorem rodziny x86. Z kolei Intel 80486 był pierwszym mikroprocesorem rodziny x86 zawierającym wewnątrz chipu mikroprocesora koprocesor numeryczny oraz 8 kB pamięci notatnikowej typu cache. Kolejne mikroprocesory rodziny x86 to już zupełnie współczesne konstrukcje 32-bitowe: Pentium, Pentium II, Pentium III i Pentium IV.

We wszystkich mikroprocesorach Pentium mamy 2 pamięci cache L1 i L2 (pamięć cache pierwszego i drugiego poziomu), maksymalną pojemność pamięci operacyjnej 64 GB i 64-bitową szynę danych. Wszystkie mikroprocesory Pentium wyposażone są w koprocesor czyli FPU (8 rejestrów 80 bitowych). Pentium 4 ma dodatkowo 64 bitową jednostkę MMX (8 rejestrów 64 bitowych) i 128 bitową jednostkę SSE (Streaming SIMD Extensions). Przypominamy, że skrót SIMD oznacza Single Instruction Multiple Data (czyli przetwarzanie równoległe polegające na zastosowaniu tej samej instrukcji do różnych danych)

Bardzo ważną cechą rodziny x86 jest to, że programy pisane na wcześniejsze mikroprocesory rodziny mogą być uruchamiane na mikroprocesorach wyższych w hierarchii rodziny tzn. opracowanych później. Zatem wymiana procesora nie musi pociągać za sobą wymiany oprogramowania.

Warto jeszcze wspomnieć o mikrokontrolerach Intel 8051 i Intel 8052. To bardzo popularne, udane mikrokontrolery, których odpowiedniki produkowane są przez wiele firm.

8.2. Kody wykorzystywane w mikroprocesorach rodziny Intel x86

Najczęściej wykorzystywanym kodem alfanumerycznym jest kod ASCII w różnych odmianach.

Z kodów numerycznych wykorzystywane są najczęściej 4 kody: kod NKB, kod uzupełnień do 2, kod BCD 8421 i zapis zmiennoprzecinkowy (w koprocesorze). Pamiętamy, że w kodzie NKB dla anan-1...a0, ai ∈ {0,1} mamy

a_na_{n-1}\dots a_0 = \displaystyle\sum^n_{i=0}a_i2^i

Dla kodu uzupełnień do 2 (czyli U2) dla anan-1...a0, ai ∈ {0,1} mamy

a_na_{n-1}\dots a_0 = -a_n \cdot 2^n + \displaystyle\sum^{n-1}_{i=0}a_i2^i

Warto przypomnieć, że algorytmy podstawowych działań arytmetycznych w tym kodzie są dobrze dopasowane do sprzętu. Co przekładając na język praktyki oznacza, że są szybkie i łatwe do implementacji. Wyjaśnia to popularność zapisu U2 w mikroprocesorach.

Kod BCD (8421) wykorzystywany jest w dwu wersjach jako spakowany kod BCD (packed BCD) i niespakowany (unpacked BCD).

Zapis zmiennoprzecinkowy używany jest w kilku formatach zgodnych ze standardem IEEE 754.

Warto pamiętać, że znacznik OF =1 (OF to overflow flag) oznacza nadmiar w zapisie uzupełnień do 2, a nie w zapisie NKB.

8.3. Architektura mikroprocesora 8086

Intel 8086 jest jednym z pierwszych mikroprocesorów 16-bitowych. Został wprowadzony do produkcji przez firmę Intel w roku 1980.

Układ mikroprocesora 8086 składa się z 2 pracujących niezależnie głównych części BIU (Bus Interface Unit) i części wykonawczej EU (Execution Unit). W BIU znajduje się bufor mieszczący kolejkę rozkazów o długości 6 bajtów.

Licznik rozkazów PC (Program Counter lub Program Pointer lub Instruction Pointer) jest 16-bitowy.

Pamięć operacyjna w systemie 8086 zorganizowana jest bajtowo, tzn. adresowany jest każdy bajt i ma maksymalną pojemność 1 MB tzn. 220 bajtów. Adres fizyczny (wystawiany na końcówkach szyny adresowej) ma 20 bitów.

Cztery 16-bitowe rejestry ogólnego przeznaczenia AX, BX,CX, DX mogą być traktowane jako pary rejestrów 8-bitowych, tzn.

AX=(AH,AL), BX=(BH,BL), CX=(CH,CL), DX=(DH,DL)

W naturalny sposób w mikroprocesorze 8086 można operować bajtami.

 

Rys 1. Architektura mikroprocesora Intel 8086. CS, DS, SS, ES to 16-bitowe rejestry segmentowe. Blok rejestrów ogólnego przeznaczenia to 16-bitowe rejestry AX, BX, CX, DX. Blok rejestrów wskaźnikowych i indeksowych to 16-bitowe rejestry SP, BP, SI, DI.

Układ 8086 zawiera osiem 16-bitowych rejestrów roboczych.

Pierwsza grupa tych rejestrów to 4 rejestry ogólnego przeznaczenia:

AX – rejestr akumulatora, mówimy krótko akumulator
BX – rejestr bazowy (base register)
CX - rejestr zliczający (count register), służy do zliczania liczby obiegów pętli
DX – rejestr danych (data register)

Druga grupa to rejestry indeksowe i wskaźnikowe:

SP – wskaźnik stosu (stack pointer)
BP – wskaźnik bazowy (base pointer)
SI – rejestr indeksowy źródła (source index register)
DI – rejestr indeksowy przeznaczenia (destination index register)

Grupa 4 rejestrów segmentowych to:

CS – rejestr segmentu programu (code segment register)
DS – rejestr segmentu danych (data segment register)
SS – rejestr segmentu stosu (stack segment register)
ES – rejestr segmentu dodatkowego

Rys. 2. Rejestry mikroprocesora 8086

 

Rys. 3. Rejestr znaczników FR (Flag Register) i usytuowanie znaczników w rejestrze FR; symbolem NU (ang. not used) oznaczone są niewykorzystane pozycje rejestru FR

Struktura 16-bitowego rejestru znaczników FR (ang. Flag Register) pokazana jest na rys.3. Znacznik (ang. flag lub status flag) to pozycja rejestru znaczników pozwalająca zapamiętać sytuację taką jak np. wystąpienie nadmiaru lub pozwalająca ustawić parametr taki jak DF (kierunek inkrementacji) decydujący o sposobie wykonania pewnych instrukcji. W słowie 16-bitowym mamy 9 znaczników o następującym znaczeniu:

  • OF - nadmiar w zapisie U2 (ang. overflow flag). OF = 1 oznacza wystąpienie nadmiaru
  • DF - kierunek inkrementacji (ang. direction flag), ustawiany jest rozkazem STD a zerowany rozkazem CLD. DF wskazuje czy zawartości rejestrów SI i DI mają być zwiększane o1 czy zmniejszane o1.
  • IF - znacznik włączający i wyłączający system przerwań (ang. interrupt flag) IF = 1 zezwala na przyjmowanie przerwań, IF = 0 oznacza brak zezwolenia na przyjmowanie przerwań
  • TF - znacznik pracy krokowej (ang. trap flag)
  • SF - znacznik znaku (ang. sign flag), SF = 0 liczba dodatnia, SF = 1 liczba ujemna
  • ZF - znacznik zera (ang. zero flag), ZF = 0 wynik różny od 0, ZF = 1 wynik równy 0
  • AF - przeniesienie pomocnicze (ang. auxiliary carry flag), jest to przeniesienie z bitu 3 na 4
  • PF - znacznik parzystości (ang. parity flag), PF = 0 liczba jedynek wyniku jest nieparzysta, PF = 1 liczba jedynek wyniku jest parzysta
  • CF - znacznik przeniesienia (ang. carry flag)

8.4. Segmentacja pamięci operacyjnej

Pamięć operacyjna z punktu widzenia programisty podzielona jest na tzw. segmenty (spójne fragmenty pamięci) o maksymalnym rozmiarze 64 kB, które mogą na siebie zachodzić.

Procesor 8086 ma 4 rejestry segmentowe CS,DS,SS,ES. Rejestr segmentowy kodu programu CS wskazuje segment, z którego pobierane są kolejne rozkazy do wykonania. Rejestr segmentowy danych DS wskazuje segment, w którym zapamiętywane są dane używane w programie. Rejestr segmentowy stosu SS wskazuje segment pamięci w którym zdefiniowany jest stos. Rejestr segmentu dodatkowy ES wskazuje dodatkowy segment danych

Każde odwołanie się do pamięci musi zawierać adres segmentu, czyli adres początkowy segmentu (symbolicznie oznaczany jako SEGMENT) i przemieszczenie w ramach segmentu (symbolicznie oznaczamy to przemieszczenie symbolem OFFSET).

Powszechnie stosowaną notacją dla oznaczania adresu jest zapisanie najpierw adresu segmentu a za nim po dwukropku przesunięcia.. Pełny fizyczny adres w pamięci operacyjnej notujemy więc w postaci

SEGMENT:OFFSET

przy czym jeden adres fizyczny można przedstawić na wiele sposobów w postaci pary uporządkowanej SEGMENT:OFFSET. Na przykład adres pewnej danej w pamięci operacyjnej możemy zapisać tak: 40H:12H co oznacza, że dana znajduje się w segmencie o adresie 40H a przesunięcie w ramach segmentu wynosi 12H.

Możemy również używać w tym zapisie nazw rejestrów segmentowych. Możemy np. zapisać DS:24 co oznacza, że dana znajduje się w segmencie danych (o adresie: zawartość DS razy 24) z przesunięcie w segmencie równym 24.

Rys. 4. Adresowanie pamięci; adres fizyczny uzyskujemy przez dodanie arytmetyczne 16-bitowego adresu efektywnego (jest to tzw. OFFSET lub przemieszczenie wewnątrz segmentu) do wartości zapisanej w rejestrze segmentu (w kodzie NKB) pomnożonej przez 24; adres efektywny uzyskujemy zależnie od trybu adresowania

Rysunek 4. ilustruje zasadę segmentacji pamięci. Każdy segment zaczyna się na granicy będącej wielokrotnością 16 (a więc 0, 16, 32, 48 itd.) co pozwala zaadresować segmenty 16-bitowym słowem. Tworzenie 20-bitowego adresu fizycznego polega na uzupełnieniu słowa 16-bitowego 4-ma zerami od strony najmniej znaczących bitów.. Procesor automatycznie przyjmuje, że 4 najmłodsze bity z 20-bitowego adresu segmentu są zerami. Odwołując się do danej procesor dodaje do 20-bitowego adresu segmentu 16-bitowe przesunięcie tej danej w segmencie. Jest to fizyczny adres danej w pamięci operacyjnej.

System operacyjny MS-DOS automatycznie wypełnia rejestry CS, ES, i SS. Natomiast o rejestr DS program użytkownika musi zadbać sam, tzn. program użytkownika musi sam załadować rejestr DS adresem segmentu danych programu. Jeśli dane programu nie mieszczą się w 64 kB obszarze pamięci przeznaczonej standardowo na dane, to program użytkownika musi sam modyfikować zawartość rejestrów DS i ES.

Rys. 5. Segmentacja pamięci; segment jest podobny do „okienka” przesuwanego w górę i w dół pamięci, ze skokiem 16

9. Architektura IA-32

Mikroprocesor Pentium IV jest 32-bitowy, więc wszystkie podstawowe rejestry procesora EAX, EBX, ECX, EDX, ESP, EBP, EDI, ESI są 32-bitowe. Rejestry segmentowe są jak we wcześniejszych architekturach 16-bitowe. Do pewnych 16- i 8-bitowych fragmentów rejestrów EAX, EBX, ECX, EDX, ESP, EBP, EDI, ESI można odwoływać się w sposób niezależny przez nazwę, tak jak pokazane to jest na rys. 1

Rys. 1. Rejestry uniwersalne Pentium IV

Pamięć operacyjna jak we wszystkich mikroprocesorach rodziny x86 ma organizację bajtową. Maksymalna pojemność pamięci operacyjnej to 64 GB. Przestrzeń adresowa jest więc równa 234.

Rejestr znaczników EFLAGS jest 32-bitowy. Również licznik rozkazów jest 32-bitowy. Może więc bezpośrednio zaadresować 4GB pamięci.

Pentium IV zawiera koprocesor numeryczny, czyli inaczej jednostkę FPU (od ang. floating point unit). Do dyspozycji programisty pozostaje w koprocesorze 8 rejestrów 80-bitowych zorganizowanych w stos sprzętowy. Koprocesor może operować danymi stałoprzecinkowymi, zmiennoprzecinkowymi i specjalnym formatem zapisu BCD. Lista instrukcji koprocesora zawiera oprócz standardowych instrukcji arytmetycznych również instrukcje obliczania funkcji trygonometrycznych

Rys. 2. Architektura IA-32

 

10. Mikroprocesor 8051

Mikroprocesor Intel 8051 to typowy, bardzo popularny mikrokontroler 8 bitowy, którego odpowiedniki produkowane są przez wiele firm (np. Phillips, Samsung, Atmel). Mikrokontrolery nazywamy też mikroprocesorami jednoukładowymi lub mikrokomputerami jednoukładowymi. Różnica pomiędzy typowym mikroprocesorem takim jak np. Intel 8086 a mikrokontrolerem polega na tym, że mikrokontroler jest kompletnym, niezależnym systemem komputerowym. Ma „wszystko co trzeba” w środku. W praktyce spotyka się mikrokontrolery 4-bitowe, 8-bitowe i 16-bitowe.

Rys. 1. Funkcjonalny schemat blokowy mikrokontrolera 8051

Ośmiobitowa jednostka centralna mikrokontrolera 8051 może wykonywać 111 rozkazów (49 jednobajtowych, 45 dwubajtowych i 17 trzybajtowych).

Pamięć wewnętrzna układu 8051 składa się z 2 pamięci:

  • pamięci wewnętrznej programu (pamięci ROM)
  • pamięci wewnętrznej danych o pojemności 128 bajtów.

Rys. 2. Architektura mikrokontrolera Intel 8051

Wewnętrzna pamięć programu (pamięć typu ROM) ma pojemność 4 kB i organizację bajtową. Może być rozszerzona do 64 kB przez dołączenie pamięci zewnętrznej.

Wewnętrzna pamięć danych (typu RAM) ma pojemność 128 B i organizację bajtową, ale możliwe jest dołączenie zewnętrznej pamięci danych o pojemności do 64 kB (w ramach osobnej przestrzeni adresowej.

Pamięć wewnętrzna danych 8051 zorganizowana jest ten sposób, że adresy 0-127 stanowią pamięć użytkową, a adresy 128-255 (89H-0FFH) to tzw. rejestry specjalne, czyli rejestry SFR (ang. special function registers)

Rys. 3. Organizacja wewnętrznej pamięci danych w mikrokontrolerze 8051

W pamięci użytkowej słowa o adresach 0-7, 8-15, 16-23, 24-31 stanowią 4 zestawy uniwersalnych rejestrów roboczych (ang. working registers) R0, R1, R2, R3, R4, R5, R6, R7. Rejestry te są dostępne w programie jako rejestry adresowane. Mamy np. instrukcję MOV A, R1. W danym momencie dostępne są rejestry tylko jednego zestawu wskazywanego przez 2 bitowy wskaźnik zestawu rejestrów RS (ang. register bank switch) zawarty w słowie stanu programu.

Pamięć programu jest adresowana przez 16-bitowy licznik rozkazów PC (ang. program counter). Bity 11-15 licznika rozkazów wyznaczają numer strony pamięci natomiast bity 0-10 określają adres na stronie. W czasie zerowania mikrokontrolera licznik PC jest zerowany.

Słowo stanu programu (ang. program status word) - PSW - jest pamiętane w 8-bitowym rejestrze SFR po adresem 0D0H . Słowo PSW może być adresowane bitowo.

W wewnętrznej pamięci danych (w obszarze pamięci użytkowej) może być umieszczony stos (ang. stack) o dowolnej wielkości ograniczonej pojemnością pamięci. Stos jest adresowany przez 8 bitowy wskaźnik stosu SP (ang. stack pointer). SP ma adres 81H w przestrzeni SFR. SP wskazuje wierzchołek stosu (ang. top of the stack) . Zawartosć rejestru SP jest przed każdym zapisaniem bajtu na stos zwiększana o 1, a po każdym odczytaniu ze stosu bajtu zmniejszana o 1. Ze stosu korzystamy zawsze automatycznie w czasie wykonania instrukcji CALL (skok do podprogramu). Na stos zapisujemy wówczas 2 bajtową zawartość licznika rozkazów.

Również automatycznie zapisujemy na stos zawartość licznika rozkazów PC (2 bajty) przy przyjęciu przerwania

Ze stosem współpracują również w sposób standardowy 2 instrukcje PUSH i POP. Za pomocą instrukcji PUSH (z adresowaniem bezpośrednim) można zapisać na stosie zawartość dowolnej wewnętrznej komórki pamięci danych (również rejestrów specjalnych). Do zdejmowania danych ze stosu używamy instrukcji POP.

11. Transmisja informacji wewnątrz systemu komputerowego

Transmisja informacji wewnątrz systemu komputerowego

11.1. Przesyłanie z potwierdzeniem

Założenie: Przesyłamy słowa binarne (dane lub - jak czasem mówimy – informacje) równolegle między dwoma niezależnymi urządzeniami, które umownie będziemy w dalszym ciągu nazywać nadajnikiem (informacji) (ang. transceiver) i odbiornikiem (informacji) (ang. receiver).

Najprostszy sposób przesyłania danych (słów binarnych) polega na tym, że wystawiamy dane (czyli przesyłane słowo binarne) na szynę danych nie sprawdzając, ani czy zostały one odebrane, ani nie informując, że nowe słowo zostało wystawione na szynę danych. Nie mamy więc żadnych sygnałów wspomagających przesłanie, czyli żadnych sygnałów sterujących. Taka sytuacja jest możliwa, jeśli współpracujące ze sobą urządzenia (tzn. nadajnik i odbiornik) są ze sobą precyzyjnie zsynchronizowane.

Rys.1. Przesyłanie z potwierdzeniem

Przesyłanie z potwierdzeniem (ang. handshaking, handshake) jest to sposób równoległego przesłania słów binarnych (danych) z nadajnika do odbiornika, gdy nie zakładamy precyzyjnej ich synchronizacji ani dopasowania szybkości nadajnika i odbiornika.

Cel: Przesyłanie z potwierdzeniem stosuje się po to, by dać możliwość synchronizacji przepływu danych w sytuacji, gdy urządzenia współpracujące nie są zsynchronizowane lub mają różną szybkość.

Sposób transmisji pokazany jest na rys. 1. W chwili tnadajnik wystawia dane na szynę danych. W chwili t2 nadajnik informuje odbiornik, że dane są gotowe sygnałem \overline{\text{READY}} = 0. Odbiornik potwierdza fakt, że przyjmuje dane sygnałem \overline{\text{ACK}} = 0 w chwili t3. W chwili t4 odbiornik kończy czytanie danych i ustawia sygnał \overline{\text{ACK}} = 1, co stanowi sygnał dla nadajnika, że dane zostały odebrane. W chwili t5 odbiornik ustawia sygnał \overline{\text{READY}} = 1 i w chwili twycofuje dane z linii danych. Reasumując: nadajnik zawsze czeka na potwierdzenie, że dane zostały odebrane.

11.2. Magistrale

Magistrala to synonim szyny (ang. bus). Jest to standardowa droga komunikacyjna najczęściej związana z pewnymi regułami przesyłania po niej informacji (danych, adresów, sygnałów sterujących).

Mówimy szyna danych jeśli przesyłamy szyną dane, szyna adresowa jeśli adresy, szyna sterująca jeśli sygnały sterujące. Połączenie tych 3 szyn nazywamy najczęściej szyną systemową.

W systemie komputerowym używa się znacznie więcej typów magistral służących do różnych celów. Mamy np. magistralę FSB (ang. Front Side Bus), ISA, PCI, SCSI, AGP itd. Magistrala jest często również rozumiana jako interfejs łączący system komputerowy ze światem zewnętrznym, światem urządzeń peryferyjnych.

Zasadniczym parametrem magistrali jest jej przepustowość.

Magistrale PCI (ang. Peripheral Component Interconnect) występują w 2 odmianach jako magistrale PCI 32-bitowe i magistrale PCI 64-bitowe. Zgodnie ze specyfikacją 2.1 standardu PCI w jednym systemie komputerowym możemy mieć aż 256 różnych magistral PCI, z których każda umożliwia obsługę do 32 urządzeń. Same urządzenia mogą być wielozadaniowe i mogą pełnić do 8 funkcji. We współczesnych komputerach klasy PC najczęściej wykorzystujemy tylko jedną magistralę PCI.

32-bitowa magistrala PCI dopuszcza taktowanie z częstotliwością do 66MHz, co daje przepustowość 132 MB/s.

12. Przesyłanie informacji przez kanał komunikacyjny

Przesyłanie informacji przez kanał komunikacyjny

12.1. Twierdzenie Shannona

Przy przetwarzaniu sygnału w dowolnym układzie (zarówno liniowym jak i nieliniowym) lub przy przesyłaniu sygnału przez dowolne medium transmisyjne następuje sumowanie się sygnału z niepożądanymi szumami. Często stosowaną miarą odstępu sygnału od szumu jest stosunek mocy sygnału Ps do mocy szumu Pnazywany krócej stosunkiem sygnał szum lub współczynnikiem SNR (ang. Signal to Noise Ratio). Tak więc

SNR = \frac{P_s}{P_n}

Często współczynnik SNR obliczamy dla ustalonego pasma częstotliwości.

Pojemność informacyjna kanału definiowana jest jako maksymalna szybkość (mierzona w bitach na sekundę b/s), przy której informacja może być przesyłana bezbłędnie przez kanał.

(twierdzenie Shannona o pojemności informacyjnej kanału)
Niech B oznacza szerokość pasma kanału (czasem mówimy: szerokość pasma przenoszenia kanału), C pojemność informacyjną kanału mierzoną w [b/s], a SNR stosunek sygnału do szumu w kanale wówczas
\qquad C = B \cdot log_2(1 + SNR)

Ze wzoru (*) wynika, że im większy współczynnik SNR, tym pojemność informacyjna kanału jest większa. Szum z kanału nie da się jednak wyeliminować, choć można tak dobierać rodzaj modulacji (stosunek SNR zależy od typu wybranej modulacji), by współczynnik SNR był jak najkorzystniejszy, czyli jak największy.

Pojemność informacyjna kanału zależy również od szerokości pasma kanału. Z kolei szerokość pasma kanału zależy od wybranego medium transmisyjnego. Każde typowe medium transmisyjne: światłowód, skrętka, kabel koncentryczny, kabel telefoniczny czy wolna przestrzeń w przypadku łączności bezprzewodowej mają swoje charakterystyczne szerokości pasma kanału.

Warto w tym miejscu wspomnieć, że elektronika dysponuje całą gamą różnych metod modulacji czyli metod nanoszenia informacji na tzw. nośną . Stosujemy np. modulację amplitudy AM (ang. Amplitude Modulation), modulację częstotliwości FM (ang. Frequency Modulation), kwadraturową modulację amplitudy QAM (ang. Quadrature Amplitude Modulation), modulację z kluczowaniem częstotliwości FSK (ang. Frequency Shift Keying), modulację CPFSK (ang. Continuous Phase Frequency Shift Keying), modulację z kluczowaniem fazy PSK (ang. Phase Shift Keying) itd.. Na ogół modulacja umożliwiająca uzyskanie lepszego stosunku SNR jest bardziej złożona z technicznego punktu widzenia.

Rys. 1. Typowy kanał komunikacyjny a) bez modulacji b) z modulacją

13. Typowe interfejsy systemu komputerowego

Typowe interfejsy systemu komputerowego

13.1. Interfejs szeregowy RS 232C

Ogólnie rzecz biorąc układy wejścia /wyjścia mogą być równoległe albo szeregowe. Różnicę między nimi ilustruje rys. 1.

Rys.1. a) szeregowy układ we/wy b) równoległy układ we/wy

Standard RS 232 interfejsu szeregowego (RS od ang. Recommended Standard) został wprowadzony w roku 1962 prze EIA (ang. Electronic Industies Association). Z założenia był to standard normalizujący interfejs pomiędzy normalizujący interfejs pomiędzy

  • tzw. urządzeniem końcowym dla danych – DTE (ang. Data Terminal Equipment). W praktyce jest to nasz komputer.
  • urządzeniem komunikacyjnym dla danych – DCE (ang. Data Communication Equipment). W zamyśle twórców standardu miał być to modem.

W 1969 roku została wprowadzona nieco zmodyfikowana norma RS-232 o nazwie RS-232C i w takiej zmodyfikowanej wersji jest często wykorzystywana we współczesnych systemach komputerowych. Obecnie RS-232C jest standardem szeregowej transmisji danych stosowanym również pomiędzy różnymi typami urządzeń DTE np. pomiędzy dwoma komputerami, komputerem a myszką, komputerem a drukarką itd.

W interfejsie szeregowym RS 232 C transmisja danych odbywa się szeregowo bit po bicie, przy czym definiuje się 2 rodzaje transmisji

  • transmisję asynchroniczną znakową
  • transmisję synchroniczną

Asynchroniczna transmisja znakowa polega na przesyłaniu pojedynczych znaków, które mają ściśle określony format. Początek znaku stanowi bit startu służący jedynie celom synchronizacji. Dalej mamy pole danych, w którym umieszczamy bity przesyłanego znaku począwszy od najmniej znaczącego bitu, czyli bitu LSB.

Bezpośrednio za polem danych przewidziano opcjonalny bit kontrolny (np. bit parzystości) służący zabezpieczeniu przed błędami transmisji. Transmitowany znak kończy 1 lub 2 bity stopu.

W ten sposób tworzymy ramkę, której format pokazany jest na rys. 2.

Wewnątrz ramki bity przesyłane są synchronicznie tzn. zgodnie z zegarem nadajnika. Poszczególne ramki są natomiast przesyłane asynchronicznie. Odstęp pomiędzy ramkami jest dowolny.

Bity danych wysyłanych pojawiają się na końcówce oznaczonej symbolem TxD (T od ang. transceiver czyli nadajnik, D od ang. data czyli dane). Końcówka odbierająca dane oznaczona jest symbolem RxD (R od ang. receiver czyli odbiornik, D od data). Końcówka TxD musi być połączona z końcówką RxD. Końcówki interfejsu wyprowadzane są na złącze 25 stykowe lub 9 stykowe. W złączu 9 stykowym organizacja wyprowadzeń jest następująca

Nr styku Oznaczenie i funkcja
3 TxD \qquad(dane nadawane)
2 RxD\qquad (dane odbierane)
7 RTS \qquad(żądanie nadawania)
8 CTS \qquad(gotowość do nadawania)
6 DSR \qquad( gotowość DCE)
5 SG\qquad (masa sygnałowa)
1 DCD, RLSD (poziom sygnału odbieranego)
4 DTR \qquad(gotowość DTE)
9 RI \qquad(wskaźnik wywołania)

Interfejs RS-232 służy do transmisji danych na niewielkie odległości (do 15 m) z niewielkimi szybkościami do 20 kb/s. Do pracy na większe odległości przeznaczone są interfejsy RS-423A, RS-422A i RS-485.

Rys. 2. Format ramki w asynchronicznym trybie pracy interfejsu RS-232C

Szybkość transmisji danych, body i b/s. Wyjaśnimy jeszcze czym różnią się b/s od bodów. Ponieważ nie wszystkie bity są bitami informacyjnymi (część z nich ma charakter organizacyjny i synchronizujący przepływ danych) efektywna szybkość transmisji informacji jest mniejsza od „bitowej szybkości transmisji” rozumianej jako odwrotność czasu trwania jednego bitu por. rys. xx. Dwuznaczności unikamy podając efektywną szybkość transmisji w b/s a „bitową szybkość transmisji” w bodach. Dokładniej definiujemy bod jako liczbę zmian stanów znamiennych (modulacji) w ciągu jednej sekundy. Bod jest więc jednostką szybkości modulacji. 

Występujące przy znakowej transmisji asynchronicznej bity startu, stopu oraz przerwy między ramkami powodują ograniczenie efektywnej szybkości transmisji. Można zrezygnować z transmisji asynchronicznej stosując tzw. transmisję synchroniczną, której istotą jest przesyłanie bitów danych w znacznie większych blokach niż w przypadku transmisji asynchronicznej. Powstaje wówczas oczywiście problem jak w takiej sytuacji utrzymać synchronizację, właściwie rozpoznawać bity i łączyć bajty w ciągi bitów – bloki, a po dokonaniu transmisji rozbić długi blok na bajty.

Poszczególne bity przesyłanego bloku w trybie synchronicznym są wyprowadzane ze stacji początkowej zgodnie z taktem nadawania nazywanym również „podstawą czasu przy nadawaniu” (TT – ang. transmit timing), którego wielkość musi być dobrana do właściwości toru transmisyjnego.

Szybkość transmisji synchronicznej w standardzie RS-232C wynosi do 20 k bodów, przy czym powszechnie stosowane są wartości 1200 bodów, 2400, 4800, 9600 i 19200 bodów.

Standard RS-485 wprowadzono w 1983 roku jako rozwinięcie standardu RS-422A. W standardzie RS-485 dopuszcza się wiele nadajników i wiele odbiorników dołączonych do jednej linii. Dokładniej do linii możemy dołączyć maksymalnie 32 nadajniki i 32 odbiorniki. Nadajniki muszą być trójstanowe ponieważ jednocześnie może nadawać tylko jeden z nich, a pozostałe muszą być w stanie wysokiej impedancji. Maksymalna długość kabla to 1200 m, a maksymalna szybkość transmisji to 10 Mb/s.

13.2. Magistrala USB

Magistrala szeregowa USB (ang. Universal Serial Bus) jest bardzo popularnym standardem portu szeregowego. Jest to projekt wiodących firm komputerowych IBM, Intel, Microsoft, DEC i NEC. W pierwotnym zamyśle magistrala USB miała być uniwersalną tanią magistralą do podłączania do komputera różnorodnych (o różnej szybkości) urządzeń peryferyjnych np. myszki, klawiatury, skanera, drukarki, kamery CCD, cyfrowego aparatu fotograficznego itd. W typowym komputerze klasy PC stosuje się obecnie 6-8 portów USB.

W podstawowym starszym standardzie USB 1.1 zostały zaimplementowane 2 kanały LS (ang. Low Speed) o paśmie 1,5 Mb/s oraz FS (ang. Full Speed) o paśmie 12 Mb/s. Nowa wersja standardu USB 2.0 umożliwia transfer danych z szybkością do 480 Mb/s.

Magistrala USB podobna jest do magistrali IEEE – 1394/Fire Wire, która ma zbliżone parametry.
Kabel USB składa się z 4 przewodów. Dwóch sygnałowych (stanowiących skrętkę) oznaczanych symbolami D+ i D- oraz dwóch przewodów zasilania +5V oraz masy.

Nr styku  
1 +5V
2 D+ (Data +)
3 D- (Data -)
4 GND

Długość przewodu łączącego urządzenia peryferyjne z rozdzielaczem (hubem USB) nie może przekraczać 5 metrów.

Protokół USB nie dopuszcza możliwości kolizji. Do magistrali USB może być podłączonych wiele urządzeń, a dane są przesyłane w obu kierunkach, ale zawsze na żądanie kontrolera, który zwraca się do konkretnego urządzenia z pytaniem czy nie potrzebuje obsługi. Protokół USB przewiduje 4 typy transmisji (ang. data flow types) różniące się

  • wymaganiami stawianymi szerokości pasma
  • dopuszczalnymi czasami opóźnień
  • rozmiarami pakietów
  • rodzajem korekcji błędów

Podstawowym trybem transmisji jest tryb asynchroniczny i przeznaczony jest dla danych o charakterze masowym (ang. bulk transfer)

Dane przesyłane są przez magistralę USB wewnątrz tzw. pakietów czyli ciągów bitów o ściśle zdefiniowanej strukturze. Początek pakietu oznaczony jest sygnaturą SOP (ang. Start of Packet), a koniec sygnaturą (ang. End of Packet). Każdy pakiet należy do jednego z 4 możliwych typów: Token, Data, Handshake i Special. Magistrala USB przesyła zawsze najpierw młodsze bity, a potem starsze bity. Podobna reguła jest stosowana dla ciągów wielobajtowych. Najpierw przesyłane są bajty mniej znaczące.

Struktura magistrali jest drzewem z tzw. hostem – root hub’em w korzeniu por. rys. 3. Liczba urządzeń wliczając w to huby nie może być większa od 128. Liczba poziomów nie może być większa od 7.

Rys. 3. Przykład struktury magistrali USB; Node oznacza urządzenie peryferyjne; Hub jest tzw. koncentratorem USB lub rozdzielaczem

13.3. Inne popularne interfejsy

Interfejsem praktycznie obecnym w każdym komputerze jest interfejs równoległy. Interfejs równoległy zawiera 8 bitową magistralę danych i cały szereg sygnałów sterujących (m.in. STR, ALF, INI, DSL). Specyfikacja portu równoległego została ujęta w standardzie IEEE 1284 wydanym w roku 1994 i jest modyfikacją starej specyfikacji o nazwie Centronix.

Dla portu równoległego zdefiniowanych jest 5 trybów pracy

  • tryb kompatybilny (Compatibility Mode) . Transmisja jest jednokierunkowa a prędkość do 200 kB/s
  • tryb półbajtowy (Nibble Mode) umożliwia wysyłania i odbiór. Pasmo 100 kB/s
  • tryb bajtowy. To tryb dwukierunkowy, szybkość do 200 kB/s
  • tryb EPP (Enhanced Parallel Port). Tryb dwukierunkowy. Maksymalna szybkość to 2,3 MB/s
  • tryb ECP (Extended Capabilities Port) Tryb dwukierunkowy o parametrach podobnych do EPP.

Z reguły podłączamy do portu równoległego drukarkę, skaner czy klucz sprzętowy. Oznaczenie stosowane dla portu równoległego w systemie operacyjnym to LPT.

Innym bardzo popularnym interfejsem a ściśle rzecz biorąc magistralą (magistralą szeregową) jest magistrala IEEE 1394 inaczej Fire Wire lub i.Link. Transfer danych odbywa się w trybie asynchronicznym. Zdefiniowane zostały 3 tryby prędkości Fire Wire

  • 98,304 Mb/s (inaczej tzw. pasmo S100)
  • 196,608 Mb/s (inaczej tzw. pasmo S200)
  • 393,216 Mb/s (inaczej tzw. pasmo S400)

14. Sieci komputerowe

Sieci komputerowe

14.1. Sieci komputerowe

Sieci komputerowe definiowane są na ogół jako zbiory autonomicznych komputerów (oraz innych urządzeń końcowych) połączonych wzajemnie siecią komunikacyjną tworzoną przez specjalizowane komputery i kanały komunikacyjne.

Klasyfikacja sieci komputerowych: Z punktu widzenia zasięgu, obszaru jaki obejmuje sieć komputerowa sieci komputerowe dzielimy na 3 rodzaje:

  • sieci LAN (ang. Local Area Network) czyli tzw. sieci lokalne
  • sieci WAN (ang. Wide Area Network) czyli tzw. sieci rozległe
  • sieci MAN (ang. Metropolitan Area Network) czyli tzw. sieci miejskie

Typowe topologie sieci LAN to:

  • topologia gwiazdy (ang. star topology)
  • topologia pierścieniowa (ang. ring toplogy)
  • topologia szynowa (ang. bus topology)

 

Rys. 1. Topologia gwiazdy: każdy komputer podłączony jest do punktu centralnego tzw. koncentratora

Rys. 2. Topologia pierścieniowa: komputery są połączone w zamkniętą pętlę

 

Rys. 3. Topologia szynowa: wszystkie komputery są podłączone do jednego kabla

ISO to międzynarodowa organizacja standaryzacyjna (ang. International Organization for Standardization). Siedmiowarstwowy model OSI, oznaczany też skrótem OSI RM (ang. Open System Interconnection Reference Model) to metodologia opisu wzajemnych zależności istniejących pomiędzy sprzętem i oprogramowaniem sieciowym, a jednocześnie zbiór funkcji, zasad i operacji podstawowych wymaganych przy współpracy sieciowej komputerów.

Aplikacje użytkownika
Warstwa 7: aplikacyjna
Warstwa 6: prezentacyjna
Warstwa 5: sesyjna
Warstwa 4: transportowa
Warstwa 3: sieciowa
Warstwa 2: łącza danych
Warstwa 1: fizyczna
Medium transmisyjne


Rys. 4. Siedmiowarstwowy model OSI

Warstwa fizyczna zapewnia przekaz skończonego ciągu bitów (sygnałów elementarnych) pomiędzy dwiema stacjami (lub większą liczbą stacji) podłączonymi do medium komunikacyjnego.

Warstwa łącza danych ma za zadanie zapewnienie niezawodnego przekazu ramek danych przez kanał komunikacyjny (dokładniej kanał cyfrowy) wnoszący szumy i zakłócenia.

Do funkcji tej warstwy należy:

  • tworzenie ramek danych z uwzględnieniem pól korekcyjno-kontrolnych
  • wykrywanie błędów transmisji i ich ewentualna korekcja
  • sterowanie dostępem do medium komunikacyjnego

Główną funkcją warstwy sieciowej jest wybór trasy między stacją źródłową a docelową, do której ma trafić pakiet. Warstwa sieciowa odpowiada za „przezroczystość przekazu” rozumianą jako brak ingerencji sieci pośrednich w zawartość pakietu.

Głównym zadaniem warstwy transportowej w modelu ISO-OSI jest zagwarantowanie niezawodnej wymiany informacji między dwoma użytkownikami końcowymi

Warstwa sesji zapewnia środki do nawiązywania oraz rozwiązywania połączenia (sesji) oraz zarządzania połączeniem.

Warstwa prezentacji zapewnia przekształcanie danych użytkownika do postaci standardowej stosowanej w sieci.

Warstwa aplikacji (warstwa zastosowań) zapewnia obsługę użytkownika w dostępie do usług oferowanych przez środowisko OSI. W szczególności oprogramowanie tej warstwy pozwala na transmisję plików oraz działania na zdalnych plikach.

Adres MAC to adres sprzętowy (jak mówimy czasem adres fizyczny) o długości 48 bitów wykorzystywany w sieci Ethernet do identyfikacji karty sieciowej . Każda karta sieciowa na świecie ma swój własny niepowtarzalny numer.

Protokół MAC (ang. Medium Access Control) zawiera zestaw mechanizmów sterujących dostępem np. do medium sieci Ethernet. Protokół MAC działa w warstwie łącza danych sieci LAN. Protokół MAC służy do zarządzania dostępem poszczególnych stacji - jak też mówimy hostów - lub po prostu kart sieciowych do wspólnego kanału komunikacyjnego sieci. Ogólnie rzecz biorąc istnieją 4 sposoby, mechanizmy dostępu do medium transmisyjnego:

  • rywalizacji (domeny kolizji)
  • przesyłania tokenu
  • priorytetów żądań
  • przełączania

Ramka to podstawowa jednostka transmisji danych na poziomie łącza danych sieci LAN. Ramka to zestrukturalizowany ciąg bitów, w którym przesyłamy dane. Ramkę można porównać do pociągu z kontenerami (kontenery to dane).

Najpopularniejszym medium transmisyjnym jest kabel miedziany UTP kategorii 5 (UTP od ang. Unshielded Twisted Pair), który składa się z 4 par przewodów. Jest to tzw. skrętka. Innym bardzo popularnym medium jest kabel światłowodowy (ang. optic fiber). Coraz częściej stosowanym medium są fale elektromagnetyczne (radiowe) rozchodzące się w wolnej przestrzeni. Warto jednak zwrócić uwagę, że w każdym z wymienionych przypadków informację przenosi fala elektromagnetyczna.

W typowej skrętce mamy 8 przewodów (kabel ośmiożyłowy), a dokładniej 4 skręcone pary (ang. twisted pair) przewodów. W złączu RJ-45 mamy osiem styków, do których łączymy przewody skrętki. Do przesyłania danych wykorzystujemy jednak tylko 4 przewody. Jedną parę do nadawania danych i jedną parę do odbioru danych.

Port koncentratora   Karta sieciowa
Styk dodatni odbiorczy (RD+) \longleftarrow Styk dodatni nadawczy (TD+)
Styk ujemny odbiorczy (RD-) \longleftarrow Styk ujemny nadawczy (TD-)
Styk dodatni nadawczy (TD+) \longrightarrow Styk dodatni odbiorczy (RD+)
Styk ujemny nadawczy (TD-) \longrightarrow Styk ujemny odbiorczy (RD-)

Rys. 5. Połączenie koncentratora i karty sieciowej

Nr styku Sygnał
1 TD+ (dane nadawane)
2 TD- (dane nadawane)
3 TD- (dane nadawane)
4 Nie używany
5 Nie używany
6 RD- (dane odbierane)
7 Nie używany
8 Nie używany

Rys. 6. Sygnały 10Base-T i 100Base-TX na 8 stykowym złączu RJ-45

System Ethernet to najpopularniejsza technologia sieci lokalnych. Istnieje cały szereg odmian technologii Ethernet. Wszystkie one zostały zdefiniowane w specyfikacji standardów IEEE (por np. IEEE 802.3). Najczęściej stosowane są technologie 10Mbps Ethernet, 100Mbpd Fast Ethernet i 1000 Mps Gigabit Ethernet. (najszybsza obecnie odmiana sieci Ethernet). Trwają prace nad standardem o szybkości transmisji rzędu 10 Gb /s.

Sieci Ethernet oparte są na metodzie rywalizacji w dostępie do medium transmisyjnego, dokładniej zastsosowana metoda nosi nazwę CSMA/CD (ang. Carrier Sense Multiple Access with Collision Detection). Kolizja, czyli rywalizacja w dostępie do medium transmisyjnego, występuje tylko w tzw. domenie kolizji (ang. collision domain).

Numer IP, adres IP lub adres internetowy to synonimy. Numer IP to 32-bitowa liczba przypisana węzłowi sieci i niezbędna do komunikowania się z nim.

Systemy bezprzewodowych sieci LAN nazywa się również sieciami WLAN (od ang. Wireless LAN) lub radiowymi sieciami LAN. Najpopularniejszy standardem sieci WLAN jest Bluetooth - bezprzewodowy, radiowy system przesyłania danych i tworzenia sieci LAN wraz z całą gamą środków zabezpieczających transmisję i integralność sieci. Urządzenia współpracujące w sieci mogą być oddalone od siebie na odległość do 10m.

Konkurencyjnym systemem bezprzewodowym jest tzw. system Wi Fi .

Opis standardów dla sieci bezprzewodowych można znaleźć w specyfikacji IEEE 802.11 (specyfikacja IEEE 802.11 a) opisuje pasmo 5,2 GHz a IEEE 802.11 b) pasmo 2,4 GHz).

14.2. Magistrala CAN

Ciągle przybywa w samochodach nowych układów elektronicznych, czujników i układów wykonawczych, które muszą się ze sobą komunikować. Magistrala CAN, CAN-bus (ang. Controller Area Network) to specjalny standard magistrali (zaproponowany przez firmę Bosch) do wymiany danych w samochodach. CAN służy do:

  • Przesyłania poleceń do rozmaitego typu samochodowych urządzeń wykonawczych i czujników pomiarowych. Chociaż przełącznik świateł steruje np. kilkoma różnymi funkcjami, dochodzą do niego tylko trzy przewody: 2 przewody zasilania (plus, masa) oraz 1 przewód sygnału danych. Takim samym kablem połączone są wszystkie urządzenia wykonawcze i czujniki.
  • Przesyłania informacji o stanie urządzeń wykonawczych i czujników pomiarowych
  • Diagnostyki pojazdu (dane diagnostyczne przesyłane są do testera szyną CAN poprzez specjalne gniazdo o nazwie CARB).

Nazwa CAN-bus obejmuje zarówno samą magistralę, jak i protokół określający sposób przesyłania danych. CAN działa na zasadzie rozsiewczej (ang. broadcasting), co oznacza, że informacje są wysyłane przez jedno urządzenie, a pozostałe mogą je odbierać. Ponieważ wszystkie przesyłane pakiety danych zawierają nagłówek z identyfikatorem adresata, każdy z odbiorników wie, czy są one przeznaczone dla niego.

Magistrala CAN jest tak skonstruowana, że w jednej chwili nadawać może tylko jedno urządzenie. Jeśli zdarzy się kolizja, tzn. sytuacja w której wiele nadajników chce wysyłać dane, wszystkie milkną i jako pierwsze rozpoczynają transmisję te urządzenia, które mają najwyższy priorytet.

Magistrala CAN jest więc rodzajem sieci lokalnej czyli LAN. Tak jak sieć lokalną LAN wygodnie jest podzielić w celu zwiększenia jej przepustowości na segmenty łącząc je mostem tak również w pojazdach stosuje się czasem kilka magistral CAN.

Magistrala CAN znakomicie upraszcza okablowanie samochodu i stosowana jest we wszystkich nowoczesnych samochodach. Stosują ją jako standard m.in. firmy Volvo i Mercedes. W poprzedniku Mercedesa klasy S było 3,2 km kabli ważących 56 kg, dziś dzięki zastosowaniu magistrali CAN znajduje się tam tylko 2,2 km przewodów o masie 39 kg.

Auta firmy Mercedes klasy S i CL wyposażone są w światłowodowy odpowiednik magistrali CAN o nazwie D2B. Magistrala D2B ma przepustowość ponad 5,6 Mb/s, czyli około 60 razy więcej niż tradycyjna magistrala CAN.