System obsługi przerwań sprzętowych
199
Rozdział 3. System obsługi przerwań sprzętowych
Najbardziej aktywnym elementem komputera jest sam procesor (CPU). Niektóre z bloków funkcjonalnych, które składają się na jego otoczenie, wykonują operacje rozciągające się w czasie na wiele cykli zegarowych. Urządzenia te nie wymagają udziału procesora dla wykonania zleconych im zadań. Są to zwykle mniej lub bardziej niezależne kontrolery, często wyposażone we własny procesor. Na ogół wystarczy, by procesor zaprogramował rejestry sterujące tego urządzenia, wydając tym samym polecenie wykonania operacji (odebranie znaku przez łącze szeregowe, zapisanie sektora na dysku).
Zainicjowana przez CPU operacja, jakkolwiek może trwać tysiące cykli zegarowych procesora, musi się kiedyś zakończyć (choćby błędem). Musi więc istnieć sposób poinformowania procesora o tym fakcie. Istnieją tutaj zasadniczo dwie możliwości:
• procesor okresowo wysyła zapytanie do urządzenia. Częstotliwość „odpytywania" jest ustalana przez wykonywany program i sposób stanowi kompromis pomiędzy szybkością reakcji procesora na zakończenie operacji a spowolnieniemjego pracy nad zadaniem pierwszoplanowym. Kod procedury odpytywania musibyć zintegrowany z programem, co powiększa jego rozmiar. Zbyt częste odpytywanie hamuje wykonywanie bieżącego programu. Zbyt długie przedziały czasowe między kolejnymi odpytywaniami i nierównomiernie napływający strumieńdanych mogą spowodować, że część z nich zostanie utracona na skutek przepełnienia nie opróżnianego bufora wewnętrznego obsługiwanego urządzenia;
• urządzenie samo zgłasza wykonanie zadania. W najbliższym dogodnym dla siebiemomencie procesor przerywa realizację aktualnie wykonywanego programu by,zapamiętawszy stan swoich rejestrów, przejść do realizacji procedury reagującejna zgłoszenie urządzenia. Kod tej procedury na ogół nie znajduje się w cieleprogramu, lecz w pamięci stałej komputera.
200 Anatomia PC
Metoda opisana w punkcie pierwszym znana jest też pod nazwąpolling i nie znajduje praktycznego zastosowania w komputerach PC. W drugim przypadku mówimy, że wystąpiło przerwanie (ang. intermpt) sprzętowe (gdyż pochodzące od urządzenia, a nie będące instrukcją programu). Ta forma sterowania przepływem danych jest w PC szeroko wykorzystywana. Znajduje ona zastosowanie w obsłudze urządzeń intensywnie wymieniających dane z pamięcią operacyjną, a więc przede wszystkim łącz szeregowych i równoległych, kontrolerów dysków (twardych i elastycznych), kart sieciowych oraz urządzeń, które dostarczają dane w sposób nieregularny - klasycznym przykładem jest tutaj klawiatura komputera. Trudno sobie wyobrazić bardziej rozsądne podejście do obsługi klawiatury, niż reagowanie na naciśnięcie klawisza za pomocą obsługi przerwania pochodzącego od sterownika klawiatury. W praktycznych zastosowaniach komputera (szczególnie wyposażonego w myszkę) klawiatura może przecież godzinami nie wysyłać żadnego znaku.
W przypadku konieczności odczytania sektora z twardego dysku czas pozycjonowania głowic nad żądaną ścieżką i wyszukania żądanego sektora jest o dwa rzędy wielkości większy niż czas potrzebny na samo przesłanie zawartych w tym sektorze 512 bajtów. Procesor jest więc zaangażowany w tę operację tylko w jej małym ułamku czasowym.
Jak widać, kandydatów do tej formy obsługi mamy wielu. Procesor posiada jednak zwykle tylko jedno wejście INT sygnalizujące przerwanie sprzętowe. Ponadto architektura PC zakłada, że każde przerwanie ma pewien priorytet, tzn. obsługa zgłoszeń uwzględnia nie tyle moment ich nadejścia, co raczej stopień ich ważności. Już samo to założenie wymaga rozróżniania zgłoszeń poprzez przyporządkowanie każdemu z urządzeń oddzielnego kanału wejściowego.
Konieczne stało się więc zastosowanie specjalizowanego układu zajmującego się wyłącznie ich obsługą. Funkcję kontrolera przerwań w komputerze XT pełni układ 8259A, zaś w modelach AT i PS/2 - dwa takie układy. W nowszych rozwiązaniach płyt głównych komputerów AT nie znajdziemy ich jako samodzielnych układów scalonych, gdyż wchodzą one przeważnie w skład jednego z układów wysokiej skali integracji, tworzących „obudowę" procesora (ang. chipset). Ze względu jednak na konieczność zachowania zgodności architektury można się odwoływać do ich rejestrów.
Kontroler 8259A ma osiem linii wejściowych, które przyjmują sygnały zgłoszeń. Układy 8259A mogą być łączone w kaskady, powielając tym samym liczbę dostępnych wejść. Istnieje również (nie wykorzystywana w architekturze PC) możliwość sterowania zewnętrznym buforem pośredniczącym między układem a silnie obciążonymi magistralami systemowymi. Warto też wspomnieć, że w modelach IBM PC/XT i AT wejścia IRn reagują na zbocze impulsu przerwania, co stwarza niebezpieczeństwo interpretacji impulsu zakłócającego jako zgłoszenia przerwania. Inaczej zagadnienie to rozwiązano w architekturach EISA i MCA, gdzie wyzwalanie przerwań odbywa się poziomem napięcia. Możliwe jest tutaj dzielenie jednej linii zgłoszeń przez kilka urządzeń (ang. shared interrupt). System EISA rezygnuje dzięki temu z drugiego kontrolera 8259A.
201
Układ scalony 8259A
Układ scalony 8259A produkowany jest między innymi przez firmy Intel, AMD i Harris. Może pracować nie tylko w trybie zgodnym z procesorami 8088/86/286, ale również z 8080/8085. Został on zaprojektowany przed powstaniem procesora 80286. Rysunek 3.1. przedstawia schemat wyprowadzeń tego układu.
Rysunek 3.1.
Rozkład wyprowadzeń układu 8259A
CS WR RD D7 D6 D5 D4 D3 D2 D1 DO
CASO
CAS1
GND
1 ^
28
ZD vcc
2
27
Zł AO
3
26
ZD INTA
4
25
13 IR7
5
24
Zł IR6
6
23
Zł IR5
1 8259A
22
21
Zł IR4 Zł IR3
9
20
Zł IR2
10
19
Zł IR1
11
18
Zł IRO
12
17
Zł INT
13
16
Zł ŚP/EN
14
15
Zł CAS2
Wyprowadzenia układu 8259A opisano poniżej:
IRO-IR7 (Interrupt Reąuesi) — każde z tych wyprowadzeń może być
połączone z co najwyżej jednym urządzeniem, które - wymuszając wysoki poziom logiczny na przypisanym sobie wejściu — zgłasza żądanie obsługi przerwania. Wejście IRO posiada najwyższy, a IR7 najniższy priorytet;
~CS (Chip Select) — wejście umożliwiające procesorowi wprowadzenie
układu w tryb programowania;
~WR (Write) - procesor wymusza niski poziom logiczny na tym
wejściu, chcąc zapisywać dane do wewnętrznych rejestrów układu;
~RD (Read) — procesor wymusza niski poziom logiczny na tym wejściu,
chcąc odczytywać dane z wewnętrznych rejestrów układu;
D7-DO dwukierunkowa magistrala danych, służąca do komunikacji
między procesorem i kontrolerem (zapis i odczyt rejestrów wewnętrznych) oraz przekazywania procesorowi numeru przerwania;
202
Anatomia PC
CASO-CAS2 (Cascade) - lokalna magistrala adresowa, używana przy kaskadowym połączeniu układów 8259A. Umożliwia ona zaadresowanie do 8 takich układów;
-SP/EN (Slave Program/Enable Buffer) — w buforowanym trybie pracy
pełni rolę wyjścia (EN) sterującego buforem zewnętrznym. W trybie nie buforowanym jest to wejście (~SP) konfigurujące układ jako Master (~SP=1) lub Slave (~SP=0);
INT (Interrupt) - wyjście to połączone jest bezpośrednio z wejściem
INTR procesora, jeżeli układ 8259A pracuje jako Master. Układ pracujący w trybie Slave połączony jest swoim wyjściem INT z jednym z wejść IRn kontrolera Master,
-INTA ...
roman61