Jaka jest różnica między Trap i Interrupt?


Odpowiedzi:


203

Pułapka wyjątek w trakcie obsługi. Jest to spowodowane dzieleniem przez zero lub nieprawidłowym dostępem do pamięci. Jest to również zwykły sposób wywołania procedury jądra ( wywołanie systemowe ), ponieważ działają one z wyższym priorytetem niż kod użytkownika. Obsługa jest synchroniczna (więc kod użytkownika jest zawieszony i kontynuowany później). W pewnym sensie są „aktywne” - przez większość czasu kod oczekuje, że pułapka się wydarzy i opiera się na tym fakcie.

Przerwań jest coś generowane przez sprzęt (urządzenia, takie jak dysk twardy, karta graficzna, portów I / O, itd.) Są one asynchroniczne (tj. Nie zdarzają się w przewidywalnych miejscach w kodzie użytkownika) lub „pasywne”, ponieważ program obsługi przerwań musi czekać, aż w końcu się pojawią.

Możesz również zobaczyć pułapkę jako rodzaj wewnętrznego przerwania procesora, ponieważ moduł obsługi programu obsługi pułapki wygląda jak program obsługi przerwania (rejestry i wskaźniki stosu są zapisywane, istnieje przełącznik kontekstu, wykonanie może zostać wznowione w niektórych przypadkach, gdy zostało przerwane) .


5
Ciekawe, że lxr.free-electrons.com/source/arch/x86/kernel/ ... dzielenie przez zero jest inicjalizowane jako przerwanie sprzętowe, dlaczego tak jest?
Alex Kreimer

8
Ponieważ jest to naprawdę przerwanie wysyłane przez procesor, gdy ALU napotka ten problem. Podobnie jak błąd segmentacji. Jednak nie wszystkie błędy matematyczne powodują przerwania (przepełnienie nie).
Aaron Digulla

4
To ma sens. Jednak nieco zagmatwane jest to, dlaczego we wcześniejszych jądrach Linuksa został on zainicjowany jako pułapka programowa: set_trap_gate (0, & divide_error);
Alex Kreimer

11
Co masz na myśli mówiąc „ trochę zagmatwane”? To bardzo zagmatwane :-) Problem polega na tym, że dzielenie przez zero jest przerwaniem sprzętowym (IRQ / wektor 0), ale programiści jądra mają kilka możliwości, jak sobie z tym poradzić. Tak więc z procesu użytkownika jest to pułapka, ale od strony procesora jest to przerwanie. Kto ma rację? Żaden? Obie?
Aaron Digulla

3
Oczywiście dotyczy to tylko procesorów x86. Inne procesory działają inaczej.
Aaron Digulla

110

Pułapki i przerwania są ze sobą ściśle powiązane. Pułapki są rodzajem wyjątków , a wyjątki są podobne do przerwań.

Intel x86 definiuje dwie nakładające się kategorie, zdarzenia wektorowe ( przerwania vs wyjątki ) i klasy wyjątków ( błędy vs pułapki vs przerwania ).

Wszystkie cytaty w tym poście pochodzą z wersji podręcznika Intel Software Developer Manual z kwietnia 2016 r . Jeśli chodzi o (ostateczną i złożoną) perspektywę x86, polecam przeczytanie rozdziału SDM o obsłudze przerwań i wyjątków.

Wydarzenia wektorowe

Zdarzenia wektorowe ( przerwania i wyjątki ) powodują, że procesor przechodzi do obsługi przerwań po zapisaniu dużej części stanu procesora (na tyle, że wykonanie może być kontynuowane od tego momentu później).

Wyjątki i przerwania mają identyfikator, zwany wektorem, który określa, do którego programu obsługi przerwań przechodzi procesor. Procedury obsługi przerwań są opisane w tabeli deskryptorów przerwań.

Przerwania

Przerwania występują w losowych momentach podczas wykonywania programu w odpowiedzi na sygnały ze sprzętu. Sprzęt systemowy wykorzystuje przerwania do obsługi zdarzeń zewnętrznych w stosunku do procesora, takich jak żądania obsługi urządzeń peryferyjnych. Oprogramowanie może również generować przerwania, wykonując instrukcję INT n.

Wyjątki

Wyjątki występują, gdy procesor wykryje stan błędu podczas wykonywania instrukcji, na przykład dzielenie przez zero. Procesor wykrywa różne stany błędów, w tym naruszenia ochrony, błędy stronicowania i wewnętrzne błędy komputera.

