Co to są przerwy w oprogramowaniu i sprzęcie i jak są przetwarzane?


43

Nie jestem pewien, czy rozumiem pojęcie przerw w sprzęcie i oprogramowaniu.

Jeśli dobrze rozumiem, celem przerwania sprzętowego jest zwrócenie uwagi na procesor, co jest częścią implementacji wielozadaniowości procesora.

  1. Co zatem powoduje przerwanie sprzętowe? Czy to proces sterownika sprzętu?
  2. Jeśli tak, gdzie przebiega proces sterownika sprzętu? Jeśli działa na CPU, to nie będzie musiał zwracać na niego uwagi przez przerwanie sprzętowe, prawda? Czy to działa gdzie indziej?
  3. Czy przerwanie sprzętowe przerywa procesor bezpośrednio, czy też najpierw kontaktuje się z procesem jądra, a następnie proces jądra kontaktuje się / przerywa procesor?

Z drugiej strony, myślę, że celem przerwania oprogramowania jest proces aktualnie działający na CPU, który zażąda pewnych zasobów.

  1. Jakie są zasoby? Czy wszystkie mają postać uruchomionych procesów? Na przykład, czy proces sterownika procesora i procesy sterownika pamięci reprezentują zasoby procesora i pamięci? Czy proces sterownika urządzeń we / wy reprezentuje zasoby we / wy? Czy inne uruchomione procesy, z którymi proces chciałby się komunikować, również mają zasoby?
  2. Jeśli tak, to czy oprogramowanie przerywa kontakt z procesami (które reprezentują zasoby) pośrednio poprzez proces jądra? Czy to prawda, że ​​w przeciwieństwie do przerwania sprzętowego, przerwanie programowe nigdy nie przerywa bezpośrednio procesora, ale zamiast tego przerywa / kontaktuje się z procesem jądra?

Odpowiedzi:


55

Przerwanie sprzętowe nie jest tak naprawdę częścią wielozadaniowości procesora, ale może je prowadzić.

  1. Przerwania sprzętowe są wydawane przez urządzenia sprzętowe, takie jak dysk, karty sieciowe, klawiatury, zegary itp. Każde urządzenie lub zestaw urządzeń będzie miało własną linię IRQ (Interrupt ReQuest). Na podstawie IRQ CPU wyśle ​​żądanie do odpowiedniego sterownika sprzętowego. (Sterowniki sprzętowe są zwykle podprogramami w jądrze, a nie oddzielnym procesem).

  2. Sterownik obsługujący przerwanie jest uruchamiany na procesorze. Procesor jest przerywany od tego, co robił, aby obsłużyć przerwanie, więc nic więcej nie jest wymagane, aby zwrócić uwagę procesora. W systemach wieloprocesorowych przerwanie zwykle przerywa tylko jeden z procesorów. (W szczególnych przypadkach komputery mainframe mają kanały sprzętowe, które mogą obsługiwać wiele przerwań bez wsparcia głównego procesora).

  3. Przerwanie sprzętowe bezpośrednio przerywa procesor. Spowoduje to wyzwolenie odpowiedniego kodu w procesie jądra. W przypadku procesów, których przetwarzanie zajmuje trochę czasu, kod przerwania może pozwolić na przerwanie przez inne przerwania sprzętowe.

    W przypadku przerwania timera kod harmonogramu jądra może zawiesić uruchomiony proces i pozwolić na uruchomienie innego procesu. Jest to obecność kodu harmonogramu, który umożliwia wielozadaniowość.

