Czytaj więcej"/> Drukuj
Przerwanie (ang. interrupt) to sygnał powodujący zmianę przepływu sterowania, niezależnie od aktualnie wykonywanego programu. Pojawienie się przerwania powoduje wstrzymanie aktualnie wykonywanego programu i wykonanie przez procesor kodu procedury obsługi przerwania (ang. interrupt handler).

Rodzaje przerwań

Przerwania dzielą się na trzy grupy:
  1. Zewnętrzne -- sygnał przerwania pochodzi z zewnętrznego układu obsługującego przerwania sprzętowe; przerwania te służą do komunikacji z urządzeniami zewnętrznymi, np. z klawiaturą, napędami dysków itp.
  2. Wewnętrzne, nazywane wyjątkami (ang. exceptions) -- zgłaszane przez procesor dla sygnalizowania sytuacji wyjątkowych (np. dzielenie przez zero); dzielą się na trzy grupy:
    1. faults (niepowodzenie) -- sytuacje, w których aktualnie wykonywana instrukcja powoduje błąd; gdy procesor powraca do wykonywania przerwanego kodu wykonuje następną, po tej która wywołała wyjątek, instrukcję;
    2. traps (pułapki) -- sytuacja, która nie jest błędem, jej wystąpienie ma na celu wykonanie określonego kodu; wykorzystywane przede wszystkim w debuggerach; gdy procesor powraca do wykonywania przerwanego kodu tę samą instrukcję która wywołała wyjątek;
    3. aborts -- błędy, których nie można naprawić.
  3. Programowe -- z kodu programu wywoływana jest procedura obsługi przerwania; najczęściej wykorzystywane do komunikacji z systemem operacyjnym, który w procedurze obsługi przerwania (np. w DOS 21h, 2fh, Windows 2fh, Linux x86 przerwanie 80h) umieszcza kod wywołujący odpowiednie funkcje systemowe w zależności od zawartości rejestrów ustawionych przez program wywołujący, lub oprogramowaniem wbudowanym jak procedury BIOS lub firmware.
Producenci procesorów część pozycji w tablicy wektorów przerwań rezerwują dla przerwań wewnętrznych. Pozostałe numery przerwań mogą być dowolnie wykorzystane przez producentów systemów komputerowych i oprogramowania. Obsługiwanie większości przerwań (wszystkich lub wybranych numerów) można wstrzymać lub zablokować, wyjątkiem są przerwania niemaskowalne.

Tryb rzeczywisty

W trybie rzeczywistym (real) pracy procesora adres procedury obsługi przerwania jest zapisany w tablicy wektorów przerwań. Tablica wektorów przerwań przechowuje adresy poszczególnych procedur obsługi przerwań; przerwania identyfikowane są przez numer (wektor przerwania), i ich liczba -- w zależności od typu procesora -- jest różna: od kilku do kilkuset.
W przypadku procesorów serii x86 jest możliwych do 256 przerwań. Tablica wektorów przerwań znajduje się w pierwszych 1024 (256 4 Bajtowych adresów procedur obsługi przerwań) komórkach pamięci operacyjnej.

Tryb chroniony

W trybie chronionym (protected) pracy procesora x86 (od procesora i386) mamy do czynienia z tablicą deskryptorów przerwań (Interrupt Descriptior Table - IDT) łączącą każdy wektor wyjątku lub przerwania z deskryptorem bramy (deskryptory bram to deskryptory pozwalające na kontrolowany dostęp do segmentów kodu o różnych stopniach uprzywilejowana) dla procedury lub zadania (task) obsługującym dany wyjątek lub przerwanie.
Położenie IDT jest zapisane w rejestrze tablicy deskryptorów przerwań (Interrupt Descriptior Table Register - IDTR). IDT zawiera do 256 wpisów zwanych deskryptorami. Rozmiar IDT to 256*8B (8 Bajtów to rozmiar pojedynczego deskryptora); w przypadku mniejszej ilości deksryptorów (obsługiwanych przerwań) niż maksymalne 256, puste sloty (czyli w rzeczywistości nieważne deskryptory) powinny zawierać flagę dostępności segmentu (Segment Present flag - P) ustawiona na 0 (
IDT może zawierać trzy różne rodzaje deskryptorów bram:
  1. Deskryptor Bramy Zadania (Task-Gate Descriptor)
  2. Deskryptor Bramy Przerwania (Interrupt-Gate Descriptor)
  3. Deskryptor Bramy Pułapki (Trap-Gate Descriptor)
Materiał wydrukowany z portalu zgapa.pl dnia 2021-03-09 09:13:16