Klasyfikacje wyjątków

Wyjątki są klasyfikowane jako awarie , pułapki lub przerwania w zależności od sposobu ich zgłaszania oraz tego, czy instrukcja, która spowodowała wyjątek, może zostać ponownie uruchomiona bez utraty ciągłości programu lub zadania.

Podsumowanie: pułapki zwiększają wskaźnik instrukcji, awarie nie, i przerywają „eksplodowanie”.

Pułapka

Pułapka jest wyjątek, który jest zgłaszane natychmiast po wykonaniu instrukcji zatrzymującym. Pułapki pozwalają na kontynuację wykonywania programu lub zadania bez utraty ciągłości programu. Adres zwrotny funkcji obsługi pułapki wskazuje na instrukcję, która ma zostać wykonana po instrukcji pułapki.

Wina

Usterka jest wyjątek, które mogą być korygowane i ogólnie, że gdy skorygowany, pozwala programowi zostać uruchomiony ponownie bez utraty ciągłości. Gdy zgłaszany jest błąd, procesor przywraca stan maszyny do stanu sprzed rozpoczęcia wykonywania instrukcji powodującej błąd. Adres zwrotny (zapisana zawartość rejestrów CS i EIP) dla programu obsługi błędu wskazuje raczej na instrukcję powodującą błąd niż na instrukcję następującą po instrukcji powodującej błąd.

Przykład: błąd strony często można naprawić. Część przestrzeni adresowej aplikacji mogła zostać wymieniona na dysk z pamięci RAM. Aplikacja wywoła błąd strony, gdy spróbuje uzyskać dostęp do pamięci, która została wymieniona. Jądro może przeciągnąć tę pamięć z dysku do pamięci RAM i przekazać sterowanie z powrotem do aplikacji. Aplikacja będzie kontynuowana od miejsca, w którym została przerwana (zgodnie z błędną instrukcją, która uzyskiwała dostęp do wymienionej pamięci), ale tym razem dostęp do pamięci powinien się powieść bez błędów.

Anulować

Abort jest wyjątkiem, że nie zawsze zgłosić dokładną lokalizację instrukcji powodującej wyjątek i nie pozwala na ponowne uruchomienie programu lub zadania, który spowodował wyjątek. Przerwania służą do zgłaszania poważnych błędów, takich jak błędy sprzętowe i niespójne lub niedozwolone wartości w tabelach systemowych.

Przypadki krawędzi

Przerwania wywoływane przez oprogramowanie (wyzwalane przez instrukcję INT) zachowują się w sposób podobny do pułapki. Instrukcja kończy się, zanim procesor zapisze swój stan i przejdzie do obsługi przerwań.


6
To jest tak dobra odpowiedź. Byłem pewien, że kolejka recenzji „Spóźniona odpowiedź od nowego użytkownika” dawała mi test, aby upewnić się, że zwracam uwagę.
Noumenon

1
Dzięki! To dużo dla mnie znaczy :)
ruthafjord

To świetna odpowiedź dla x86. Pytanie początkowo było dość ogólne i nie dotyczyło x86. Zrobiłem edycję, aby spróbować zachować równowagę. Być może mógłbyś dodać kolejny akapit na początku tej odpowiedzi, aby zająć się kwestią terminologii spoza świata x86? I / lub zostaw kolejną edycję pytania, jeśli uważasz, że pogorszyłem sprawę: PI naprawdę znam tylko x86, ale mam nadzieję, że to prawda, że ​​inne systemy używają bardzo podobnej terminologii i możesz to po prostu powiedzieć :)
Peter Cordes

1
Odtłuszczonego PPC aarchitecture książkę i wygląda ich definicje są w dużej mierze pokrywają. Mają nowe nazwy dla skrajnych przypadków i traktują wyjątki jako podtyp przerwań, a nie jako część odrębnej kategorii.
ruthafjord

1
Myślę, że ta odpowiedź najlepiej to opisuje. Omawia niewyraźną linię, która może istnieć między nimi. I wspomina, że ​​błędy strony powodują, że procesor ponownie podejmuje próbę wykonania instrukcji, a pułapka przeskakuje instrukcję i przechodzi dalej.
w70x

9

