Dodatek B. Zasady komunikacji z otoczeniem w typowych

Transkrypt

Dodatek B. Zasady komunikacji z otoczeniem w typowych
Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach
komputerowych
B.1.
Dostęp do urządzeń komunikacyjnych
Sterowniki urządzeń zewnętrznych widziane są przez procesor jako zestawy rejestrów o określonych
adresach na magistrali. Istnieją przy tym dwie techniki dostępu do rejestrów urządzeń zewnętrznych.
Pierwsza technika polega na korzystaniu ze specjalnych rozkazów odczytywania i zapisywania tych
rejestrów. Przykładem są tu procesory Z80 i wszystkie procesory firmy Intel. Lista rozkazów tych
procesorów zawiera specjalne rozkazy czytania i zapisywania danych pod wskazane w tych rozkazach
adresy.
Przykład:
OUT (83),A
dla procesora Z80 pozwala zapisać w rejestrze o adresie 83h zawartość akumulatora,
a rozkaz
LD (83),A
zapisuje zawartość akumulatora w komórce pamięci o adresie 83h.
Pomimo, że adresy w obu rozkazach są identyczne to adresuje się zupełnie inne miejsca w systemie
mikrokomputerowym.
Pamięć operacyjna
0000h
Obszar współpracy z urządzeniami
0000h
0100h
FFFFh
Druga technika (zwana I/O mapping) polega na zmniejszeniu przestrzeni adresowej pamięci procesora i
wykorzystaniu odzyskanych w ten sposób adresów do identyfkacji rejestrów urządzeń zewnętrznych.
Pamięć operacyjna
0000h
Obszar współpracy z urządzeniami
0100h
FFFFh
Do odczytania i zapisania tych rejestrów wykorzystuje się rozkazy zmiany zawartości pamięci.
Przykład:
dla procesora Z80 będą to rozkazy:
LD (nn),A i LD A,(nn),
a rozkazy
OUT i IN
nie będą działały.
Dostęp do rejestrów można uzyskać korzystając z bezpośredniego i pośredniego trybu adresowania np.
LD (83),A zapisuje zawartość akumulatora w rejestrze o adresie 83h. Przy korzystaniu z tej techniki
identyfikacji rejestrów należy pamiętać o sposobie wydzielenia obszaru adresów rejestrów.
Iok_B
B-1
Pierwsza technika adresowania rejestrów urządzeń zewnętrznych powoduje konieczność dołączania do
zbioru instrukcji języków programowania poleceń umożliwiających dostęp do tych rejestrów.
Przykład:
w języku C są to funkcje: out (adres,dana), char in(adres);
Druga technika nie wymaga tego typu uzupełnienia i zawartości rejestrów traktuje się jako zmienne
znakowe lub całkowite absolutne tzn. przypisane określonym adresom w pamięci.
Wśród zbioru rejestrów każdego urządzenia jeden z rejestrów jest wyróżniony i jest nazywany rejestrem
stanu. Jego zawartość opisuje stan urządzenia i zmiany jego stanu. Rejestr ten określa również tryby
pracy urządzenia.
Procesor może otrzymywać informacje o zmianie stanu urządzeń zewnętrznych na dwa sposoby:
• przeglądając rejestry stanu interesujących go urządzeń, bądź
• oczekując na informacje o zmianie stanu wybranych urządzeń przekazywaną procesorowi za
pomocą tzw. przerwania.
B.2.
Przeglądanie rejestrów (pooling)
Przeglądanie rejestrów polega na cyklicznym pzeglądaniu rejestru stanu wybranych urządzeń
wykrywaniu na podstawie zawartości tego rejestru zmian stanu urządzenia. Technika jest przydatna tylko
w przypadku niewielkiej liczby urządzeń o w miarę równomiernym czasie obsługi bądź w systemach
synchronicznych o ustalonej kolejności i czasie obsługi.
B.3.
Przerwania (interrupt)
Technika najczęściej wykorzystywana polegająca na generowaniu przez urządzenie zewnętrzne sygnału
informującego o zmienie stanu tego urządzenia. Z sygnałem tym musi być związany identyfikator
urządzenia zgłaszającego zmianę stanu tak by procesor wiedział gdzie ta miana nastąpiła. Bywa to
informacja na szynie danych procesora (8080 lub Z80 tryb 0) lub szynie adresowej (Z80 tryb2 i 8088). W
tym drugim przypadku mówimy o przerwaniach wektorowych, gdyż umieszczona na szynie adresowej
informacja pozwala przejść w sposób automatyczny do właściwej dla danego urządzenia procedury
obsługi. Adresy tych procedur zawiera tzw. tablica wektorów przerwań. Zawartość tej tablicy jest ustalana
przy inicjowaniu systemu. Czasami zapisana jest ona w ROMie.
Przykład:
Strukturę tablicy przerwań i sposób jej wykorzystania ilustruje rysunek.
Tablica wektorów przerwań
Iok_B
Programy obsługi przerwań
B-2
Obsługa przerwania wektorowego składa się z następujących elementów:
1. S zapisanie na stosie dotychczasowego licznika rozkazów,
2. S zapisanie na stosie zawartości rejestru stanu procesora,
3. P zapisanie na stosie zawartości wykorzystywanych w procedurze obługi rejestrów
procesora,
4. P identyfikacja przyczyny przerwania,
5. P reakcja na przyczynę przerwania,
6. P odczytanie ze stosu zawartości wykorzystywanych rejestrów,
7. S odczytanie ze stosu rejestru stanu procesora,
8. S powrót do dotychczas realizowanego programu.
Jak widać procedura taka w ogólności składa się z trzech części:
• zabezpieczenie kontynuacji dotychczas realizowanego zadania,
• reakcji na przyczynę przerwania,
• umożliwienie kontynuacji zadania przerwanego.
Przykład:
Sekwencja przerwań pochodzących z dysku, drukarki i modemu.
M
P
P
P
D
D
D
D
D
E
E
E
E
E
E
E
E
D
P
M
P
D
E
E - program numeryczny, D - potwierdzenie odczytania sektora
P - potwierdzenie zakończenia drukowania strony, M - wywołanie modemu
Z przerwaniami można powiązać priorytet przerwania. I tu istnieje kilka możliwości. Dwie najczęściej
stosowane to:
• łączenie generatorów przerwań w łańcuchy i
• przypisanie procesorowi dodatkowego atrybutu (cechy) określającego jego priorytet w stosunku do
urządzeń zewnętrznych (informacja o priorytecie jest zapisana w słowie stanu procesora).
Rysunek ilustruje pierwsze rozwiązanie:
CPU
U1
U2
U3
..
Un
Najwyższy priorytet ma urządzenie U1 i w czasie, gdy procesor zajęty jest obsługą tego urządzenia to
następne w łańcuchu urządzenia nie mogą generować przerwań.
Kolejny rysunek ilustruje drugie rozwiązanie:
CPU
U1p1
U2p2
U3p3
..
Unpn
Iok_B
B-3
Jeśli procesor posiada priorytet p2 to jego pracę może przerwać urządzenie p2 i p1. Przerwania urządzeń
o niższych priorytetach będą zablokowane i będą oczekiwały na obniżenie priorytetu procesora.
Każdy procesor ma ponadto możliwość chwilowego zablokowania wszelkich przerwań. Mówimy
wówczas o maskowaniu przerwań. Przy pomocy typowego przerwania można przekazać do urządzenia
zewnętrznego lub odczytać z tego urządzenia pojedyńcze bajty angażując w każdą taką operację
procesor. W przypadku przekazywania dużej ilości danych z szybkich urządzeń zewnętrznych stosuje się
technikę bezpośredniego dostępu urządzenia do pamięci
B.4.
Odmierzanie czasu
W zastosowaniach telekomunikacyjnych jednym podstawowych, obok komunikacji, mechanizmów
związanych z procesami jest kontrola czasu trwania stanu zawieszenia procesu. Najprostszym, choć nie
zawsze dostatecznie efektywnym rozwiązaniem jest utworzenie procesu zegara i zlecanie temu
procesowi zadania pomiaru czasu oddzielnie dla każdego procesu, który taką operację zlecił. Proces
zegara za pomocą typowego komunikatu poinformuje proces zlecający pomiar czasu o upłynięciu
zadanego przedziału czasu.
Ilustruje to rozwiązanie rysunek.
Sprzęt
Oprogramowanie
Proces żądający odmierzania czasu
Proces żądający odmierzania czasu
Proces zegara
Proces żądający odmierzania czasu
Rys. Pomiar czasu przez proces zegara
Sprzęt
Oprogramowanie
Proces żądający odmierzania czasu
Proces żądający odmierzania czasu
Proces żądający odmierzania czasu
Rys. Pomiar czasu przez zegary sprzętowe
Iok_B
B-4
Iok_B
B-5