W niektórych zastosowaniach konieczne jest zastosowanie planisty, dla którego można określić pesymistyczny czas reakcji po zajściu zdarzenia. Przykładem mogą być wszelkie systemy automatyki, sterujące urządzeniami na podstawie danych pomiarowych. Nie każdy system operacyjny ma zaimplementowane algorytmy dla procesów czasu rzeczywistego.
Zadania (procesy) w systemach operacyjnych można podzielić na następujące klasy (za [5]):
O klasie procesu decyduje najczęściej uruchamiający go użytkownik. Oczekuje się, że procesy zorientowane na obliczenia będą uruchamiane jak zadania wsadowe, jednak odstępstwa od tej reguły są dozwolone. Podobnie proces zorientowany na wejście-wyjście może zostać uruchomiony nie jako proces zwykły, lecz jako proces wsadowy, jeśli nie wymaga interakcji z użytkownikiem.
Tylko niewiele systemów operacyjnych może obsłużyć procesy ścisłego czasu rzeczywistego. Systemem takim jest np. QNX (zob. [7]).
Także w niewielu systemach istnieje wsparcie dla klasy ostatniej -- np. w systemach Linux (zob. [11]) i Digital Unix (zob. [5]) klasa ta nie występuje. Istnieją modyfikacje jądra Linuksa (łatki, ang. patches) wspierające dodatkową klasę zadań uruchamianych podczas wolnych cykli procesora zamiast procesu idle.2.2
Zgodnie ze specyfikacją POSIX 1003.1b Linux wspiera następujące algorytmy szeregowania:
W przypadku pierwszych dwóch klas (SCHED_RR
i SCHED_FIFO
)
proces znajduje się w jednej z kolejek priorytetowych. Proces wykonuje się,
gdy nie ma procesów o wyższych priorytetach gotowych do działania. Proces
może zostać wywłaszczony, gdy minie jego kwant czasu lub gdy obudzi się
proces o wyższym priorytecie. Jeśli użyty jest algorytm rotacyjny, to proces
przesuwa się na koniec listy związanej z kolejką, do której należy. Do
wykonania wybiera się pierwszy proces z kolejki. W algorytmie FIFO proces
pozostaje na początku kolejki i wykonuje się dalej, nawet jeśli są inne
procesy w jego kolejce.
W pracy badane są procesy należące do klasy SCHED_OTHER, a modyfikacjom podlega algorytm obsługujący tę klasę.