Odpowiedzi:
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) .
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.
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 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 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.
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 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.
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.
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.
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ń.
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)
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 ).
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.
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.
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.
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.
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.