Cyfrowa niezależność

Sterowanie zagnieżdżone: wielordzeniowe mikrokontrolery oraz oprogramowanie do wirtualizacji 

Wielordzeniowe mikrokontrolery oraz oprogramowanie do wirtualizacji sprawiają, że to, co do tej pory było niemożliwe w dziedzinie sterowania aplikacjami w czasie rzeczywistym, staje się jak najbardziej realne.

Jeszcze nie tak dawno budowanie cyfrowego systemu sterowania aplikacjami w czasie rzeczywistym było względnie proste. Wybierało się jakikolwiek system operacyjny czasu rzeczywistego (RTOS – Real Time Operating System), najczęściej taki, do którego czuło się „sentyment”, a następnie mikrokontroler, który spełniał określone warunki:

  • musiał być wspierany przez system operacyjny czasu rzeczywistego,
  • dysponować takimi cechami, jak: odpowiednia cena, oczekiwane osiągi, układy We/Wy,
  • mieć pamięć o parametrach wymaganych przez daną aplikację.

Następnie pisało się oprogramowanie aplikacyjne, które wykorzystywało cechy wybranego systemu operacyjnego czasu rzeczywistego w taki sposób, aby zagwarantować, że kontroler będzie robił to, co ma do zrobienia wtedy, kiedy ma to zrobić.
Biorąc pod uwagę nakład pracy inżynierów podczas projektowania systemów zagnieżdżonych oraz kontroli ruchu przy zastosowaniu technologii mikrokontrolerów wielordzeniowych oraz oprogramowania do wirtualizacji, nie jest już tak prosto, jak kiedyś. Jakkolwiek pod wieloma względami takie narzędzia czynią pracę łatwiejszą. Do zrozumienia tego paradoksu wymagana jest podstawowa orientacja w zagadnieniach dotyczących systemów operacyjnych czasu rzeczywistego, wielordzeniowości oraz wirtualizacji.
Zacznijmy od podstaw technologii systemów operacyjnych czasu rzeczywistego.
Zawsze na czas
Jak można przeczytać w Wikipedii: „System operacyjny czasu rzeczywistego (RTOS – Real-Time Operating System) został opracowany tak, aby spełnić wymagania narzucone na czas wykonywania zadanych operacji. Systemy takie stosuje się jako elementy komputerowych systemów sterowania pracujących w reżimie czasu rzeczywistego. (…) podstawowym wymaganiem dla systemu operacyjnego czasu rzeczywistego jest określenie najgorszego (najdłuższego) czasu, po jakim urządzenie komputerowe wypracuje odpowiedź po wystąpieniu zdarzenia. (…) System operacyjny czasu rzeczywistego jest ceniony bardziej za to, jak szybka i/lub przewidywalna może być odpowiedź na konkretne zdarzenie, niż za ilość pracy, jaką może wykonać w zadanym czasie.

Podstawowymi czynnikami systemu operacyjnego czasu rzeczywistego są zatem: minimalny czas reakcji na przerwanie oraz minimalny czas potrzebny na zmianę wątku”.
System czasu rzeczywistego umożliwia programowanie zadań o krytycznym zastosowaniu w środowiskach wielozadaniowych. W sytuacjach, w których nie występują liczne zadania rywalizujące o zasoby systemu komputerowego, wszystko wykonywane jest w czasie rzeczywistym. Tak się dzieje, kiedy pojawia się zdarzenie wymagające uwagi ze strony jednostki centralnej / procesora (CPU). Od chwili, w której jednostka centralna nie ma innych zadań, nic nie stoi na przeszkodzie, aby zdarzeniu temu poświęcona została uwaga CPU natychmiast po jego wystąpieniu.
W środowiskach wielozadaniowych, gdzie jednostka centralna musi przełączać się między licznymi czynnościami, czas rzeczywisty to bardzo ważne pojęcie. Kiedy pojawia się zdarzenie, które wymaga uwagi procesora, może on być aktualnie zajęty wykonywaniem innej czynności. To sprawia, że nie może reagować na zdarzenie w sposób natychmiastowy. Jednostka centralna musi w pewien sposób „odłożyć na bok” to, co aktualnie wykonuje i wrócić do tego po reakcji na zdarzenie, które wywołało przerwanie.
Przemysłowe systemy operacyjne czasu rzeczywistego obsługują przerwania oznaczające zdarzenia. Przerwanie jest sygnałem wysłanym przez zewnętrznego agenta, który podciąga linię przerwania jednostki centralnej do stanu wysokiego i (dla większości jednostek centralnych) utrzymuje ją w stanie wysokim, dopóki jednostka centralna nie potwierdzi przerwania. Oczekuje się odpowiedzi jednostki centralnej w zadanym czasie od wystąpienia przerwania (deadline).
Wirtualny świat
Systemy operacyjne (Operating Systems – OS) to programy, dla których sprzęt jest po prostu pękiem złożonym z kawałków wzorców definiujących swoje położenie w przestrzeni adresowej oraz danych aktualnie powiązanych z tym położeniem. Wirtualizacja zakłada, że oprogramowanie nie wie, skąd te wzorce pochodzą lub gdzie powinny być skierowane. Co więcej, nie jest to dla niego wcale ważne. Oprogramowanie po prostu radzi sobie z wzorcami, kiedy tylko się pojawiają.

