[VYBRID] Realizacja systemów czasu rzeczywistego pod Linuksem

Kiedy zachodzi potrzeba realizacji systemu rzeczywistego, który spełnia ostre wymagania niskich opóźnień i przewidywalnego czasu reakcji lub bezpieczeństwa, można skorzystać z natywnych funkcji systemów operacyjnych Linux oraz Android.

 

 

Choć istnieje wiele rozszerzeń, dzięki którym Linux staje się alternatywą dla komercyjnych systemów operacyjnych czasu rzeczywistego, istnieje inne rozwiązanie. Zadania systemu można przekazać koprocesorowi czasu rzeczywistego, tym samym pozwalając procesorowi głównemu pracować z Linuksem, który nie musi spełniać żadnych wymagań czasu rzeczywistego czy bezpieczeństwa. Ten artykuł prezentuje sposób implementacji architektury koprocesora w pojedynczym układzie i opisuje najlepszy sposób podziału systemu.

 

Istotność kanału komunikacji

Wydaje się oczywiste, że architektura koprocesora musi zapewniać sprawną komunikację między dwoma procesorami. Dwie istotne cechy kanału komunikacji należy oceniać niezależnie: przepustowość kanału i jego opóźnienie.

Opóźnienie kanału to czas pomiędzy umieszczeniem wiadomości na jednym końcu, a powtórzeniem tej wiadomości na drugim końcu. Na opóźnienie składają się trzy zasadnicze czynniki, których efekty się sumują:

  • Czas utworzenia wiadomości i przetworzenia przez interfejs po stronie nadawcy
  • Czas przesyłu i odebrania wiadomości, na który składają się ograniczenia fizyczne i narzut protokołów
  • Czas, po którym wiadomość jest gotowa do odczytu po stronie odbiorcy

Przepustowość kanału to ilość danych, które można przesłać kanałem w określonym czasie. Zazwyczaj wyrażana jest w jednostkach kB/s lub MB/s. Jednak przepustowość silnie zależy od ilości transmitowanych danych. Narzuty na opakowanie pakietów przez protokoły słabo zależą od rozmiaru tych pakietów, zatem bardziej efektywne jest przesyłanie tak dużych pakietów, jak to możliwe. Przepustowość należy mierzyć w oparciu o spodziewane obciążenie generowane przez system. W przeciwieństwie do opóźnienia, przepustowość jest zazwyczaj ograniczona tylko przez jeden element systemu, będący wąskim gardłem.

Zazwyczaj wąskie gardło stanowi sam system operacyjny lub aplikacja. Wykorzystanie wydajnego systemu zaprojektowanego z myślą o niskich opóźnieniach i dużej przepustowości pozwala zaoszczędzić projektantowi wiele wysiłku.

 

Jeden układ, dwa rdzenie ARM

Jedną z korzyści płynących z implementacji architektury koprocesora jako jednego układu jest, co oczywiste, możliwość uzyskania wysokiej szybkości komunikacji i niskich opóźnień między procesorami. Dzięki współdzielonemu, lecz kontrolowanemu dostępowi do peryferiów, otrzymane w ten sposób urządzenie zyskuje nowe możliwości, które pozwalają tworzyć proste, lecz wydajne systemy wbudowane.

Taka właśnie architektura została zrealizowana w rodzinie układów typu System-On-Chip Vybrid firmy Freescale. Urządzenia z tej serii zawierają rdzeń procesora ARM Cortex A5 – odpowiedni dla   typowego jądra Linuksa oraz ARM Cortex M4 – mikrokontroler dostosowany do pracy w czasie rzeczywistym i systemów bezpieczeństwa. Użytkownicy mogą przetestować i wykorzystać Vybrid dzięki zestawowi projektowemu TWR-VF65GS10 (rysunek 1).

 

Rys. 1. Zestaw projektowy TWR-VF65GS10 kompatybilny z systemem Freescale Tower

 

W układzie Vybrid komunikacja międzyprocesorowa jest realizowana przez moduł Multi-Core Communication (MCC). Zawiera on prosty w użyciu interfejs aplikacji (API), który wprowadza niski narzut i może zostać łatwo rozbudowany, aby obsługiwać dodatkowe systemy operacyjne i funkcje. Protokół został zrealizowany jako pamięć współdzielona, bez konwersji danych czy nagłówków pakietów. Aplikacje komunikują się ze sobą w trybie klient-serwer. Urządzenia Vybrid udostępnia również zaawansowane funkcje obsługi przerwań, pokazane na obrazku 2. W sumie Vybrid obsługuje 112 różnych źródeł przerwań. Spośród nich cztery są dedykowane komunikacji pomiędzy CPU – sygnalizują ważne zdarzenia i wzajemne powiadomienia rdzeni. Cztery dodatkowe przerwania są zarezerwowane dla debugowania CPU i obsługi semaforów.

Pozostałe 104 źródła są współdzielonymi przerwaniami peryferiów, którymi zarządza dedykowany router przerwań. Router pozwala przypisać każde ze źródeł do jednego lub dwóch rdzeni i jest kontrolowany przez program. Takie rozwiązanie pozwala projektantowi zmienić przypisanie peryferiów z jednego rdzenia do drugiego i jest znane pod nazwą hot reassignment.

Jeśli dynamiczne przypisanie nie jest potrzebne lub wręcz może powodować zagrożenie w systemach bezpieczeństwa, funkcję tę można zablokować.

 

Rys. 2. Procesor Freescale Vybrid typu System-On-Chip zapewnia w pełni konfigurowalną obsługę przerwań

 

O autorze