Linux a czas rzeczywisty
Wprowadzenie do systemów RT: RTLinux: KURT Linux: Slajdy: |
Architektura RTLinuksa(wszystkie podane czasy wykonania dotyczą procesora klasy Pentium III 800 MHz) Wielozadaniowy system operacyjny może szeregować procesy na jeden z dwóch sposobów:
W Linuksie, procesy mogą pracować w jednym z dwóch trybów: w przestrzeni użytkownika, wykonując własny kod, albo w przestrzeni jądra, wykonując funkcję systemową lub jakąś inną część kernela. Proces pracujący w przestrzeni jądra działa do czasu, aż postanowi się zatrzymać, ignorując timeslice'y i ważne wydarzenia. Jeśli ważniejszy proces staje się gotów do uruchomienia, nie może zostać uruchomiony, dopóki aktualny proces nie wydostanie się z trybu jądra. W pesymistycznym przypadku może to trwać nawet kilkaset milisekund (najczęściej czas ten jednak nie przekracza 16 ms). Istnieją patche na jądro pozwalające zmniejszyć ten czas do około 1 milisekundy, poprzez zwiększenie ilości miejsc, w których może nastąpić wydziedziczenie, w samym jądrze. W niektórych zastosowaniach nawet 1 milisekunda to zbyt długo. Poza tym, patche takie mają inne wady: komplikują kod kernela (każdy, kto go widział, wie, że to ostatnia rzecz, której ów potrzebuje), a poprawność programów pracujących w czasie rzeczywistym nadal jest bardzo trudna do udowodnienia. Rozwiązanie użyte w RTLinuksie jest zupełnie inne. Tak naprawdę, mamy tu doczynienia z dwoma systemami operacyjnymi: podstawowym jest RTCore, mały, wywłaszczający system czasu rzeczywistego. Zawiera same podstawowe funkcje - bez zaawansowanych, o niewiadomym czasie wykonania, takich jak na przykład cachowanie danych odczytanych z dysku czy dynamiczna alokacja pamięci. Pod jego kontrolą pracują procesy czasu rzeczywistego. Jednym z nich - o najmniejszym priorytecie, tak, jak Rozwiązanie to:
Przyjęte rozwiązanie oznacza, że procesy RT pracują w przestrzeni jądra. Ich ładowanie i wyładowywanie odbywa się dzięki systemowi modułów - każdy program RT to oddzielny moduł. Oznacza to w szczególności, że wadliwy program RT może zawiesić cały system operacyjny. Dość długo nie było to przez twórców uznawane za problem - jak mówi Yodaiken, "o ile aplikacji z powodu niewłaściwego wskaźnika nie uda się zatrzymać w porę 20-tonowej prasy hydraulicznej, to niewielka pociecha z tego, że system operacyjny będzie działał dalej" - ostatnio jednak dostrzeżona została potrzeba wątków RT wykonujących się w przestrzeni użytkownika i dano programom możliwość tworzenia ich. UWAGA: jako, że procesy RT mają wspólną przestrzeń adresową, słowa 'proces' i 'wątek' są w znajdujących się na tej stronie materiałach dotyczących RTLinuksa używane wymiennie. Jak mówi w jednym z wywiadów sam Yodaiken, "Kluczowymi dla RTLinuksa zasadami są: a) Linux nie może spowalniać komponentu RT, i b) komponent RT musi być prosty." RTLinux podzielony jest na moduły, podstawowy - zawierający kontroler przerwań i niewiele więcej - i opcjonalne: scheduler, kolejki FIFO działające w czasie rzeczywistym, POSIXowe operacje wejścia / wyjścia, timery i obsługę pamięci dzielonej. Rozwiązanie to umożliwia załadowanie jedynie tych modułów, które są naprawdę potrzebne - i, dzięki temu, zmninimalzowanie rozmiarów komponentu RT - oraz łatwą modyfikację RTLinuksa: o ile np chcemy zastąpić dostarczony scheduler własnym, wystarczy załadować inny moduł. |