Załóżmy, że posiadamy jeden bardzo szybki komputer, ale tak naprawdę potrzebujemy dwóch pecetów, które wcale nie muszą być zbyt szybkie. Moglibyśmy uruchomić system operacyjny Microsoft Vista na jednym z tych komputerów oraz system operacyjny czasu rzeczywistego Wind River’s VxWorks na drugim. Vista mogłaby współpracować z interfejsem HMI i automatycznie archiwizować dane w serwerze poprzez sieć Internet, podczas gdy VxWorks sterowałby procesami w czasie rzeczywistym. Jeśli nie chcemy kupować drugiego komputera, możemy użyć oprogramowania do wirtualizacji. Służyłoby ono do „klonowania” posiadanego szybkiego procesora, w efekcie czego zmieniłby się w dwa identyczne, choć nieco wolniejsze od pierwowzoru, procesory wirtualne.
Zaprojektowane w ten sposób oprogramowanie do wirtualizacji nazywane jest monitorem maszyny wirtualnej (hypervisor). Monitor ten wciśnięty jest pomiędzy sprzęt a instancje wielu systemów operacyjnych.
Z punktu widzenia sprzętu monitor maszyny wirtualnej odbierany jest jako typowy system operacyjny. Z kolei każdy system operacyjny  ma „wrażenie” obcowania ze sprzętem.
Monitor maszyny wirtualnej pełni następujące trzy funkcje:

  • Udostępnia sprzęt, włączając w to: procesor, pamięć, układy We/Wy; dla wielu systemów operacyjnych. Zapewnia również bezkonfliktową współpracę niekompatybilnych systemów operacyjnych. Monitor maszyny wirtualnej wspomaga operacje czasu rzeczywistego, które dzielą dostępne zasoby sprzętowe tak, żeby obsługiwać determinizm systemów operacyjnych czasu rzeczywistego.
  • Separuje systemy operacyjne, co ma znaczenie między innymi z punktu widzenia ochrony systemu i danych. W efekcie haker, który po włamaniu na serwer zobaczy interfejs użytkownika uruchomiony pod Vistą, nie będzie mógł sterować systemem uruchomionym pod nadzorem sytemu operacyjnego czasu rzeczywistego. Nawet jeśli obie aplikacje wykorzystują ten sam procesor.
  • Dostarcza bezpieczne procedury wymiany danych pomiędzy systemami operacyjnymi.

Należy zwrócić uwagę na termin instancji, który jest niezbędny, aby zrozumieć wirtualizację. Monitor maszyny wirtualnej może mieć wiele instancji tego samego systemu operacyjnego. Dla przykładu, możliwe jest ustanowienie wielu instancji systemów operacyjnych czasu rzeczywistego, każda wspierająca osobną pętlę sterowania. Można też jeden pulpit systemu operacyjnego podłączyć do Internetu, a na drugim uruchomić aplikacje biurowe w bezpiecznym środowisku. Haker penetrujący instancję połączoną z Internetem będzie w stanie narazić na szwank „jedynie” informacje powiązane bezpośrednio z tą instancją.
Monitor maszyny wirtualnej dostarcza firewalla do zabezpieczenia współdzielonych plików. Może on czyścić oprogramowanie niszczące system i zarażające instancję systemu operacyjnego poprzez zwyczajne kasowanie zawirusowanych instancji. Informacje dzielone z drugą instancją będą niezarażone. W celu ponownego połączenia się z Internetem uruchamiana jest nowa instancja systemu operacyjnego.

