Przerwanie (IT)

W informatyce , przerwań jest tymczasowe zawieszenie wykonania programu komputerowego przez mikroprocesor w celu realizacji programu priorytetowego (zwaną obsługę przerwań).

W najściślejszym sensie termin oznacza tylko przerwania, których wykonanie jest spowodowane przyczynami zewnętrznymi w stosunku do programu  : przesunięcie zegara, sygnalizacja zakończenia transmisji danych, ustawienie głowic odczytu / zapisu  itp. Służy jednak również do wyznaczania wyjątków , czyli zatrzymań spowodowanych wyjątkowym stanem w programie (niepoprawna instrukcja, dostęp do nieistniejącego obszaru pamięci, nieprawidłowe obliczenia arytmetyczne, dobrowolne wywołanie systemu operacyjnego  itp. ). Czasami mówimy o przerwaniach asynchronicznych, aby wyznaczyć te wynikające ze zdarzenia zewnętrznego, oraz o przerwaniach synchronicznych, aby wyznaczyć wyjątki spowodowane działaniem programu. W terminologii CII-Honeywell-Bull nazywano je trasami .

Operacja

Podczas przerwania procesor zapisuje cały lub część swojego stanu wewnętrznego, zwykle na stosie systemowym , a następnie wykonuje procedurę przerwania , ogólnie postępując zgodnie z dyrektywami tabeli wskazującej dla każdego typu przerwania podprogram do wykonania.

Po zakończeniu przetwarzania przerwania procedura zwykle kończy się instrukcją powrotu przerwania, która przywraca zapisany stan i wznawia procesor od miejsca, w którym został przerwany. W niektórych przypadkach procedura przerwania modyfikuje adres powrotu, w szczególności w celu przełączenia zadań .

Podczas działania niektórych części systemu operacyjnego może zaistnieć konieczność zakazania przerwań, ponieważ albo zakłócałyby one ciasne odliczanie czasu, albo modyfikowane są struktury danych (zdaje się w ten sposób zdawać sobie sprawę z pewnego rodzaju blokady wzajemnego wykluczania w pojedynczym -procesor). Możemy również generalnie blokować (często mówimy ukryj ) przerwania. W większości systemów zablokowane przerwania są kumulowane, to znaczy są wykonywane natychmiast po zdemaskowaniu. Jednak dla każdego typu przerwania licznik oczekujących przerwań jest często redukowany do prostej flagi; jeśli nie może to być denerwujące, jeśli przerwanie sygnalizuje dane oczekujące na urządzeniu, może jednak powodować złe zliczenia, jeśli przerwanie wyzwala przyrost zegara, jeśli przerwania są blokowane na czas dłuższy niż okres zegara.

W niektórych systemach występuje przerwanie niemaskowalne, zwykle przeznaczone do zgłaszania „katastrofalnego błędu” systemu (na przykład wykrycie błędu pamięci przez kod korygujący błędy ).

Przerwom można również nadawać priorytety zgodnie z priorytetami. Przerwanie o wyższym priorytecie jest brane pod uwagę podczas przetwarzania innego przerwania, ale przerwanie o niższym priorytecie jest zawieszane.

