Obsługa przerwań to jeden z podstawowych sposobów komunikacji systemu operacyjnego z całym otoczeniem, czyli aplikacjami, sprzętem, a nawet z samym procesorem, bo przecież kiedy nastąpi błąd w wykonaniu aplikacji, procesor powiadamia system specjalnym rodzajem przerwania - wyjątkiem. Zapewnienie dobrej obsługi przerwań jest warunkiem prawidłowej komunikacji otoczeniem systemu operacyjnego. Obsługa przerwań polega na odbieraniu informacji o przerwaniu od procesora, odpowiednim na nie zareagowaniu (zignorowanie przerwania jest także pewnym rodzajem reakcji), powiadomienia procesora o zakończeniu obsługi przerwania i powrotu do dalszego działania przerwanej aplikacji, chyba że przerwanie miało na celu zakończenie aplikacji. Funkcje systemowe udostępniane przez jądro systemu zwykle są dostępne poprzez specjalne przerwanie programowe, w tym wypadku komunikacja odbywa się od aplikacji do systemu. Przerwania są także używane przy wielozadaniowości z użyciem podziału czasu. Odpowiednio zaprogramowany timer systemowy wywołuje przerwanie zegarowe co pewien kwant czasu ustalony przez system wywołując funkcję odpowiednią za nadzór działalności procesów. Ważną cechą przerwań jest możliwość wywoływania ich przez aplikacje działąjące na poziomie uprzywilejowania użytkownika, a więc przeskakiwanie z kodu działającego na poziomie uprzywilejowania uzytkownika do kodu systemowego, czyli uprzywilejowanego.
1. Przerwania sprzętowe
Wykorzystywane są do komunikacji z urządzeniami. Dobrym przykładem jest kontroler klawiatury, który wywołuje przerwanie gdy dostępne są do odczytania dane o naciśniętym klawiszu klawiatury. Często jednak nie używa się do tego celu przerwań, lecz specjalny sposób ich ominięcia czyli polling. Polega on na ciągłym sprawdzaniu statusu danego urządzenia na przykład za pośrednictwem portów w danych odstępach czasu, lub co określoną liczbę cykli zegarowych procesora.
2. Przerwanie zegarowe
Dla systemu operacyjnego jest to specjalny rodzaj przerwania sprzętowego. Przerwanie to wywoływane jest przez programowalny timer systemowy zgodny ze standardem Intel 8253-5. Dzięki jego programowalności można ustalić praktycznie dowolny interwał czasu po którym wywoływane jest przerwanie zegarowe. Przerwanie to jest ważne dla wielozadaniowych systemów opartych na podziale czasu procesora, ponieważ zwykle na jego podstawie dokonuje się przełączenia procesu i uruchamiania wielu zależnych od czasu funkcji systemowych.
3. Wyjątki
Wyjątki to wyjątkowe przerwania ;-). Informują one system operacyjny o zaistniały błędzie w wykonywaniu danego procesu. Takim błędem może być na przykład błędne odwołanie się do pamięci lub dzielenie przez zero. System operacyjny musi w tym wypadku sprawdzić czy wyjątek można naprawić i czy można dalej kontynuować pracę procesu lub czy trzeba go warunkowo zakończyć, aby nie zachwiać stabilności systemu.
4. Błąd strony (z ang. page fault)
Jest to specjalny rodzaj wyjątku, ważny dla systemów używających stronnicowania, a zwłaszcza w przypadku stronnicowania na żądanie. Procesor wywołuje to przerwanie, gdy aplikacja spróbuje odwołać się do błędnej lub nieistniejącej w pamięci strony. System operacyjny wykorzystuje błąd strony do tzw. stronnicowania na żądanie. Działa ono na zasadzie wczytywania stron aplikacji z dysku twardego przy pierwszej próbie jej użycia. Daje to pewne oszczędności (pamięci, a także czasu procesora) związane z brakiem konieczności wczytywania całej aplikacji z dysku twardego, zwłaszcza kiedy aplikacja jest bardzo rozbudowana i zajmuje kilka-kilkanaście megabajtów.
5. Przerwania programowe (funkcje systemowe)
System tworzy swoje własne przerwanie, dzięki któremu aplikacje mogą wywoływać funkcje systemowe umożliwiające np. tworzenie i usuwanie plików, czy tworzenie nowego procesu. W wypadku funkcji systemowych, parametry podawane są w rejestrach procesora, a jednym z parametrów musi być numer (identyfikator) funkcji systemowej.
W trybie chronionym, aby przerwania funkcjonowały prawidłowo (albo w ogóle funkcjonowały), należy prawidłowo wypełnić deskryptor przerwań (IDT), trochę na temat IDT znajduje się w dziale Budowa komputera -> Przerwania. Na zakończenie chciałbym dorzucić trochę assemblera. Aby wrócić z procedury obsługi przerwań do przerwanej aplikacji, należy użyć operacji
IRET