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