System przerwań.doc

(58 KB) Pobierz
POLITECHNIKA CZESTOCHOWSKA

POLITECHNIKA CZESTOCHOWSKA

Katedra Inżynierii Komputerowej

 

 

 

 

Seminarium z Systemów operacyjnych

 

 

 

 

Przerwania

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Przemysław Króliszewski                           

Marek Krasuski                                                       

gr. IV rok II                                                       

 

Informatyka, Wydział Inżynierii             

Mechanicznej i Informatyki                           

Wstęp

 

Mikroprocesory umożliwiają reagowanie na określone zdarzenie zewnętrzne,

pojawiające się asynchronicznie w stosunku do synchronicznie działającego mikroprocesora, za pośrednictwem linii przerwań. Termin „przerwanie” dobrze oddaje znaczenie tego zjawiska – powoduje ono zatrzymanie wykonującego się programu i przekazanie sterowania do programu, który to przerwanie obsługuje. Zdarzenia zewnętrzne mogą pojawiać się jednocześnie, a więc układy obsługi przerwań powinny umożliwiać:

-          wykrycie zgłaszanego przerwania;

-          zaakceptowanie (lub nie) zgłoszenia przerwania na podstawie selekcji priorytetu linii oraz stanu przerzutnika przerwań ustawianego programowo; jeżeli zgłoszenie o wyższym priorytecie przerywa program obsługi przerwania o niższym priorytecie, to system jest nazywany wielopoziomowym systemem priorytetowym;

Mechanizm przerwań jest użyteczny przy projektowaniu systemu komputerowego. Przerwania informują procesor o tym, co się dzieje w dołączonych do niego urządzeniach. Gdyby przerwań nie było, procesor chcąc pobrać dane z jakiegoś urządzenia zewnętrznego musiałby sprawdzać cyklicznie ich stan, czy któreś nie chce się zgłosić, co znacznie obniżyłoby efektywność pracy takiego systemu.

Z punktu widzenia pełnionych funkcji przerwania można podzielić na:

-          przerwania sprzętowe, lub zewnętrzne, informujące procesor że zmienił się stan urządzenia zewnętrznego, np.: naciśnięto lub zwolniono klawisz na klawiaturze, przyszedł znak przesłany przez łącze szeregowe RS itd.,

-          przerwania wewnętrzne procesora, generowane w sytuacjach błędnych, lub szczególnych, powstałych podczas pracy procesora (np.: nadmiar dzielenia, praca krokowa itd.)

-          przerwania programowe, generowane z programu, który wykona instrukcję przerwania INT.

 

Przerwania sprzętowe dzielą się dodatkowo na maskowalne i niemaskowalne. Każde przerwanie ma określony numer, który je definiuje np.:

0 – przerwanie generowane przy próbie dzielenia przez zero,

1 – przerwanie „praca krokowa”, generowane, gdy znacznik TF=1 i używane do testowania programu,

2 – przerwanie NMI

8 – przerwanie zegarowe generowane raz na sekundę

9 – przerwanie generowane przy naciśnięciu lub zwolnieniu klawisza

 

Każdemu przerwaniu jakie jest obsługiwane w systemie odpowiada program jego obsługi, którego adres jest przechowywany w specjalnej tablicy tzw. tablicy wektorów przerwań.

 

 

1.      Przerwania programowe.

 

Przerwanie może być generowane rozmyślnie przez program, jeżeli wykona

on  instrukcję INT z numerem przerwania. Przerwanie tego typu przypomina więc bardziej wywołanie procedury, niż zatrzymanie całego programu, gdyż autor decyduje kiedy program ma przerwać swoją pracę i przejść do procedury obsługi przerwania. W praktyce przerwania programowe stosuje się najczęściej do wykonywania operacji wejścia-wyjścia oraz pewnych operacji systemowych (np.: przydzielanie pamięci, ustawianie/pobieranie czasu itp.). Niektóre przerwania podzielone są na podfunkcje np. 10H czy 21H. Jeżeli chcemy wywołać jakąś funkcję systemową to w rejestrze AH umieszczamy numer funkcji i wywołujemy określone przerwanie . Przyporządkowanie numerów przerwań odpowiednim funkcjom zostało ustalone przez projektantów systemu DOS i oprogramowania wewnętrznego BIOS. Numery te możemy zmieniać, ale wówczas systemy oparte na z góry przyporządkowanym numerze przerwania odpowiedniemu źródłowi mogłyby przestać działać.

              Przerwanie programowe generuje program za pomocą instrukcji asemblera INT, nie można z jednego programu wygenerować równolegle kilku przerwań. Jeżeli w programie są dwie kolejne instrukcje INT np.:

