Jedrzej
Ułasiewicz Komputerowe systemy sterowania 1
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
1 Przerwania
1.1 Obsługa zdarzeń, odpytywanie i przerwania
Obs
ługa zdarzeń jest jedną z kluczowych funkcji w prawie każdym
systemie czasu rzeczywistego.
Istniej
ą dwie metody pozyskania informacji o zdarzeniach:
1. Cykliczne odpytywanie urz
ądzenia czy zdarzenie zaszło (ang.
polling).
2. Wykorzystanie przerwa
ń generowanych przez zdarzenia (ang.
interrupts).
Istniej
ą dwie metody informowania o zdarzeniach: metoda
odpytywania rejestru zdarze
ń oraz wyzwalane zdarzeniami przerwania.
Metoda odpytywania – w
łasności:
1. D
ługi czas reakcji na zdarzenie
2. Trudno
ści w uszeregowaniu obsługi zdarzeń według priorytetów.
3. Utrata czasu procesora na wykonanie ja
łowych czynności
4. Prostota implementacji – nie jest wymagany specjalny sprz
ęt.
5. Przewidywalno
ść – nic nie dzieje się niespodziewanie a tylko wtedy
gdy nadejdzie na to zaplanowany czas.
Obs
ługa zdarzenia poprzez przerwanie
Obs
ługa zdarzenia poprzez przerwanie polega na zawieszeniu aktualnie
wykonywanego w
ątku i wykonaniu przypisanej zdarzeniu sekwencji
instrukcji nazywanej procedur
ą obsługi przerwania. Po zakończeniu
procedury nast
ępuje powrót do przerwanego wątku.
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 2
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
w
ątek procedura obsługi
przerwania
przerwanie
powrót z procedury
obs
ługi przerwania
ISR
Rys. 1-1 Obs
ługa zdarzenia poprzez procedurę obsługi przerwania
Przyk
ładem urządzenia zgłaszającego przerwania może być układ
transmisji szeregowej typu 8250.
Bufor odbiorczy
Bufor nadawczy
RX
TX
CTS
RTS
R0
R7
dane wysy
łane
dane odbierane
linie
sterowanie
modemem
kontroler
przerwa
ń
uk
ład 8250
IRQ3
INT
R1
Rys. 1-2 Uk
ład transmisji szeregowej 8250
Funkcje kontrolera przerwa
ń:
•
Maskowanie przerwa
ń.
•
Tworzenie powi
ązania pomiędzy linią zgłoszenia przerwania a
procedur
ą obsługi przerwania (za pośrednictwem wektora przerwań).
•
Arbitra
ż przerwań.
Arbitra
ż przerwań.
Kontroler przerwa
ń posiada 8 linii zgłaszania przerwań. Arbitraż polega
na rozstrzyganiu czy i kiedy, wykonywana w
łaśnie procedura obsługi
przerwania, ma by
ć przerwana przez pojawiające się zgłoszenie innego
przerwania.
Mo
żliwe są dwie podstawowe strategie obsługi przerwań.
•
strategia jednopoziomowa
•
wielopoziomowa.
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 3
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
Strategia jednopoziomowa - polega wstrzymaniu si
ę z obsługą nowego
przerwania do czasu zako
ńczenia obsługi przerwania.
Strategia wielopoziomowa - gdy w czasie obs
ługi przerwania o niższym
priorytecie pojawi si
ę zgłoszenie przerwania o priorytecie wyższym, to
system przyjmie przerwanie o wy
ższym priorytecie.
w
ątek
procedura obs
ługi
przerwania 1
przerwanie 2
przyj
ęcie przerwania 2
przerwanie 1
ISR 1
ISR 2
procedura obs
ługi
przerwania 2
EOI
EOI
czas
Rys. 1-3 Dwa przerwania obs
ługiwane w systemie jednopoziomowym
w
ątek
procedura obs
ługi
przerwania 1
przerwanie 2
przyj
ęcie przerwania 2
przerwanie 1
ISR 1
ISR 2
procedura obs
ługi
przerwania 2
kontynuacja ISR1
czas
Rys. 1-4 Obs
ługa przerwań w trybie wielopoziomowym
Nie nale
ży mylić priorytetów przerwań wynikających z działania
kontrolera przerwa
ń z priorytetami wątków.
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 4
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
1.2 Obsługa przerwań w systemie QNX6 Neutrino
Funkcje konieczne do obs
ługiwania przerwań:
•
funkcje blokowania przerwa
ń (wszystkich lub pojedynczych) w
systemie jedno i wieloprocesorowym.
•
funkcja
InterruptAttach() instalujące handler obsługi przerwania
i funkcja
InterruptAttachEvent() transformacji przerwanie w
zdarzenie.
•
funkcja blokuj
ącą wątek bieżący w oczekiwaniu na przerwanie.
Opis funkcji
Nazwa funkcji
Blokowanie przerwa
ń
InterruptDisable()
Odblokowanie przerwa
ń
InterruptEnable()
Za
łożenie blokady przerwań
InterruptLock()
Zdj
ęcie blokady przerwań
InterruptUnlock()
Zamaskowanie przerwania
InterruptMask()
Odmaskowanie przerwania
InterruptUnmask()
Instalacja procedury obs
ługi
przerwania
InterruptAttach()
Transformacja przerwania w
zdarzenie
InterruptAttachEvent()
Oczekiwanie na przerwanie
InterruptWait()
Tabela 1-1 Funkcje systemowe dotycz
ące obsługi przerwań
1.3 Blokowanie i maskowanie przerwań
Procedury obs
ługi przerwania często muszą modyfikować struktury
danych z których korzystaj
ą także inne jeszcze wątki – należy zapewnić
wzajemne wykluczanie.
handler
wspólne
dane
W
ątek W1
Przerwanie
Rys. 1-5 W
ątek W1 i procedura obsługi przerwania wykorzystują
wspólne dane
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 5
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
Blokowanie przerwa
ń (ang. interrupt disabling)
Blokowanie przerwa
ń jest to niedopuszczenie do zgłoszenia wszystkich
przerwa
ń i realizowane jest w procesorze.
Maskowanie przerwa
ń (ang. interrupt mask)
Maskowanie
przerwa
ń jest to niedopuszczenie do zgłoszenia
okre
ślonego przerwania i realizowane jest w kontrolerze przerwań.
InterruptDisable – blokowanie przerwań
int InterruptDisable(void)
Wykonanie funkcji spowoduje zablokowanie wszystkich przerwa
ń
zewn
ętrznych.
Czas zablokowania przerwa
ń należy ograniczyć do niezbędnego
minimum.
Po zablokowaniu przerwa
ń komputer staje „głuchy” i przestaje reagować
na jakiekolwiek zewn
ętrzne zdarzenia z wyjątkiem zdarzeń
obs
ługiwanych w trybie odpytywania.
Funkcj
ę blokowania przerwań mogą wykonywać tylko procesy będące
w
łasnością administratora.
W
ątek zamierzający zablokować przerwania powinien wcześniej
za
żądać przywileju wykonania sprzętowej operacji wejścia wyjścia
poprzez wykonanie funkcji
ThreadCtl(_NTO_TCTL_IO,0)
InterruptEnable – odblokowanie przerwań
int InterruptEnable(void)
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 6
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
W systemach wieloprocesorowych do zapewnienia ochrony sekcji
krytycznej w procedurach obs
ługi przerwań blokowanie przerwań jest
niewystarczaj
ące. Należy użyć mechanizmu wirującej blokady.
InterruptLock – założenie blokady
int InterruptLock(intrspin_t *spinlock)
spinlock Zmienna blokady - wspólna dla handlera i wątku
Funkcja
InterruptLock() sprawdza zawartość zmiennej
spinlock().
Dzia
łanie:
Gdy warto
ść zmiennej spinlock wskazuje że nie jest ona zajęta, to ją
zajmuje wpisuj
ąc do niej odpowiednią wartość i blokuje przerwania.
Sprawdzenie i ustawienie zmiennej odbywa si
ę jako nieprzerywalna
operacja atomowa. Gdy zmienna
spinlock jest zajęta, wykonywane
jest ponowne sprawdzenie warto
ści tej zmiennej. Sprawdzanie odbywa
si
ę tak długo aż zmienna spinlock nie zostanie zwolniona.
InterruptUnlock – zdjęcie blokady
int InterruptUnlock(intrspin_t *spinlock)
spinlock Zmienna blokady - wspólna dla handlera i wątku
Funkcja
InterruptUnlock() powoduje zdjęcie blokady i
odblokowanie przerwa
ń.
intrspin_t zm_blok;
....
InterruptLock(&zm_blok);
/* Sekcja krytyczna */
...
InterruptUnlock(&zm_blok);
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 7
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
Indywidualne przerwania mo
żna blokować używając rejestru maski w
kontrolerze przerwa
ń. Jedno określone przerwanie zablokowane może
by
ć przy użyciu funkcji:
InterruptMask – zamaskowanie przerwania
int InterruptMask(int intr, int id)
intr Numer przerwania które ma być zamaskowane
id
Identyfikator handlera zwracany przez funkcje
InterruptAttach(), InterruptAttachEvent() lub –1
gdy przerwanie ma by
ć zamaskowane dla wszystkich
handlerów.
Wykonanie funkcji powoduje zamaskowanie przerwania sprz
ętowego
podanego jako pierwszy parametr, dla handlera o identyfikatorze
podanym jako drugi parametr.
Zamaskowane przerwanie mo
żna dozwolić (odmaskować) używając
funkcji:
InterruptUnmask – dozwolenie przerwania
int InterruptUnmask(int intr, int id)
intr Numer przerwania które ma być dozwolone
id
Identyfikator handlera zwracany przez funkcje
InterruptAttach, InterruptAttachEvent lub –1 gdy
przerwanie ma by
ć dozwolone dla wszystkich handlerów.
1.4 Instalacja procedur obsługi przerwań.
Zadania realizowane poprzez procedur
ę obsługi przerwania:
1. Stwierdzenie które z urz
ądzeń wymaga obsługi (gdy więcej urządzeń
dzieli jedno przerwanie).
2. Obs
ługa urządzenia – zwykle sprowadza się ona do odczytu i zapisu
pewnych rejestrów urz
ądzenia.
3. Aktualizacja wspólnych struktur danych (dost
ępnych także dla wątków
aplikacji).
4. Zasygnalizowanie aplikacji wyst
ąpienia zdarzenia.
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 8
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
Instalacji handlera obs
ługi przerwania następuje poprzez wykonanie
funkcji:
InterruptAttach – instalacja obsługi przerwania
int InterruptAttach(int itnr,
const struct sigevent *(* handler)(void*, int),
const void *area, int size, unsigned flags)
intr
Numer przerwania
handler Wskaźnik na procedurę obsługi przerwania (handler)
area
Adres obszaru komunikacji handlera z programem
size
Wielko
ść obszaru komunikacji handlera z programem
flags Flagi
Wykonanie funkcji spowoduje zainstalowanie funkcji
handler()
okre
ślonej jako drugi parametr, do obsługi przerwania o numerze
intr
,
podanej jako pierwszy parametr funkcji.
Parametr trzeci i czwarty dotycz
ą obszaru komunikacyjnego pomiędzy
w
ątkiem a handlerem.
Przed wykonaniem funkcji nale
ży zażądać prawa wykonania operacji
wej
ścia wyjścia poprzez wykonanie funkcji:
ThreadCtl(_NTO_TCTL_IO,0)
Dzia
łanie procedury obsługi przerwań jest modyfikowane przez flagi.
_NTO_INTR_FLAGS_END - nowy handler dopisany będzie na końcu
łańcucha i wykona się jako ostatni.
_NTO_INTR_FLAGS_PROCESS system kojarzy handler z procesem a
nie z w
ątkiem. Handler będzie deinstalowany gdy kończy się proces a
nie w
ątek.
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 9
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
Procedura obs
ługi przerwania
Handler jest funkcj
ą o następującym prototypie:
const struct sigevent* handler(void* area, int id)
Handler mo
że zwracać albo stałą NULL albo wskaźnik do prawidłowo
zadeklarowanej i zainicjowanej struktury typu
sigvent.
1. Gdy procedura obs
ługi przerwania zwraca NULL to nie powoduje to
dalszych dzia
łań.
2. Gdy procedura obs
ługi przerwania zwraca wskaźnik do struktury typu
sigvent to generowane jest zdarzenie wyspecyfikowane w
strukturze
sigevent.
Gdy handler przerwania generuje zdarzenie, to zdarzenie to powinno
prowadzi
ć do odblokowania pewnego wątku. Żądany typ zdarzenia
zale
ży od zainicjowania struktury
sigevent
.
1. Gdy przerwanie ma odblokowa
ć wątek zawieszony na funkcji
InterruptWait() to zdarzenie powinno być typu SIGEV_INTR.
2. Gdy przerwanie ma odblokowa
ć wątek zablokowany na funkcji
MsgReceive() to zdarzenie powinno być typu SIGEV_PULSE. W
tym przypadku w
ątek może odbierać także komunikaty.
3. Mo
żliwe jest także zainicjowanie struktury sigevent na zdarzenia
typu SIGEV_SIGNAL, SIGEV_SIGNAL_CODE,
SIGEV_SIGNAL_THREAD, SIGEV_THREAD. Ze wzgl
ędu na
mniejsz
ą efektywność nie jest to zalecane.
Przy tworzeniu procedur obs
ługi przerwań należy przestrzegać zasad:
1. Rozmiar stosu którym dysponuje procedura obs
ługi przerwania jest
ograniczony. St
ąd nie powinna ona zawierać dużych tablic czy innych
struktur danych . Bezpiecznie jest przyj
ąć że dostępny rozmiar stosu
wynosi oko
ło 200 bajtów.
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 10
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
2. Procedura obs
ługi przerwań wykonywana jest asynchronicznie z
w
ątkami należącymi do pewnego procesu i używa wspólnych z nimi
danych. Wszystkie zmienne modyfikowane przez handler powinny by
ć
poprzedzone s
łowem kluczowym volatile, a ich modyfikacja
wewn
ątrz wątków zabezpieczona przez zablokowanie przerwań
3. Procedura obs
ługi przerwania wykonywana jest poza normalnym
szeregowaniem wi
ęc powinna być tak krótka jak to tyko możliwe.
Je
żeli wymagane jest wykonanie czasochłonnych czynności to
powinny by
ć one wykonane w wątku który zostanie prze handler
odblokowany.
4. Procedura obs
ługi przerwania nie może wywoływać żadnych funkcji
systemowych z wyj
ątkiem niektórych funkcji.
Oczekiwanie na przerwanie
Ko
ńczący się handler może wygenerować zdarzenie SIGEV_INTR.
Zdarzenie to mo
że odblokować oczekujący na przerwanie wątek.
Funkcj
ą która blokuje wątek w oczekiwaniu na przerwanie jest funkcja
InterruptWait().
InterruptWait – oczekiwanie na przerwanie
int InterruptWait(int flags, iunt_64 *timeout)
flags Flagi – należy przyjąć 0
timeout Maksymalny okres oczekiwania – obecnie należy przyjąć
NULL
Funkcja powoduje zablokowanie w
ątku bieżącego w oczekiwaniu na
przerwanie. Funkcja zwraca –1 gdy b
łąd.
InterruptDetach – deinstalacja handlera przerwania
int InterruptDetach(int id)
id
Identyfikator zwracany przez funkcj
ę InterruptAttach() i
InterruptAttachEvent()
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 11
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
// Obsluga przerwania zegarowego
#include <sys/neutrino.h>
#define TIME_INT 0
struct sigevent event;
int icnt = 0;
int intid = 0;
int sec = 0;
const struct sigevent * handler(void * arg, int
id) {
icnt++;
if(icnt == 1000) {
icnt = 0;
intid = id;
sec++;
return(&event);
} else return(NULL);
}
main() {
int res,i,sec = 0;
i = 0;
printf("Program startuje \n");
event.sigev_notify = SIGEV_INTR;
ThreadCtl( _NTO_TCTL_IO, 0 );
res = InterruptAttach(TIME_INT,
&handler,NULL,0,0);
printf("Handler zaininstalowany: %d \n",res);
do {
InterruptWait(0,NULL);
printf("Przerwanie: %d %d %d\n",sec,i,intid);
i++;
} while(sec<60);
InterruptDetach(res);
}
Przyk
ład 1-1 Obsługa przerwania zegarowego
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 12
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
1.5 Transformacja przerwania w zdarzenie
Czynno
ści wykonywane w ramach ISR nie podlegają szeregowaniu. W
kodzie handlera wykona
ć można tylko niezbędny zakres czynności a
nast
ępnie powiadomić pewien wątek o zaistnieniu przerwania a wątek
ten wykona reszt
ę pracy.
W kodzie procedury obs
ługi przerwania wykonać należy tylko
niezb
ędne czynności a następnie powiadomić pewien wątek o
wyst
ąpieniu przerwania. Wątek ten wykona resztę pracy.
Obs
ługa zdarzeń w QNX6 Neutrino:
1. Wszystkie czynno
ści wykonywane są przez procedurę obsługi
przerwania.
2. Wewn
ątrz
procedury
obs
ługi
przerwania
wykonane
b
ędą
najwa
żniejsze czynności a resztę pracy wykona odblokowany
specjalnie w
ątek.
3. Wewn
ątrz procedurę obsługi przerwania nie są wykonywane żadne
czynno
ści a jedyną jego funkcją jest odblokowanie pewnego wątku.
W pierwszym przypadku programista pisze procedur
ę obsługi
przerwania i kojarzy j
ą z przerwaniem wykorzystując funkcję
InterruptAttach().
W drugim przypadku post
ępowanie jest analogiczne jak w przypadku
pierwszym z ta ró
żnicą że na zakończenie handler zwraca zainicjowane
odpowiednio zdarzenie w postaci struktury typu
sigevent . Gdy handler
zwróci takie zdarzenie to skojarzony z nim w
ątek będzie odblokowany.
W trzecim przypadku nie ma potrzeby w ogóle potrzeby pisania
handlera. W funkcji
InterruptAttachEvent() specyfikuje się numer
przerwania i rodzaj zdarzenia na które to przerwanie ma by
ć
transformowane.
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 13
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
w
ątek
procedura obs
ługi
przerwania
przerwanie
ISR
w
ątek obsługi
przerwania
odblokowanie
w
ątku
event
Czas
Rys. 1-6 Procedura obs
ługi przerwania wykonuje część pracy a
nast
ępnie odblokowuje wątek
w
ątek
przerwanie
w
ątek obsługi
przerwania
odblokowanie
w
ątku
event
Czas
Rys. 1-7 Przerwanie zamieniane w zdarzenie które
event odblokowuje
w
ątek.
InterruptAttachEvent – transformacja przerwania w zdarzenie
int InterruptAttachEvent(int itnr,
const struct sigevent *event,unsigned flags)
intr Numer przerwania
event Wskaźnik na strukturę opisu zdarzenia które ma być
wygenerowane gdy nadejdzie przerwanie
Flags Flagi
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 14
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
#include <sys/neutrino.h>
#define TIME_INT 0
struct sigevent event;
main() {
int res, i = 0;
i = 0;
printf("Program startuje \n");
ThreadCtl(_NTO_TCTL_IO,0);
SIGEV_INTR_INIT(&event);
res = InterruptAttachEvent(TIME_INT, &event,
_NTO_INTR_FLAGS_END);
if(res < 0) {
perror("install"); exit(0);
}
printf("Handler zaininstalowany: %d \n",res);
InterruptUnmask (TIME_INT, res);
do {
printf("Czekam\n");
InterruptWait(0,NULL);
printf("Przerwanie: %d \n",i);
InterruptUnmask (TIME_INT, res);
i++;
} while(i <10);
InterruptDetach(res);
printf("Koniec\n");
}
Przyk
ład 1-2 Obsługa przerwania zegarowego za pomocą zdarzenia
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 15
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
1.6 Własności czasowe systemu przerwań
Czas reakcji na zdarzenie jest jednym z kluczowych parametrów
systemów czasu rzeczywistego. Je
żeli zdarzenia obsługiwane są przez
przerwania, to czas reakcji na zdarzenie b
ędzie się wiązał z czasem
obs
ługi przerwań.
Parametry ilo
ściowe opisujące własności czasowe systemu czasu
rzeczywistego:
1. Czas opó
źnienia przerwania
2. Maksymalny czas opó
źnienia przerwania
3. Czas reakcji na przerwanie
4. Opó
źnienia szeregowania
Czas opó
źnienia przerwania (ang. interrupt latency)
Czas opó
źnienia przerwania T
il
definiujemy jako czas który up
ływa
pomi
ędzy wystąpieniem zdarzenia a rozpoczęciem jego obsługi.
Czas opó
źnienia przerwania zależy od następujących czynników:
1. Zablokowania przerwa
ń - przerwania w procesorze mogą być
chwilowo zablokowane przez inny w
ątek lub handler w celu ochrony
sekcji krytycznych.
2. Obs
ługi innych przerwań - kontroler przerwań może nie dopuścić do
przyj
ęcia przerwania gdyż przerwanie o wyższym priorytecie jest w
trakcie obs
ługi
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 16
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
w
ątek
procedura obs
ługi
przerwania
przerwanie
ostatnia instrukcja handlera
ISR
wznowienie przerwanego w
ątku
T
il
T
int
T
iret
T
r
Rys. 1-8 Opó
źnienie obsługi przerwania
Czas opó
źnienia przerwania zależy od aktualnego stanu systemu.
Przerwania w danym momencie czasu mog
ą być zablokowane lub też
nie. W zwi
ązku z tym definiuje się maksymalny czas opóźnienia
przerwania.
Maksymalny czas opó
źnienia przerwania (ang. worst case interrupt
latency)
Maksymalny czas opó
źnienia przerwania to czas opóźnienia przerwania
otrzymany dla najmniej korzystnego przypadku.
Czas ten jest sum
ą najdłuższego czasu w którym przerwania są
zablokowane T
d
i czasu T
c
potrzebnego na zachowanie kontekstu w
ątku
bie
żącego i uruchomienie handlera czyli T
il
= T
d
+
T
c
.
•
Czas T
c
zale
ży od sprzętu i jest zwykle niewielki (kilka cykli
zegarowych)
•
Czas T
d
zale
ży od maksymalnego czasu zablokowania przerwań i jest
cech
ą systemu operacyjnego.
W systemie operacyjnym czasu rzeczywistego najd
łuższy czas w
którym przerwania pozostaj
ą zablokowane T
d
powinien by
ć jak
najkrótszy.
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 17
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
Czas reakcji na przerwanie (
ang. response time)
Czas reakcji na przerwanie T
r
definiujemy jako czas który up
ływa
pomi
ędzy wystąpieniem przerwania a zakończeniem jego obsługi.
Czas T
r
jest sum
ą czasu opóźnienia przerwania T
il
i czasu
obs
ługi
przerwania
T
int
(T
r
= T
il
+ T
int
).
•
Czas opó
źnienia przerwania jest miernikiem jakości sprzętu i systemu
operacyjnego.
•
Czas reakcji na przerwanie uwzgl
ędnia dodatkowo złożoność
procedury obs
ługi urządzenia generującego przerwanie
Zdarzenia mog
ą być obsługiwane albo tylko przez handler albo przez
handler i w
ątek. W drugim przypadku na zakończenie działania swego
dzia
łania, handler może generować zdarzenie które odblokowuje
obs
ługujący te zdarzenie wątek.
w
ątek procedura obsługi
przerwania
przerwanie
generacja zdarzenia
ISR
odblokowanie w
ątku
obs
ługi przerwania
T
il
T
int
T
sl
w
ątek obsługi
przerwania
T
s
Rys. 1-9 Opó
źnienie szeregowania
Czas T
s
up
ływający pomiędzy wystąpieniem przerwania a rozpoczęciem
w
ątku obsługującego to przerwanie jest sumą trzech czasów T
s
= T
il
+
T
int
+ T
sl
. Czas T
sl
nazywany jest opó
źnieniem szeregowania.
PDF created with pdfFactory trial version
Jedrzej
Ułasiewicz Komputerowe systemy sterowania 18
Instytut Cybernetyki Technicznej Politechniki Wrocławskiej
Opó
źnienie szeregowania (ang. scheduling latency)
Opó
źnienie szeregowania jest czasem który upływa pomiędzy
wykonaniem ostatniej instrukcji procedury obs
ługi przerwania a
wykonaniem pierwszej instrukcji obs
ługującego przerwanie wątku.
Na czas ten sk
łada się
•
czas wykonania procedury szereguj
ącej
•
czas prze
łączenia kontekstu z wątku bieżącego do wątku
obs
ługującego przerwanie.
Procesor
Opó
źnienie
przerwania
[
µ
s]
Opó
źnienie
szeregowania
[
µ
s]
166 MHz Pentium
4.3
3.1
100 MHz Pentium
4.4
3.9
100 MHz 486DX4
5.6
8
33 MHz 386EX
22.5
26
Tabela 1-2 Niektóre parametry czasowe systemu QNX6 Neutrino
PDF created with pdfFactory trial version