Jaka jest różnica między Trap i Interrupt?
Jeśli terminologia jest różna dla różnych systemów, to co oznaczają one na x86?
Jaka jest różnica między Trap i Interrupt?
Jeśli terminologia jest różna dla różnych systemów, to co oznaczają one na x86?
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.
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
Wyjątki
Klasyfikacje wyjątków
Podsumowanie: pułapki zwiększają wskaźnik instrukcji, awarie nie, i przerywają „eksplodowanie”.
Pułapka
Wina
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ć
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ń.
źródło
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:
Natomiast
źródło
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 ).
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło