Wywłaszczalne jądro
- Procesy czasu rzeczywistego (RT) w Linuxie – dwa rodzaje: Round Robin (RR)
i FIFO. Omówione szerzej w podpunkcie
Scheduler O(1) .
- RTOS (Real Time Operating System) - system operacyjny,
gdzie każde przerwanie na pewno zostanie obsłużone poniżej pewnego
limitu czasu (przy czym jest on zazwyczaj bardzo wyśrubowany).Są one używane
tam, gdzie nieraz niezbędna jest natychmiastowa reakcja
- Prawdziwe RTOSy - VxWorks, QNX, Windows CE
Kiedy to jest ważne - przykłady:
- Monitorowanie/nadzór nad urządzeniami w fabryce/elektrowni
- Przetwarzanie danych multimedialnych
- Modemy „zminimalizowane sprzętowo”, tzn. wykorzystujące procesor np. do
przetwarzania sygnałów analogowych na cyfrowe
- Gdy ktoś naprawdę szybko pisze na klawiaturze
J
Jak było, a jak jest:
- Wywłaszczenie procesów trybu użytkownika – od początków linuxa
- Wywłaszczanie procesów trybu jądra – do 2.4 nie było możliwe (bez łatek)
- Jądro nie jest wywłaszczalne, czyli jeżeli jakiś proces działa w trybie
jądra, to albo się musi skończyć, albo dobrowolnie zrzec się procesora. Nie da
się mu go zabrać
- Już na 2.4 były łatki robiące z Linuxa system niby-Real-Time
- Zainteresowanie nimi przyczyniło się do zaimplementowania wywłaszczalnego
jądra w 2.6. Jest to opcjonalne, w konfiguracji można wyłączyć
- Linux – jeszcze nie jest RTOS-em, wszystko jest na etapie poprawiania,
śrubowania osiągów. Gdy osiągamy czas reakcji na zdarzenie (nie wgłębiając się
w to, co to dokładnie znaczy) od kilkunastu do kilkuset mikrosekund, to możemy
powiedzieć, że nasz system działa na poziomie czasu rzeczywistego. Jest to
czas średni, w niektórych przypadkach zmieni się niewiele, ale w ogólności –
każdy poziom użytkowników powinien dostrzec poprawę w szybkości reakcji
(jakość interakcji) w 2.6
- Co trzeba zrobić? Zmniejszyć czas od pojawienia się zdarzenia
(przerwania), do momentu uruchomienia schedulera (on nigdy nie będzie
wywłaszczony, zresztą nie tylko on – również np. handlery przerwań)
- Jak to robić (zarys ogólny):
- Po wykonaniu procedury obsługi przerwania sterowanie może wrócić do
innego procesu
- Zmniejszamy rozmiar sekcji krytycznych (dodanie tzw. preemption points,
które dzielą nam sekcję na kilka części)
- Zwiększamy liczbę wywołań schedule() w różnych miejscach w kodzie
jądra
- Kawałki kodu, w których w żadnym razie nie chcemy dopuścić do
wywłaszczenia przez inny proces, umieszczamy pomiędzy specjalnymi
instrukcjami preempt_disable()
i preempt_enable().
- Zmieniamy wykorzystanie muteksów/ wirujących blokad
- Wywłaszczalność jądra poprawia czas obsłużenia aplikacji RT od kilkuset,
do np. 12-tu milisekund
- Szczególnie przydatne - przykłady, gdzie linux z wywłaszczalnym jądrem
byłby znacznie lepszy:
- „Ważne systemy” – np. zgłoszenie „Wyłącz reaktor NATYCHMIAST”
- Użytkownik – aplikacje multimedialne, np. oglądamy film, a jednocześnie
sprawdzamy pocztę, mamy uruchomioną mozillę, kadu i kilka innych rzeczy
- Wady - komplikuje kod jądra, jednak nieporównywalnie mniej niż w innych
systemach
Uwaga:
- W SMP nie można przerwać procesu, który korzysta z danych
prywatnych dla procesora, bo… jest niebezpieczeństwo, że zostanie on wznowiony
na innym procesorze. Co zrobić? Np. otaczamy kod funkcjami:
preempt_disable() i
preempt_enable()
Przykład - Monta Vista Linux – RT, zalety:
- Maksymalne opóźnienie (pre-emption latency) spada z setek
milisekund poniżej jednej msec, a średnie do kilkudziesięciu
mikrosekund
- Zmodyfikowany scheduler zapewnia, ze procesor zawsze wykonuje zadania
najwyższego poziomu
Wady:
- Nie ma standardów na ‘przerabianie na RTOS’, na pisanie patchy
- Te modyfikacje wymagają reimplementacji przy każdym updacie jądra
:/
Dokumentacja
powrót do strony głównej