INT 10H

INT 60H

To będą one wykonywane sekwencyjnie przerwanie 60H zostanie wygenerowane dopiero po obsłużeniu przerwania 10H.

W literaturze możemy się spotkać z różnym nazewnictwem przerwań programowych mianowicie: przerwania sprzętowe wewnętrzne (hardware internal interrupts), przerwania stanów wyjątkowych (w skrócie stany wyjątkowe), lub pułapki.

 

3. Przerwania sprzętowe.

 

Przerwania sprzętowe mogą się pojawiać w dowolnym momencie i w dowolnej kolejności. Obsługą przerwań steruje układ 8259, tzw. PIC (Programable Interrupt Controller). Umożliwia on dołączenie ośmiu urządzeń zewnętrznych generujących przerwania. Przy pojawieniu się równocześnie więcej niż jednego przerwania sprzętowego PIC rozstrzyga, które przerwanie ma wyższy priorytet i informuje procesor że pojawiło się przerwanie. Kiedy program obsługujący przerwanie sprzętowe zrealizuje wszystkie niezbędne operacje składające się na obsługę tego przerwania, musi powiadomić o tym PIC, który może wtedy przyjąć następne przerwanie sprzętowe.

Istnieją dwa rodzaje przerwań sprzętowych maskowalne to jest takie które mogą być przekazane do procesora, oraz niemaskowalne, które muszą być przekazywane do procesora zawsze. Przerwanie niemskowalne NMI (Non Maskable Interrupt) generowane jest ono w sytuacjach krytycznych (gdyż ma ono najwyższy priorytet) np.:przy błędzie parzystości.

              O tym czy przerwanie maskowalne jest maskowane czy nie informuje zancznik przerwań IF (interrupt flag) w rejestrze znaczników. Jeżeli jest on równy zero przerwania są maskowane. Zawartość znacznika możemy ustawiać lub zerować za pomocą instrukcji CLI (clear interrupts) zerowanie, oraz STI (set interrupts) ustawianie. Przerwana możemy także maskować wybiórczo tzn. powodować by przy ustawionym znaczniku IF (przerwania dozwolone) niektóre przerwana nie pojawiały się. W PIC istnieje rejestr maskowania przerwań, który określa które przerwania sprzętowe będą pojawiać się. Każdy bit tego rejestru odpowiada jednemu przerwaniu sprzętowemu (IRQ0 – IRQ7).

 

4.      Tablica wektorów przerwań.

 

O tym gdzie w pamięci znajdują się programy obsługi przerwań decyduje tablica wektorów przerwań. Każdemu numerowi przerwania przyporządkowany jest tam adres programu obsługi tego przerwania. Każdy adres jest w postaci segment : offset. Adres początkowy tej tablicy znajduje się w specjalnym rejestrze IDTR (Interrupt Descriptor Tabele Register ). Adres przerwania o numerze N znajduje się w polu o adresie 0:N*4

 

 

 

 

000000

CS0

Wektor 0

IP0

000002

CS1

Wektor1

IP1

000004

CS2

Wektor2

IP2

000006

CS3

Wektor3

IP3

000008

CS4

Wektor4

IP4

Adres pamięci

Tablica wektorów przerwań

 

Rys1.Tablica wektorów przerwań

 

 

5.      Obsługa przerwania.

 

Gdy pojawia się przerwanie procesor wykonuje kolejno następujące czynności:

a)      przy przerwaniu sprzętowym kończy wykonywanie instrukcji, przy której pojawiło się przerwanie ;

b)     generowane są dwa cykle potwierdzenia przyjętego zgłoszenia (towarzyszą im impulsy INTA);  pierwszy umożliwia ustalenie priorytetów między zewnętrznymi układami obsługi przerwań, w trakcie drugiego mikroprocesor wprowadza dostarczony przez kontroler przerwań numer lokacji w tablicy wektorów przerwań;

c)      procesor kładzie na stos kolejno zawartość rejestru znaczników, numer segmentu kodu i wartość przesunięcia;

d)     zeruje znacznik IF;

e)      ładuje do CS i IP adres pobrany z tablicy wektorów przerwań;

f)       rozpoczyna wykonywanie programu obsługi przerwania od adresu CI:IP.

 

Czynności te są realizowane przez procesor przy każdym przerwaniu niezależnie od