Monitor maszyny wirtualnej umożliwia poza tym mieszanie systemów operacyjnych czasu rzeczywistego z innymi systemami operacyjnymi. W takiej sytuacji monitor maszyny wirtualnej pracuje na potrzeby obsługi determinizmu systemu operacyjnego czasu rzeczywistego – nawet za cenę obniżenia osiągów innego systemu operacyjnego. To jest oczywista wartość dla inżynierów sterowania, których systemy często mają wiele jednocześnie uruchomionych zadań z zakresem wymogów deterministycznych.
Sprzęt wielordzeniowy 
Technologia mikrokontrolerów wielordzeniowych jest w pełni zintegrowaną wersją architektury wieloprocesowej. Sprzętowe rozwiązanie wieloprocesowości zawiera wiele jednostek centralnych dzielących przestrzeń pamięci. Taka technologia była stosowana przez dziesięciolecia w formie wielu procesorów wewnętrznie połączonych na poziomie płyty głównej, współdzielących układy We/Wy oraz zasoby pamięci. Na przestrzeni ostatnich kilku lat producenci elementów półprzewodnikowych dostarczają coraz bardziej zaawansowanych urządzeń, w które włożone są rdzenie jednostek centralnych na jednej matrycy.
Urządzenia o architekturze wieloprocesowej dzielą się na dwa typy: o symetrycznej wielozadaniowości (SMP) oraz o asymetrycznej wielozadaniowości (AMP). Urządzenia typu SMP używają wielu identycznych (np. symetrycznych) jednostek centralnych, podczas gdy urządzenia typu AMP używają różniących się jednostek centralnych. Najwięcej komercyjnie dostępnych urządzeń wieloprocesowych bazuje na architekturze symetrycznej. Architektura asymetryczna stosowana jest najczęściej w specyficznych aplikacjach. Trudno jest zatem produkować dużo tego typu urządzeń, a co za tym idzie, nie mogą one być tanie. 
Dwurdzeniowe urządzenia o architekturze symetrycznej, które mają dwa identyczne rdzenie jednostki centralnej zintegrowane w tym samym układzie scalonym, są powszechnie dostępne. Podobnie jak czterordzeniowe urządzenia o architekturze symetrycznej, które mają cztery identyczne rdzenie. Ostatnio Freescale Semiconductor wprowadził na rynek mikroprocesorowe urządzenia ośmiordzeniowe do zastosowań w aplikacjach komunikacyjnych. Inni producenci układów półprzewodnikowych przynajmniej wypowiadają się o produktach z większą (w niektórych przypadkach dużo większą) liczbą rdzeni. Być może najbardziej oczywistym zyskiem integracji wielordzeniowej jest efekt „ekologiczny”. Integracja N rdzeni jednostek centralnych na jednej matrycy pozwala na duży wzrost całkowitej prędkości (w przybliżeniu 0,8 N), bez zwiększania szybkości taktowania zegara.
Według Raya Simara, dyrektora rozwoju działu zaawansowanych architektur w Texas Instruments, trzyrdzeniowy procesor, z których każdy pracuje z częstotliwością 1 GHz, ma moc przetwarzania danych porównywalną z pojedynczym procesorem 3 GHz.
Technologia wielordzeniowa umożliwia także podzielenie zadania przetwarzania na kilka części. Dla przykładu, jeden rdzeń urządzenia wielordzeniowego może być przeznaczony do uruchamiania rygorystycznej pętli sterowania w czasie rzeczywistym, uwalniając inne rdzenie na rzecz mniej krytycznych czynności wielozadaniowych. Bez zdolności odseparowania pętli sterowania na dedykowany rdzeń pętla ta musiałaby rywalizować z innymi zadaniami o uwagę jednostki centralnej.
Wespół w zespół 
W czerwcu 2008 roku zadebiutował ośmiordzeniowy procesor o architekturze symetrycznej QorIQ P4080 firmy Freescale. Towarzyszące temu wydarzenia ilustrują wiele podejść do systemów operacyjnych czasu rzeczywistego, wirtualizacji i technologii wielordzeniowych – zjednoczonych celem udostępnienia inżynierom sterowania nowych opcji systemu i architektury. Firma Greek Hills Software zademonstrowała Multi IDE, które może debugować osiem rdzeni procesora Freescale, uruchomionego na systemie symulacyjnym Virtutech Simics. Demonstracja zawierała także system czasu rzeczywistego Greek Hills Integity z monitorem maszyny wirtualnej Padded Cell, który zarządza aplikacjami oraz klienckim systemem operacyjnym.
Virtutech zapowiedział możliwość hybrydowej symulacji do wspomagania wielu poziomów modelu abstrakcyjnego w ich środowisku symulacyjnym Simics. Z kolei Wind River Systems przedstawił autorskie oprogramowanie symulacyjne, dostarczające wsparcia do testowania układów scalonych dla systemów VxWorks oraz Linux na urządzenia wielordzeniowe. Aplikacji towarzyszył zestaw rozszerzający Eclipse-based Workbench, który pracuje na symulatorze Virtutech Simics.
Dla inżynierów sterowania trend ten oznacza, że nie będą już dłużej musieli dostosowywać aplikacji do ograniczeń sprzętu i oprogramowania. Będą niezależni w kreowaniu systemów wirtualnych z parametrami i charakterystykami takimi, jakie sobie założyli.
Jakkolwiek z wolnością przychodzi odpowiedzialność. Dysponowanie większymi możliwościami oznacza, że trzeba dokonywać większej liczby optymalnych wyborów. Inżynierowie sterowania będą musieli nauczyć się nowych technik i technologii tak, aby podejmować najlepsze decyzje.
C. G. Masi
Artykuł pod redakcją dra inż. Krzysztofa Jaroszewskiego, asystenta w Zakładzie Automatyki  Instytutu Automatyki Przemysłowej Zachodniopomorskiego Uniwersytetu Technologicznego