Przerwanie to mechanizm pozwalający mikroprocesorowi tymczasowo przerwać wykonywanie bieżącego programu w reakcji na zewnętrzne lub wewnętrzne sygnały. Przerwanie informuje procesor o zdarzeniu, które wymaga natychmiastowego obsłużenia i spowoduje przejście do specjalnego kodu obsługi.

Podstawowe pojęcia

  • Sygnał przerwania — informacja wysyłana do procesora (np. elektronika urządzenia) o potrzebie obsługi; na poziomie sprzętowym to zwykle impuls lub komunikat (zobacz sygnał).
  • Kod obsługi przerwania (ISR) — procedura wykonywana po przyjęciu przerwania, której zadaniem jest zdiagnozowanie i usunięcie przyczyny oraz przywrócenie stanu programu.
  • Wejście/wyjście przerwań — przerwania mogą pochodzić od urządzeń zewnętrznych (sprzętu) lub być generowane przez system i aplikacje (oprogramowanie).

Rodzaje przerwań

  • Sprzętowe — inicjowane przez urządzenia zewnętrzne, np. sygnał z kontrolera klawiatury lub karty sieciowej.
  • Programowe (software) — generowane przez instrukcje w kodzie (np. wywołanie systemowe) lub przez system operacyjny.
  • Synchroniczne — związane z aktualną instrukcją (np. wyjątki dzielenia przez zero).
  • Asynchroniczne — niezsynchronizowane z wykonywanym kodem, pojawiają się w dowolnym momencie (np. przerwania sprzętowe).

Typowe przyczyny i przykłady

Przerwania pojawiają się w różnych sytuacjach. Do najczęstszych należą:

  • Wejście z urządzeń użytkownika, np. naciśnięcie klawisza na klawiaturze.
  • Upłynięcie czasu z wbudowanego zegara lub timera (timer), wykorzystywane np. do wywołań okresowych.
  • Transfer danych realizowany przez kontroler DMA (koniec transferu lub błąd).
  • Inne zewnętrzne zdarzenia wymagające natychmiastowego działania procesora.
  • Sytuacje w programie wskazujące na błąd lub specyficzny stan — przerwanie może nastąpić niezależnie od miejsca w kodzie źródłowym programu.

Jak działa obsługa przerwania

  1. Procesor odbiera sygnał przerwania i sprawdza, czy przerwania są aktualnie dopuszczone.
  2. Jeśli przerwania są obsługiwane, procesor zapisuje kontekst (rejestry, licznik programu), aby móc wznowić pracę.
  3. Wykonywany jest kod obsługi przerwania (ISR), który rozwiązuje przyczynę lub przekazuje zadanie systemowi.
  4. Po zakończeniu ISR przywracany jest zapisany kontekst i następuje powrót do przerwanego programu.

Mechanizmy organizacyjne

  • Priorytety — przerwaniom można przypisywać różne ważności, aby ważniejsze zdarzenia mogły przerwać obsługę mniej istotnych.
  • Maska przerwań — możliwość blokowania (wyłączania) wybranych przerwań na czas krytycznych sekcji kodu.
  • Wejście do tablicy wektorów — wiele systemów korzysta z tablic adresów ISR, tzw. wektorów przerwań, by wskazać właściwy handler.

Zalety i ograniczenia

  • Zalety:
    • Efektywne reagowanie na zdarzenia w czasie rzeczywistym.
    • Oszczędność zasobów — brak konieczności ciągłego sprawdzania stanu urządzeń (polling).
  • Ograniczenia:
    • Opóźnienie (latency) — czas od wystąpienia zdarzenia do rozpoczęcia jego obsługi może być krytyczny w systemach czasu rzeczywistego.
    • Złożoność programowania — kontekstowe zapisy/odczyty i współbieżność mogą prowadzić do błędów, np. wyścigów.
    • Możliwość zjawiska priorytetowego blokowania (priority inversion).

Przerwania vs. polling

  • Polling polega na cyklicznym sprawdzaniu stanu urządzeń przez program — proste, ale nieefektywne przy rzadkich zdarzeniach.
  • Przerwania są bardziej responsywne i oszczędne zasobowo, ale wymagają dodatkowej warstwy obsługi i synchronizacji.

Praktyczne zastosowania

  • Sterowanie wejściami użytkownika (np. klawiatura), gdzie istnieje potrzeba natychmiastowej reakcji.
  • Zegar systemowy i okresowe zadania realizowane przez timery.
  • Obsługa transferów danych (np. DMA) oraz sygnalizacja zakończenia operacji przez urządzenia.
  • Reagowanie na zewnętrzne zdarzenia krytyczne dla aplikacji lub systemu.

Mechanizm przerwań jest fundamentem współczesnych systemów operacyjnych i układów embedded — umożliwia efektywną obsługę wielu niezależnych źródeł zdarzeń bez ciągłego zajmowania procesora i bez konieczności, aby cały program był świadomy szczegółów działania sprzętu.