Przerwania programowe są przetwarzane podobnie jak przerwania sprzętowe. Można je jednak wygenerować tylko w aktualnie uruchomionych procesach.

  1. Zazwyczaj przerwaniami programowymi są żądania we / wy (wejście lub wyjście). Wywołają one procedury jądra, które zaplanują wystąpienie operacji we / wy. W przypadku niektórych urządzeń operacje we / wy zostaną wykonane natychmiast, ale operacje dyskowe we / wy są zwykle ustawiane w kolejce i wykonywane później. W zależności od wykonywanych operacji we / wy proces może zostać zawieszony do czasu zakończenia operacji we / wy, co powoduje, że program planujący jądro wybiera inny proces do uruchomienia. We / wy może wystąpić między procesami, a przetwarzanie jest zwykle planowane w taki sam sposób, jak we / wy dysku.

  2. Przerwanie oprogramowania komunikuje się tylko z jądrem. Jądro jest odpowiedzialne za planowanie wszelkich innych procesów, które muszą zostać uruchomione. Może to być kolejny proces na końcu rury. Niektóre jądra pozwalają na istnienie niektórych części sterownika urządzenia w przestrzeni użytkownika, a jądro zaplanuje uruchomienie tego procesu w razie potrzeby.

    Prawidłowe jest, że przerwanie programowe nie przerywa bezpośrednio procesora. Tylko kod, który jest obecnie uruchomiony, może wygenerować przerwanie oprogramowania. Przerwanie jest żądaniem, aby jądro zrobiło coś (zwykle I / O) w celu uruchomienia procesu. Specjalnym przerwaniem programowym jest wywołanie Yield, które prosi program planujący jądra o sprawdzenie, czy jakiś inny proces może zostać uruchomiony.

Odpowiedź na komentarz:

  1. W przypadku żądań We / Wy jądro deleguje pracę do odpowiedniego sterownika jądra. Procedura może ustawić kolejkę we / wy w celu późniejszego przetworzenia (wspólne dla We / Wy dysku) lub wykonać ją natychmiast, jeśli to możliwe. Kolejka jest obsługiwana przez sterownik, często podczas reagowania na przerwania sprzętowe. Po zakończeniu jednego we / wy następny element w kolejce jest wysyłany do urządzenia.

  2. Tak, przerwania programowe pozwalają uniknąć kroku sygnalizacji sprzętowej. Proces generujący żądanie oprogramowania musi być procesem aktualnie uruchomionym, aby nie zakłócał procesora. Zakłócają one jednak przepływ kodu wywołującego.

    Jeśli sprzęt musi zmusić procesor do zrobienia czegoś, powoduje, że procesor przerywa jego uwagę na wykonywanym kodzie. CPU przesunie swój aktualny stan na stos, aby później mógł powrócić do tego, co robił. Przerwanie może zostać zatrzymane: uruchomiony program; kod jądra obsługuje kolejne przerwanie; lub proces bezczynności.


Dzięki! (1) Czy w przerwaniu programowym operacje we / wy są wykonywane przez procedurę sterownika urządzenia we / wy w procesie jądra? (2) czy to prawda, że ​​ścieżka, przez którą przechodzi przerwanie oprogramowania, jest o jeden krok krótsza niż ścieżka do przerwania sprzętowego? Innymi słowy, w przypadku przerwania oprogramowania: program -> procedura sterownika urządzenia w procesie jądra; dla przerwania sprzętowego: sprzęt -> CPU -> procedura sterownika urządzenia w procesie jądra?
Tim

Dzięki! Czy to prawda, że ​​przerwanie sprzętowe powoduje, że procesor wypycha swój aktualny stan na stos, dzięki czemu sterownik sprzętowy może działać na CPU, a później wyskakiwać przerwany proces na CPU? Czy przerwanie oprogramowania powoduje również, że proces działający na CPU jest wypychany na stos, aby żądana usługa mogła być uruchomiona na CPU?
Tim

Każde przerwanie spowoduje wypchnięcie stanu na stos. Pozwala to systemowi na przeładowanie stanu po zakończeniu przerwania.
BillThor,

Dzięki! jeśli żądana usługa nie będzie działać na procesorze, na przykład operacje we / wy, które są uruchamiane na urządzeniach we / wy zamiast procesora, a proces żądania może być kontynuowany bez oczekiwania na zakończenie żądanej usługi, proces żądania będzie nadal umieszczany na stosie ?
Tim

Zwykle odczyt we / wy jest wywoływany synchronicznie i proces nie zostanie uruchomiony, dopóki nie zostanie zakończone we / wy. Do odczytów prawie zawsze tego chcesz. Zapisy zwykle odbywają się asynchronicznie, co pozwala kontynuować proces.
BillThor,
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.