Czy ktoś może mi wyjaśnić, w jaki sposób procesor znajduje źródło przerwania w teorii systemu operacyjnego?

5

Obecnie wykonuję moduł w teorii systemów operacyjnych i mam kilka koncepcji, których nie jestem w stanie zrozumieć - czy byłoby to właściwe miejsce do zadawania pytań?

Moje główne pytanie dotyczy przerwań. Kiedy procesor wykryje, że nastąpiło przerwanie, rozumiem, że musi dowiedzieć się, skąd pochodzi przerwanie. Moje rozumienie jest następujące: czy ktoś mógłby mi powiedzieć, czy to jest poprawne i wyjaśnić kilka luk w mojej wiedzy?

Aby procesor mógł wykryć, gdzie powstało przerwanie, mógł zapytać wszystkie obiekty o identyfikację źródła, ale te pytania oparte na I / O zajęłyby dużo czasu. Zamiast tego wykorzystuje cykl przerwań i oczekuje identyfikatora przerwania na magistrali danych. Jeśli jest to 8-bitowa magistrala danych, istnieje 256 poziomów przerwań (tj. 2 ^ 8). (Dlaczego to?)

Tak więc procedura obsługi przerwań (ISR) jest zapisywana dla każdego możliwego poziomu przerwań i przechowywana w tabeli w ustalonej lokalizacji (wektor przerwań), która jest standaryzowana przez procesor. W moich notatkach jest napisane: „Lokalizacja musi być znana przed otrzymaniem adresu” (Co to znaczy?)

Identyfikator poziomu przerwania otrzymany jako część cyklu przerwania jest używany jako indeks do wektora przerwań (Czy ktoś może to trochę zepsuć?) . Rozumiem, że wartość, identyfikator poziomu przerwań jest przekazywany do CPU i używany do wskazania wektora przerwań.

Co to znaczy, gdy mówi się, że przerwanie jest „obsługiwane”?

Dziękuję bardzo i przepraszam za długie akapity, jestem trochę zdezorientowany wieloma aspektami tego!

user54094
źródło

Odpowiedzi:

4

Co to znaczy, gdy mówi się, że przerwanie jest „obsługiwane”?

Gdy rzecz wymagająca przerwania jest zajęta, nazywa się ją „obsługiwaną”. Może to być tak proste, jak odczytanie następnego znaku z klawiatury lub wysłanie następnego pakietu danych z karty ethernet. Niektóre przerwania są ważniejsze niż inne, więc istnieje możliwość ich priorytetyzacji.

Przydatny artykuł można znaleźć tutaj .

Identyfikator poziomu przerwania otrzymany jako część cyklu przerwania jest używany jako indeks do wektora przerwań

Jak już wspomniałeś, gdy wystąpi przerwanie, CPU zapytał „kto to zrobił? a urządzenie przerywające umieszcza swój identyfikator przerwania w magistrali danych. CPU pobiera ten numer i sprawdza go w tabeli ISR, aby przenieść wykonanie do modułu obsługi.

Przerwanie jest żądaniem procesora, aby zawiesił swój bieżący program i przekazał sterowanie do nowego programu o nazwie Procedura przerwania usługi (ISR). Specjalne mechanizmy sprzętowe zaprojektowane dla maksymalnej prędkości wymuszają transfer. ISR określa przyczynę przerwania, podejmuje odpowiednie działanie, a następnie zwraca kontrolę do pierwotnego procesu, który został zawieszony.

Tangurena
źródło
2

Zamiast tego wykorzystuje cykl przerwań i oczekuje identyfikatora przerwania na magistrali danych. Jeśli jest to 8-bitowa magistrala danych, istnieje 256 poziomów przerwań (tj. 2 ^ 8). (Dlaczego to?)

Alternatywą do tego jest posiadanie pin na CPU dla każdego typu IRQ lub poziomu, który chcesz wspierać. 68000 zrobił to, mieli 3 piny przerwania pozwalające na wyrażenie poziomu IRQ 0 (NMI) przez 7. Procesory Intel mają tylko 1 pin IRQ i oczekują adresu w magistrali (dostarczonego przez urządzenie pośrednie zwane PIC), aby zapewnić jego type (myślę, że na Intelu ten „adres”, tak naprawdę indeks, trafia bezpośrednio do rejestru. Niektóre PIC mogą faktycznie powiedzieć CPU, jaki adres ma przejść bezpośrednio).

Sądzę, że mają osobny pin NMI (i istnieją inne przerwania z własnymi pinami, takimi jak SMI, IPI, a reset jest rodzajem przerwania).

Tak więc procedura obsługi przerwań (ISR) jest zapisywana dla każdego możliwego poziomu przerwań i przechowywana w tabeli w ustalonej lokalizacji (wektor przerwań), która jest standaryzowana przez procesor.

Nie musisz pisać 256 ISR, możesz utworzyć „stub”, który po prostu „wraca z przerwania”, skutecznie go ignorując.

W moich notatkach jest napisane: „Lokalizacja musi być znana przed otrzymaniem adresu” (co to oznacza?)

Jest to trochę niejednoznaczne - nie wiem, czy to oznacza, że ​​musisz znać adres bazowy tabeli wektorowej, czy po prostu powiedzieć, że nie znasz adresu ISR, jeśli nie znasz numeru IRQ.

Identyfikator poziomu przerwania otrzymany jako część cyklu przerwania jest używany jako indeks w wektorze przerwań (Czy ktoś może to trochę zmniejszyć?).

PIC odbiera IRQ z urządzenia. To urządzenie jest ustawione na wyzwalanie IRQ # 3. CPU, po otrzymaniu IRQ z PIC, widzi 3 w magistrali i przeskakuje na adres w lokalnej tabeli wektorów IRQ, indeks 3.

Rozumiem, że wartość, identyfikator poziomu przerwań jest przekazywany do CPU i używany do wskazania wektora przerwań.

Dobrze.

Co to znaczy, gdy mówi się, że przerwanie jest „obsługiwane”?

Zazwyczaj nie chcesz, aby procesor był przerywany podczas przekazywania przerwania. Procesory i kombinacje CPU + PIC robią różne rzeczy, aby wyłączyć przerwania po odebraniu IRQ. Musisz więc „ogłosić”, kiedy to skończysz. Na Intelu musisz ponownie włączyć bit włączania przerwań systemowych i powiedzieć PIC, że zakończyłeś obsługę IRQ. PIC „wstrzymuje” dalsze IRQ, dopóki procesor nie powie, że to zrobiono.

Pominęłem kilka szczegółów z powyższego, aby uprościć, a także dlatego, że minęło dużo czasu odkąd studiowałem którekolwiek z powyższych, ale mam nadzieję, że jest to pomocne.

LawrenceC
źródło