Real Time – Linux

(Magdalena Anna Sagała)

 

Real Time System

Real Time system (system czasu rzeczywistego) to system, którego poprawność nie zależy jedynie od wyniku jego działania (skuteczności algorytmów) ale także od czasu/ momentu, w którym ten wynik został dostarczony.

Nie jest bowiem jedynie istotne przedstawienie wyniku. Dostarczona wartość musi być otrzymana w określonym przedziale czasowym. Mogłoby się wydawać , iż nie ma zbyt dużego zastosowania dla systemów RT. Jednak są one powszechnie spotykane w aplikacjach o zastosowaniach telekomunikacyjnych i multimedialnych.

Problemy czasu rzeczywistego pojawiają się gdy mamy w systemie wiele procesów, co wymaga podziału pracy procesora między poszczególne zadania. Klasyczne metody podziału czasu stosowane w Linuxie okazują się niewystarczające. Poszczególne zadania są identyfikowane przez:

System musi gwarantować, że wszystkie zadania zostaną wykonane przed ostatecznym terminem. Czasy wykonania muszą być przewidywalne, a preferowane są systemy, w których wariancja czasów wykonania zadania jest najmniejsza.

Systemy RT dzielą się na:

 

RT Linux – wprowadzenie

RT Linux został opracowany w Departamencie Informatyki w Instytucie Górnictwa i Technologii w Nowym Meksyku. Jego autorami są Viktor Yodaiken i Michael Barabanov.

Głównymi założeniami dla RT Linuxa było:

Przed wprowadzeniem RT Linuxa w celu użycia systemów RT należało korzystać z MS-DOSa i stworzyć wszystkie niezbędne sterowniki lub kupić system operacyjny czasu rzeczywistego.

Obecnie informatycy mają system operacyjny do tworzenia aplikacji czasu rzeczywistego w tym systemie, w którym miałyby one być wykonywane. Jest również dostępna wersja RT Linuxa na maszyny wieloprocesorowe. Usługi oferowane przez RT Linuxa są minimalne, gdyż nie jest konieczne dołączanie funkcjonalności nie wymaganej w celu utrzymania przewidywalności systemu.

RT Linux jest używany w wielu komercyjnych, przemysłowych oraz naukowych środowiskach:

 

RT Linux – architektura

RT Linux działa w specyficzny sposób. W celu wprowadzenia przewidywalności nie stosuje modyfikacji kernela Linuxa. Dzięki temu łatwo łączyć RT Linux z nowymi wersjami Linuxa. RT Linux polega na Linuxie w zakresie dostarczania prawie wszystkich usług. RT Linux zajmuje się jedynie niskopoziomowym tworzeniem procesów, procedurami obsługi przerwań oraz kolejkami do komunikacji pomiędzy różnymi procesami.

Patrząc na tę strukturę można odnieść wrażenie, że aplikacje RT Linux mają dwie charakterystyki – real-time i non-real-time. Funkcje umieszczone w tej pierwszej mogą spełniać stawiane im wymagania czasowe, jednak muszą być proste ponieważ udostępnione im zasoby są ograniczone. Funkcje nie będące funkcjami czasu rzeczywistego (non-real-time) mają pełen dostęp do różnych zasobów, jednak nie mogą mieć wymagań czasowych. Istnieje możliwość komunikacji pomiędzy zadaniami real-time i non-real-time.

Budowa RT Linuxa jest modularna. Do najistotniejszych modułów zalicza się:

 

RT Linux – działanie

Kernel Linuxowy działa na RT kernelu dzieląc procesor z innymi zadaniami czasu rzeczywistego. Precyzując, Linux jest traktowany jako zadanie i może wykonywać się jedynie przy braku zadań czasu rzeczywistego.

W związku z budową modułową planer (scheduler) może zostać zainstalowany lub usunięty automatycznie.

Nie jest zdumiewające, że system RT jest wolniejszy od zwykłego systemu operacyjnego. Może to wynikać min. z wyłączenia cachowania, w celu otrzymania przewidywalności systemu.

Standardowy planer z RT Linuxa traktuje Linuxa jako zadanie o niskim priorytecie. Jeżeli zadania RT zajmują cały czas procesora, wówczas Linux nie otrzyma procesora i można mieć wrażenie, że system się zawiesił.

 

RT Linux – przerwania

Warto zająć się sprawą przerwań. Kod kernela wyłącza przerwania w celu synchronizacji lub implementacji sekcji krytycznych. Jeżeli w momencie wyłączania następuje przerwanie zegarowe to zostanie ono zablokowane, co w rezultacie prowadzi do utraty precyzji. Działa tak większość unixo-podobnych systemów operacyjnych. Można zastosować dwa podejścia do tego problemu:

Linux używa makr „cli” oraz „sti” w celu implementacji włączania i wyłączania przerwań. W standardowym Linuxie owe makra wywołują odpowiednie instrukcje x86. RT Linux dokonuje zamian w tych makrach, aby zamiast wyłączania/ blokowania przerwań, gdy wykonywane jest „cli”, nastąpiło przekierowanie przerwania do kodu RT Linuxa. Jeśli przerwanie jest przerwaniem RT Linuxa to jest ono kontynuowane. Jeśli mamy do czynienia z przerwaniem Linuxa to odpowiednia flaga jest ustawiana. Gdy wykonywane jest „sti” wszystkie oczekujące przerwania Linuxa są wykonywane. W ten sposób Linux nie może ‘przerywać’ sobie, ale RT Linux może przerywać Linuxowi.

 

RT Linux – komunikacja pomiędzy zadaniami

Pod RT Linuxem jest tylko jedna metoda komunikacji – RT FIFO. Działanie jest podobne do unixowych PIPEs – komunikacja za pomocą strumienia danych bez struktury.

Istnieje ustalonej wielkości bufor , z którego można czytać i do którego można pisać. FIFO może być używane zarówno do komunikacji pomiędzy zadaniami RT, jak i pomiędzy zadaniami zwykłego Linuxa.

    1. rt_create – tworząca FIFO z podanym rozmiarem bufora. Od tego momentu możliwe będzie używanie /dev/rtfx;
    2. rt_destroy – zniszczenie odpowiedniego FIFO i realokacja pamięci;
    3. rt_fifo_put – próba zapisu do bufora. Jeśli jest zbyt mało miejsca zwracane jest –1;
    4. rt_fifo_get – czytanie z bufora. –1 jest zwracane w przypadku, gdy nie było do odczytanie ilości danych określonych w parametrze funkcji.

RT Linux jest prosty i dostarcza jedynie minimum funkcjonalności niezbędnej dla implementacji systemów czasu rzeczywistego. Ta prostota ma dwie podstawowe zalety:

 

Literatura