Systemy operacyjne czasu rzeczywistego

Mateusz Greszta

Na początek, najważniejsze jest rozróżnienie pojęć "system czasu rzeczywistego" i "system operacyjny czasu rzeczywistego".

System czasu rzeczywistego (ang. real-time system) zawiera wszystkie elementy -- hardware, system operacyjny oraz aplikacje, które są potrzebne aby spełnić odpowienie wymagania. System operacyjny czasu rzeczywistego (ang. real-time operating system) -- jest tylko jednym z elementów kompletnego systemu. Musi on dostarczać odpowiedniej funkcjonalności aby cały system mógł sprostać stawianym mu wymaganiom.

Cytując FAQ grupy dyskusyjnej comp.realtime:

System czasu rzeczywistego to taki, w którym poprawność obliczeń zależy nie tylko od logicznej poprawności samych obliczeń, ale także od czasu w jakim zostanie wyprodukowany wynik. Mówimy że system zawiódł, jeśli założenia czasowe nie zostały dotrzymane.

W systemach takich interesują nas scenariusze pesymistyczne, duże obciążenia zasobów. Kosztem średniej wydajności systemu i mocy obliczeniowej, polepsza się czasy w przypadkach pesymistycznych.

Systemy czasu rzeczywistego dzielą się na dwa rodzaje. Twarde systemy czasu rzeczywistego zawiodą jeśli któryś z limitów czasowych nie zostanie dotrzymany. Miękkie systemy czasu rzeczywistego mogą tolerować zauważalne odchylenia czasowe w usługach dostarczanych przez system operacyjny, takich jak przerwania, taktowanie czy planowanie.

Przy wyznaczaniu limitów czasowych mamy na myśli dwie rzeczy: opóźnienia obsługi przerwań sprzętowych (tzn. czas od momentu wystąpienia zdarzenia na urządzeniu do początku obsługi go przez sterownik), wahania (szumy -- ang. jitter) planisty (ang. scheduler). Tak więc proces czasu rzeczywistego może być uruchamiany jako odpowiedź na przerwanie sprzętowe, w określonym wcześniej momencie lub też cyklicznie, w stałych odstępach czasu (co niejako odpowiada reakcji na przerwania sprzętowego zegara czasu rzeczywistego).

Jakie są zastosowania systemów czasu rzeczywistego?
Ścisłe wymagania czasowe stawiamy wtedy, gdy zależy nam na jakości wykonywanych usług (ang. quality of service). Twarde dotrzymywanie terminów czasowych ważne jest między innymi w przemyśle precyzyjnym, robotyce, fizyce doświadczalnej. Na miękkie wymagania możemy sobie pozwolić np. w aplikacjach multimedialnych czy przy kontroli kukieł i zwierząt w filmach. Niedotrzymanie terminu czasowego może być zauważalne i znacznie pogarszające jakość, ale nie jest bardzo bolesne -- tzn. opóźnienia są mniej kosztowne, niż cena systemu o twardych wymogach czasowych.

Strona internetowa Real-Time Linuksa podaje dziesiątki zastosowań tego systemu. Jest on stosowany i sprawdza się właściwie w każdej gałęzi ludzkiej działalności. Pojawia się wszędzie tam, gdzie można usłyszeć słowa "komputer", "robot", "automatyka" -- nie omijając oczywiście szkół wyższych. RTLinux jest oczywiście systemem operacyjnym (a dokładniej RTLinux + Linux), ale to właśnie system operacyjny jest "sercem" systemu czasu rzeczywistego i to głównie od niego zależy spełnianie wymogów czasowych.

Systemy czasu rzeczywistego stosuje się w dziedzinach takich jak:

W systemach czasu rzeczywistego czas jest liczony z dokładnością do mikrosekund (us). W praktyce np. pesymistyczne opóźnienie obsługi przerwania przez RTLinux na komputerze PC 486/33MHz plasuje się poniżej 30 mikrosekund. Taktowanie 33MHz to ok. 1000 taktów na 30 us -- jest to więc bardzo blisko limitu sprzętowego.

Cała zabawa z RTLinuksem zaczęła się w Instytucie Technologii Nowego Meksyku jakieś 8-9 lat temu. Za ojca RTLinuksa uważany jest Victor Yodaiken wykładający wówczas na tym uniwersytecie. Razem ze studentami pracował on nad pierwszymi wersjami tego systemu (operacyjnego). Na początku 2000 roku Victor Yodaiken odszedł z uniwersytetu. Teraz w firmie FSM Labs zajmuje się wyłącznie pracą nad RTLinuksem. Firma ta oferuje kilka wersji tego systemu (podstawowa jest bezpłatna, oparta na licencji GPL) zależnie od wymagań użytkownika. RTLinux spełnia twarde wymogi systemu czasu rzeczywistego.

Pomysł na zamienienie Linuksa w system operacyjny czasu rzeczywistego jest bardzo prosty. (Pan Yodaiken chciał nawet swój pomysł opatentować -- cytując go: Pomysł wydaje mi się tak oczywisty, że albo ktoś wcześniej już to wymyślił, albo istnieje oczywisty powód, dlaczego to nie miałoby działać.) RTLinux był tworzony z myślą o prostocie. Jak twierdzi sam twórca:

RTLinux daje nam wewnętrzne środowisko pthreads, dzięki niemu możliwe było zintegrowanie POSIXowych wątków i wywołań sygnałów z istniejącym zbiorem operacji (np. sigaction). Dla programistów zaprzyjaźnionych z pthreadsami i POSIXowym programowaniem nie będzie trudne nauczenie się, jak pisać programy RTLinuksa. Nie powinno być też trudne przerobienie sterownika Linux aby pracował z RTLinux. Chodziło nam o to, żeby nie zmuszać użytkowników do programowania [jądra] Linuksa. Programista nie musi nawet znać struktury jądra Linuksa, aby pisać real-time'owe programy dla RTLinuksa.

Gigant taki jak Microsoft nie pozostaje oczywiście z pustymi rękoma. Oferuje on dwa systemy operacyjne "real-time". Jest to Windows CE .NET oraz Windows XP Embedded. Jak pisze sam Microsoft:

Windows CE .NET jest twardym systemem operacyjnym czasu rzeczywistego.

Natomiast Windows XP Embedded nie jest zasadniczo systemem operacyjnym czasu rzeczywistego, ale użytkownik może łatwo dodać do niego możliwości "real-time" optymalizując Windows XP Embedded tak, aby spełniał on real-time'owe wymogi używając dostępnych rozwiązań "3rd party".

Na rynku znajdują się też inne alternatywy dla RTLinuksa. GPLowe -- tak jak np. KURT oraz komercyjne -- czasami przewyższające możliwości RTLinuksa, ale wielu użytkowników wybiera właśnie jego ze względu na cenę i łatwość obsługi (gdzie "łatwość obsługi" jest rozumiana w sensie kosztu programistycznego).