Komputery i sieci - podstawy
5. 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.
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 , 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ń.
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