Tego, czy jest to przerwanie sprzętowe, wewnętrzne czy programowe. Zerowanie znacznika IF ma na celu uniemożliwienie przyjęcia kolejnego przerwania w trakcie wykonywania programu obsługi przerwania. Sama obsługa przerwania polega na wykonaniu operacji odpowiednich dla tego przerwania, np.: dla przerwania sprzętowego klawiatury 9 operacje te polegają na odczytaniu z portu numeru klawisza, stwierdzeniu który klawisz naciśnięto, wstawieniu numeru i kodu znakowego tego klawisza do bufora. Po obsłużeniu przerwania powrót z programu jego obsługi realizuje się zazwyczaj za pomocą instrukcji asemblera IRET (interrupt return). Realizuje ona proces odwrotny do przerwania (pobiera ze stosu trzy kolejne słowa i ładuje je do odpowiednich rejestrów). W przypadku przerwania sprzętowego zgłaszanego przez PIC przed wykonaniem instrukcji IRET należy zawiadomić PIC, że dane przerwanie zostało obsłużone i że procesor może przyjmować następne przerwania, realizuje się to wysyłając polecenie EOI (end of interrupt).

Niektóre programy obsługujące przerwania na początku swojego działania zerują znacznik IF aby mogły być wykonywane inne przerwania w trakcie ich wykonywania.

 

6. Przerwania NMI.

Przerwanie niemaskowalne jest zrealizowane w ten sposób że Sygnał NMI przyłączony bezpośrednio do procesora jest generowany przez układ kontroli parzystości, układ kontroli zewnętrznych we-wy, lub koprocesor arytmetyczny. Przerwanie to (niezależnie od przyczyny) może być zewnętrznie maskowane z pomocą rejestru dostępnego pod adresem A0h. Wpisanie odpowiedniej wartości do tego rejestru powoduje zablokowanie lub odblokowanie przerwania NMI.

 

7.Realizacja sprzętowa.

              Jak już wcześniej wspomniano kontrolą przerwań przesyłanych przez urządzenia zewnętrzne zajmuje się układ 8259. Sterownik ten posiada osiem wejść przerywających IRQ0 – IRQ7, wyjście INTR żądania przerwania (Interrupt Request) , wejście potwierdzenie przerwania INTA (Interrupt Acknowledge), magistralę danych D0-D7 służące do komunikacji między procesorem i kontrolerem, oraz wyjścia CAS0-CAS2 (Cascade) które tworzą lokalną magistralę adresową używaną przy kaskadowym łączeniu układów 8259A, umożliwia ona zaadresowanie do 8 takich układów.

              Układ 8259A dysponuje trzema 8-bitowymi rejestrami: IMR, IRR i ISR. Pozycja bitowa n każdego z nich odpowiada jednemu z wejść IRn. Urządzenie połączone z wejściem o numerze n zgłaszając przerwanie ustawia bit n w rejestrze IMR (Interrupt Mask Register) jeżeli bit ten jest wyzerowany to informacja o przerwaniu przekazywana jest dalej i powoduje ustawienie bitu n w rejestrze IRR (Interrupt Request Register).

 



Blok sterujący

                                                                                                                              INT











Wewnętrzna magistrala układu 8259A

                                                                                                                              INTA

 

Rejestr obsługi ISR

Układ oceny priorytetu

Rejestr zgłoszeń IRR





                                                                                                                                 Wejścia IR0-IR7



























Rejestr maskujący IMR

 

 

Rys2.schemat blokowy kontrolera 8259A

 

Wejścia przerywające mają priorytety malejące ze zwiększeniem numeru wejścia (IRQ0 – najwyższym, IRQ7 – najniższy. Wyjściowy sygnał żądania przerwania wprowadza się na wejście przerwania maskowalnego procesora. Gdy jakieś urządzenia zewnętrzne prześlą sygnał żądania przerwania na wejścia sterownika PIC wówczas ten wybiera przerwanie o najwyższym priorytecie i przesyła sygnał INTR na wejście procesora. Gdy procesor jest gotowy do przyjęcia przerwania powiadamia o tym sterownik PIC aktywnym sygnałem INTA. W tym momencie sterownik umieszcza na magistrali wektor adresu tego przerwania i procesor przechodzi do jego obsługi.

 

8. Kaskadowe łączenie sterowników.

Aby możliwe było w systemie komputerowym obsłużenie większej ilości przerwań stosuje się kaskadowe łączenie sterowników 8259. Realizowane jest to w ten sposób że do wejść przerywających jednego sterownika 8259 master przyłączane są wyjścia INTA z innych sterowników. Każdy przyłączony sterownik zwiększa liczbę wejść przerywających o 8, a więc umożliwia nam to osiągnięcie 64 poziomów przerwań na jedną kaskadę.

 

 

 

7

 

 

8259

 

0

                                                                                                        IRQ63

 



7

 

INT

8259

 

INTA

0








...

Zgłoś jeśli naruszono regulamin