Tak więc na maszynie takiej jak IBM 1130 maksymalne priorytety nadano odczytowi kolumny na czytniku kart (wszelkie opóźnienia w jej przetwarzaniu, które mogłyby wiązać się z utratą danych i naciśnięciem klawisza na czytniku kart. Konsola konsoli (ponieważ maszyna, zwłaszcza w wersji czasu rzeczywistego 1800 , musiała być bardzo responsywna.) Jednostki wyjściowe, które mogły czekać bez uszkodzeń, takie jak drukarka, miały niższy priorytet.

Używa

Używamy przerwań, głównie w dwóch celach:

Innym zastosowaniem, nie przewidzianym początkowo, jest wprowadzenie defraudacji: podczas przywracania kontekstu, jeśli zawartość strefy zapasowej została zmieniona od czasu połączenia (tak jest w przypadku, gdy przerwa lub pułapka powoduje w trybie nadrzędnym zmiana zawartości strefy zapasowej lub stosu), przywrócony kontekst będzie całkowicie różny od kontekstu wywołania i może zostać przekazany wrogim sekwencjom instrukcji. Systemy takie jak sprzęt mikroprocesorowy coraz częściej starają się utrudniać te zadania hakerom, ale luka ta - choć obecnie znacznie ograniczona - do pewnego stopnia nadal istnieje.

Wejścia i wyjścia

Gdy sondaże procesorem urządzenie ( dysk twardy , port komunikacyjny ,  itd. ), Są zwykle opóźnia zanim dane mogą być uzyskane lub przekazane. Najprostszym rozwiązaniem jest po prostu czekanie na dane lub koniec transmisji przez wielokrotne zapętlanie testu (aktywne oczekiwanie lub odpytywanie ). Niestety, blokuje to każdy inny działający program, który jest irytujący w systemie wielozadaniowym . Dlatego w nowoczesnych systemach operacja przerwania jest generalnie preferowana: peryferyjne sygnały z przerwaniem, że są gotowe do wysłania lub że dane zostały wysłane lub odebrane, a procedura wykonuje niezbędne przetwarzanie. W przypadku szybkich urządzeń peryferyjnych (dysk twardy, USB itp.) Proces ten jest zwykle łączony z bezpośrednim dostępem do pamięci ( DMA ): bloki danych są odczytywane lub zapisywane w pamięci przez kontroler bez interwencji procesora, co nie występuje tylko na początku i na końcu transferu.

Zastosowanie przerwań w odniesieniu do odpytywania pozwala również na oszczędność energii i mniejsze nagrzewanie: obecne mikroprocesory generalnie mają instrukcje zatrzymujące mikroprocesor podczas oczekiwania na przerwanie.

Wielozadaniowy

Przerwania są również używane do przełączania zadań w systemach wielozadaniowych. Zwykle okresowe przerwanie jest wyzwalane przez zegar (często 100 lub 1000 Hz ), a następnie uruchamiany jest  program planujący . Może przełączać zadania, modyfikując zadanie powrotu przerwania.

Uwagi

Priorytet przerw

Dość sprzecznie z intuicją, to we wczesnych systemach wolniejszym urządzeniom przypisywano najwyższe priorytety przerwań . W rzeczy samej :

Priorytety zostały nadane w kolejności malejącej : konsola sterownicza, czytnik kart, drukarka, dysk.

Interfejsy graficzne nie pozwalały już na przetwarzanie echa znaku przez procedurę o wysokim priorytecie (pozycjonowanie tego echa w wielu oknach i czcionkach o zmiennej wielkości wymaga w rzeczywistości kilkudziesięciu tysięcy operacji) i paradoksalnie czynią te interfejsy znacznie mniej reaktywnymi w sytuacjach dużego obciążenia maszyny, pomimo zastosowania znacznie mocniejszych procesorów.

Przerwy w odpytywaniu

Początkowo przerwania stanowiły ogromną poprawę w stosunku do aktywnego oczekiwania (pętli oczekiwania ) urządzeń peryferyjnych: w rzeczywistości jednostka centralna nie musiała tracić czasu na pętle oczekiwania i była żądana przez różne urządzenia peryferyjne tylko wtedy, gdy trzeba było coś zrobić.

Pojawienie się bardzo szybkich urządzeń peryferyjnych, takich jak dyski SSD, które wymagają dziesiątek tysięcy interwencji na sekundę, znacząco zmieniło sytuację: żądania z jednostki centralnej stają się tak liczne, że stanowe kopie zapasowe wymagane przez przerwy stają się nimi - wręcz źródłem gorsze wyniki. Linux kernel 2.6.32 pozwala więc w razie potrzeby przełączyć z trybu przerwania do aktywnego trybu oczekiwania (w języku angielskim odpytywanie ) dla tego typu urządzenia.

Uwagi i odniesienia

Uwagi

  1. Na przykład 1442 odczytuje 400  kart / min lub 533  kolumn / s , wymagając, aby każde przerwanie odczytu kolumny było całkowicie przetwarzane w 1,8  ms . Model 1130 miał czas cyklu 2,2  µs .

Bibliografia

  1. Krótko mówiąc , na stronie linuxfr.org z 3 grudnia 2012 r., Przeglądanej w dniu 20 listopada 2016 r.

Powiązane artykuły