Poprzednia - Następna
Procesy czasu rzeczywistego (Real Time Tasks)
Procesy czasu rzeczywistego to programy zdefiniowane przez użytkownika,
które wykonują się zgodnie z podanym harmonogramem (mogą być okresowe,
zasypiać się na określony czas) mają ścisłe wymagania czasowe.
Procesy czasu rzeczywistego implementuje się jako ładowalne moduły jądra. Z
punktu widzenia RTLinuksa procesy RT to wątki jądra RT. Scheduler RTLinuksa
uważa, że jest tylko jeden prawdziwy proces, który ma wiele wątków. Jeden z
tych wątków jest wybierany do wykonania. Linux jest tylko jednym z wątków, ma
najniższy priorytet.
Proces i wątki
|
Procesy RT wykonują się we wspólnej przestrzeni adresowej - przestrzeni jądra.
Poprawia to znacznie przewidywalność:
- Procesy wykonują się w jednej przestrzeni adresowej, zatem przy
zmianie kontekstu nie trzeba unieważniać rejestrów TLB. Gdyby procesy
wykonywały się we własnej przestrzeni adresowej, przy każdej zmianie
kontekstu trzeba by unieważniać rejestry TLB, co przy częstym przełączaniu
kontekstu daje duże obniżenie wydajności.
- Przy wywołaniach systemowych nie trzeba zmieniać poziomu
uprzywilejowania.
- Przełączanie kontekstu jest łatwiejsze -- przełącza się tylko
kontekst sprzętowy: zachowuje się zawartość
rejestrów na stosie i zmienia wskaźnik stosu tak, żeby wskazywał nowy
stos nowego procesu. Przełączanie kontekstu jest programowe, a nie sprzętowe, bo
sprzętowe przełączenie kontekstu na procesorach i486 jest powolne.
- Program i jego dane nie podlegają stronicowaniu. Nie mogą zatem
zostać wysłane na dysk. Nie występują błędy braku strony, więc nie ma
opóźnień z tym związanych.
Powoduje to jednak pewne problemy: błąd w programie użytkownika, jakim jest
proces RT, może
spowodować załamanie się systemu. Pisanie programów RT wymagana takiego samego
natężenia uwagi, co programowanie jądra systemu operacyjnego.
Dodatkowym ograniczeniem nałożonym na procesy RT jest fakt, że ich zasoby
są definiowane statycznie. W
szczególności nie ma (w standardowym RTLinuksie) wsparcia dla dynamicznej alokacji
pamięci. W procesie RT nie można używać funkcji kmalloc ani vmalloc.
W nowszych wersjach RTLinuksa dostępny jest moduł mbuff, który umożliwia
korzystanie z dynamicznie alokowanej pamięci. Moduł ten został napisany przez
pana o swojsko brzmiącym nazwisku Tomasz Motylewski.
Poprzednia - Procesy czasu rzeczywistego (Real Time Tasks) - Następna