Ogólnie mówiąc, terminy takie jak wyjątki, błędy, przerwania, Pułapki i Przerwania oznaczają to samo i nazywane są „Przerwaniami”.

Przechodząc do różnicy między Trap i Interrupt:

Pułapka: to zainicjowane przez programistę i oczekiwane przekazanie kontroli do specjalnej procedury obsługi. (Na przykład: instrukcja 80x86 INT jest dobrym przykładem)

Natomiast

Przerwanie (sprzęt): jest przerwaniem sterowania programem na podstawie zewnętrznego zdarzenia sprzętowego zewnętrznego procesora (na przykład: naciśnięcie klawisza na klawiaturze lub przekroczenie limitu czasu na chipie timera)


Dobre definicje. Źródło?
alexlomba87

6

Pułapka jest szczególnym rodzajem przerwania , które powszechnie określa się jako przerwanie oprogramowania . Przerwań jest bardziej ogólny termin, który obejmuje zarówno przerwań sprzętowych (przerywa z urządzeń sprzętowych) i przerywa oprogramowania (przerywa z oprogramowaniem, takich jak pułapki ).


4
To jeszcze bardziej zagmatwa sprawę, że niektórzy autorzy (Tanenbaum) odnoszą się do „pułapek sprzętowych”. Jeśli możemy mieć pułapki sprzętowe i przerwania programowe, to oczywiście definicje są dość mętne i mogą dotyczyć obu stron, zawsze wymagając słowa sprzęt lub oprogramowanie.
The111

3

Pułapka jest wywoływana przez programy podobne do kodu i wykorzystywana np. Do wywoływania procedur systemu operacyjnego (tj. Normalnie synchronicznych). Przerwanie jest wywoływane przez zdarzenia (wielokrotnie sprzęt, taki jak karta sieciowa, która otrzymała dane lub licznik czasu procesora) i - jak nazwa sugeruje - przerywa normalny przepływ sterowania, ponieważ procesor musi przełączyć się na procedurę sterownika, aby obsłużyć wydarzenie.


2

Przerwanie to generowana sprzętowo zmiana przepływu w systemie. Wezwany jest program obsługujący przerwanie, aby zająć się przyczyną przerwania; kontrola jest następnie zwracana do przerwanego kontekstu i instrukcji. Pułapka to przerwanie generowane przez oprogramowanie. Przerwanie może być używane do sygnalizowania zakończenia operacji we / wy, aby uniknąć konieczności odpytywania urządzenia. Pułapka może służyć do wywoływania procedur systemu operacyjnego lub wychwytywania błędów arytmetycznych.


2

Myślę, że pułapki są spowodowane wykonaniem bieżącej instrukcji i dlatego są nazywane zdarzeniami synchronicznymi. gdzie przerwania są powodowane przez niezależne instrukcje działające w procesorze, które są związane ze zdarzeniami zewnętrznymi, a zatem są nazywane instrukcjami asynchronicznymi.


2

Przerwania są przerwaniami sprzętowymi, podczas gdy pułapki są przerwaniami wywoływanymi przez oprogramowanie. Wystąpienia przerwań sprzętowych zwykle wyłączają inne przerwania sprzętowe, ale nie dotyczy to pułapek. Jeśli chcesz zabronić przerwań sprzętowych do czasu obsłużenia pułapki, musisz jawnie wyczyścić flagę przerwania. I zwykle flaga przerwań na komputerze wpływa na przerwania (sprzętowe) w przeciwieństwie do pułapek. Oznacza to, że wyczyszczenie tej flagi nie zapobiegnie pułapkom. W przeciwieństwie do pułapek, przerwania powinny zachować poprzedni stan procesora.


1

Pułapka to przerwanie programowe. Jeśli napiszesz program, w którym zadeklarujesz zmienną mającą wartość podzieloną przez zero, to jest to traktowane jako pułapka. Za każdym razem, gdy uruchomisz ten program, wyrzuci ten sam błąd w tym samym czasie. specjalna wersja pułapki, w której program pyta system operacyjny o wymaganą usługę. W przypadku przerwania (ogólne słowo określające przerwania sprzętowe), takiego jak błąd I / O, procesor jest przerywany w losowym czasie i oczywiście nie jest to wina naszych programistów, ale sprzęt je wywołuje.


1
Czy możesz wyjaśnić, dlaczego wywołanie systemowe jest pułapką?
Radha Gogia
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.