Przerwanie a wyjątek
W każdym komputerze, podczas normalnego wykonywania programu, mogą wystąpić zdarzenia, które mogą spowodować tymczasowe zatrzymanie procesora. Zdarzenia takie jak to nazywane są przerwaniami. Przerwy mogą być spowodowane błędami oprogramowania lub sprzętu. Przerwania sprzętowe nazywane są (po prostu) przerwaniami, podczas gdy przerwania programowe nazywane są wyjątkami. Po zgłoszeniu przerwania (oprogramowania lub sprzętu), kontrola jest przekazywana do specjalnego podprogramu o nazwie ISR (Procedura obsługi przerwań), która może obsłużyć warunki wywołane przez przerwanie.
Co to jest przerwanie?
Termin przerwanie jest zwykle zarezerwowany dla przerwań sprzętowych. Są to przerwy w sterowaniu programem spowodowane zewnętrznymi zdarzeniami sprzętowymi. Tutaj zewnętrzny oznacza zewnętrzny w stosunku do procesora. Przerwania sprzętowe zwykle pochodzą z wielu różnych źródeł, takich jak układ czasowy, urządzenia peryferyjne (klawiatura, mysz itp.), porty I/O (szeregowe, równoległe itp.), napędy dysków, zegar CMOS, karty rozszerzeń (karta dźwiękowa, wideo karta itp.). Oznacza to, że przerwania sprzętowe prawie nigdy nie występują z powodu jakiegoś zdarzenia związanego z wykonywanym programem. Na przykład zdarzenie takie jak naciśnięcie klawisza na klawiaturze przez użytkownika lub przekroczenie limitu czasu wewnętrznego licznika sprzętowego może wywołać tego rodzaju przerwanie i może poinformować procesor, że pewne urządzenie wymaga uwagi. W takiej sytuacji procesor zatrzyma to, co robił (tj. zatrzyma bieżący program), wykona usługę wymaganą przez urządzenie i wróci do normalnego programu. Gdy wystąpią przerwania sprzętowe i CPU uruchomi ISR, inne przerwania sprzętowe są wyłączone (np. w maszynach 80×86). Jeśli potrzebujesz innych przerwań sprzętowych, aby wystąpiły podczas działania ISR, musisz to zrobić jawnie, usuwając flagę przerwania (instrukcją sti). W maszynach 80×86 wyczyszczenie flagi przerwań będzie miało wpływ tylko na przerwania sprzętowe.
Co to są wyjątki?
Wyjątek to przerwanie programowe, które można zidentyfikować jako specjalną procedurę obsługi. Wyjątek można zidentyfikować jako automatycznie występującą pułapkę (Trap można zidentyfikować jako przekazanie sterowania inicjowane przez programistę). Generalnie nie ma konkretnych instrukcji związanych z wyjątkami (pułapki są generowane przy użyciu określonej instrukcji). Tak więc wyjątek występuje z powodu „wyjątkowego” warunku, który występuje podczas wykonywania programu. Na przykład dzielenie przez zero, wykonanie niedozwolonego kodu operacji lub błąd związany z pamięcią może spowodować wyjątki. Za każdym razem, gdy zgłaszany jest wyjątek, procesor tymczasowo zawiesza program, który wykonywał i uruchamia ISR. ISR będzie zawierał, co zrobić z wyjątkiem. Może rozwiązać problem lub, jeśli nie jest to możliwe, może przerwać działanie programu, drukując odpowiedni komunikat o błędzie. Chociaż konkretna instrukcja nie powoduje wyjątku, wyjątek zawsze będzie powodowany przez instrukcję. Na przykład błąd dzielenia przez zero może wystąpić tylko podczas wykonywania instrukcji dzielenia.
Jaka jest różnica między przerwaniem a wyjątkiem?
Przerwania to przerwania sprzętowe, a wyjątki to przerwania programowe. Wystąpienie przerwań sprzętowych zwykle wyłącza inne przerwania sprzętowe, ale nie dotyczy to wyjątków. Jeśli potrzebujesz zabronić przerwań sprzętowych do momentu obsłużenia wyjątku, musisz jawnie wyczyścić flagę przerwania. I zwykle flaga przerwań na komputerze wpływa na przerwania (sprzętowe) w przeciwieństwie do wyjątków. Oznacza to, że wyczyszczenie tej flagi nie zapobiegnie wyjątkom.