Poprzednia - Następna

Szeregowanie i rozdzielczość czasowa

Jak rozwiązano problem rozdzielczości jądra?

Standardowy timer w Linuksie zapewnia rozdzielczość rzędu 10 milisekund (na procesorach x86), a to jest za mało dla aplikacji real-time. W standardowym Linuksie timer jest programowany tak, żeby generować przerwania w stałych odstępach czasu (100 razy na sekundę). Czas pomiędzy tyknięciami to minimalna rozdzielczość czasowa systemu. Nie można w systemie obsługiwać zdarzeń o częstotliwości większej niż 100 Hz.

RTLinux zrezygnował z przerwań w stałych odstępach czasu. Zamiast tego w czasie obsługi przerwania ustalany jest czas, kiedy ma nastąpić kolejne (tylko jedno!) tyknięcie zegara. (Taki timer nosi nazwę one-shot). W celu osiągnięcia takiego efektu używa się programowalnego timera, który jest dostępny we wszystkich procesorach kompatybilnych z IBM PC - układu 8354. Układ ten został przełączony w specjalny tryb interrupt-on-terminal-count. W tym trybie chip 8354 generuje jedno przerwanie po ustalonym czasie. Przy każdym przerwaniu timer jest przeprogramowywany i ustalany jest czas następnego przerwania. Przerwanie może być ustalone z precyzją rzędu 1 mikrosekundy.

Takie rozwiązanie powoduje jednak pewne problemy:

Scheduler

Scheduler to zazwyczaj duży i złożony kawałek kodu, którego nie da się zmienić. W RTLinuksie jest inaczej, użytkownik może nawet napisać własny scheduler. Scheduler może zostać zaimplementowany jako ładowalny moduł do jądra, dodawany lub usuwany na żądanie. Daje to możliwość łatwego eksperymentowania z różnymi algorytmami szeregującymi i szukania takiego, który najlepiej spełnia nasze oczekiwania.

Scheduler RTLinuksa jest bardzo prosty. Każdy proces RT ma przypisany pewien priorytet (scheduler oparty na priorytetach - priority-based). Linux jest procesem o najniższym priorytecie.

Działanie schedulera:


Poprzednia - Szeregowanie i rozdzielczość czasowa - Następna