Systemy wbudowane
Transkrypt
Systemy wbudowane
Systemy wbudowane Systemy operacyjne czasu rzeczywistego Definicje System czasu rzeczywistego to taki, w którym wynik przetwarzania nie zależy tylko i wyłącznie od jego logicznej poprawności, ale również od czasu, w jakim został osiągnięty. Jeśli nie są spełnione ograniczenia czasowe, mówi się, że nastąpił błąd systemu. System mikrokomputerowy działa w czasie rzeczywistym, jeżeli wypracowane przez ten system decyzje są realizowane w tempie obsługiwanego procesu. Inaczej mówiąc, system działa w czasie rzeczywistym, jeżeli czas reakcji systemu jest niezauważalny przez proces (decyzja jest wypracowana we właściwym czasie) Systemy operacyjne czasu rzeczywistego dzielimy na: ● Rygorystyczne ● Łagodne Systemy rygorystyczne Rygorystyczne (twarde, ang. Hard real - time systems) - gwarantują terminowe wypełnianie krytycznych zadań. Osiągnięcie tego celu wymaga ograniczenia wszystkich opóźnień w systemie, poczynając od odzyskiwania przechowywanych danych, a kończąc na czasie zużywanym przez system na wypełnienie dowolnego zamówienia. Takie ograniczenia czasu wpływają na dobór środków, w które są wyposażane rygorystyczne systemy czasu rzeczywistego. Wszelkiego rodzaju pamięć pomocnicza jest na ogół bardzo mała albo nie występuje wcale. Wszystkie dane są przechowywane w pamięci o krótkim czasie dostępu lub w pamięci, z której można je tylko pobierać (ROM). Systemy łagodne Łagodne(miękkie, ang. Soft real - time systems) - są mniej wymagające. W nich krytyczne zadanie do obsługi w czasie rzeczywistym otrzymuje pierwszeństwo przed innymi zadaniami i zachowuje je aż do swojego zakończenia. Podobnie jak w rygorystycznym systemie czasu rzeczywistego opóźnienia muszą być ograniczone - zadanie czasu rzeczywistego nie może w nieskończoność czekać na usługi jądra. Schemat SOCR Systemy rzeczywiste a systemy wbudowane Nie wszystkie systemy wbudowane zawierają cechy systemów czasu rzeczywistego, jak i również nie wszystkie systemy czasu rzeczywistego są wbudowane. Jednakże oba te typy systemów nie stanowią zbiorów rozłącznych. Ich część wspólna, to wbudowane systemy czasu rzeczywistego. Cechy SOCR - ciągłość działania (stany oczekiwania na wystąpienie zdarzenia) zależność od otoczenia - współbieżność - przewidywalność - punktualność - uzależnienie pracy systemu mikrokomputerowego od wymagań czasowych obiektu - niezawodność - zapewnienie bezpiecznej pracy obiektu w przypadku awarii Budowa SOCR - jądro(czasami utożsamiane jest z całym SO) systemu zawiera właściwe mechanizmy systemowe – zarządzają one systemem plików, planują przydział procesora, zarządzają pamięcią - interfejs programów użytkowych określa sposób odwoływania się do systemu operacyjnego z poziomu wszystkich programów (użytkownika, programów systemowych tworzących powłokę) - powłoka – jest modułem wymiennym i realizuje prosty interfejs użytkownika oraz niektóre polecenia systemowe - programy systemowe i użytkowe są dostarczane łącznie z jadrem SO - najniższą warstwą są programy obsługi sprzętu zawierające procedury bardzo niskiego poziomu Funkcje SOCR Aby prawidłowo zarządzać procesami, systemy czasu rzeczywistego muszą realizować następujące funkcje : - tworzenie i usuwanie procesów użytkowych - wznawianie i wstrzymywanie procesów - synchronizację procesów - komunikację miedzy procesami - obsługę blokad Zdarzenia w SOCR System operacyjny czasu rzeczywistego musi odpowiednio zareagować na różne typy zdarzeń i w przeciwieństwie do zwykłych systemów musi być tak samo stabilny przed i po ich obsłużeniu. Rodzaje zdarzeń : - zdarzenia zewnętrzne – sygnalizowane przez przerwania zgłaszane przez zewnętrzne urządzenia współpracujące - zdarzenia czasowe czyli sygnalizowane przez systemowy program obsługi zegara rejestrujący upływ zadanego czasu kontrolnego T - zdarzenia wewnętrzne czyli sygnalizowane przez przerwania generowane przez odpowiednie elementy komputera np.: koprocesor arytmetyczny w przypadku popełnienia błędu -zdarzenia programowe czyli generowane jawnie odwołania wykonywanych zadań do systemu operacyjnego Zadania w SOCR Zadanie - fragment programu którego wykonanie jest wymuszone przez zdarzenie np.: działanie zegara czasu rzeczywistego, obsługa przerwania. Cechą SOCR jest stałe, ściśle określone ograniczenie czasowe nałożone na wykonywane zadanie. Jeśli aktualne zdanie musi czekać na zakończenie danej operacji, to system może przejść do wykonywania następnego zadania, a następnie powrócić do zadania pierwotnego. Zadania mogą znajdować się w różnych stanach: - zadanie wykonywane - zadanie zawieszone - zadanie w stanie oczekiwania - zadanie bez przydzielonych zasobów Budowa SOCR Najniższe dwie warstwy to sprzęt oraz zbiór sterowników (BSP). Później jest jądro systemu oraz szereg modułów jak np. system plików, podsystem wejścia - wyjścia, dodatkowe sterowniki, protokoły sieciowe oraz komponenty wspierające tworzenie aplikacji. Na samym szczycie powyższej hierarchii, uruchamiane są aplikacje użytkownika. Jądro SOCR Mikrojądro, to komponent dostarczający minimalną liczbę usług. jak np. tworzenie lub usuwanie zadania, alokowanie i dealokowanie potrzebnej pamięci, dostarczenie kolejek komunikatów itp. Klient ma dostęp do tych obiektów poprzez różne interfejsy, jak np. API. Najczęściej jest implementowane w języku niskiego poziomu (np. assembler). co sprawia, że jego przenośność jest ograniczona tylko i wyłącznie do konkretnego typu procesora. Nie jest to jednak ogromny problem, gdyż cała reszta systemu jest implementowana w językach jak np. C++ i przeniesienie całości z jednej platformy na inną, wiąże się tylko i wyłącznie z przepisaniem tych najbardziej podstawowych usług. Mechanizmy jądra Przydzielają czas systemu dla poszczególnych zadań programu użytkowego: - obsługa priorytetowa zadań z wywłaszczeniem. Zaleta: czas miedzy zdarzeniami wewnętrznymi, a wykonywaniem zadania o największym priorytecie jest ściśle określony i spełniony. Wada: w przypadku zadań o niskim priorytecie może dojść do sytuacji są one wykonywanie bardzo rzadko. - obsługa cykliczna zdarzeń z wywłaszczeniem. Zaleta: wszystkie zadania mają ten sam priorytet oraz własny maksymalny czas wykonania. Wada: nie ma możliwości zagwarantowania natychmiastowej obsługi zgłoszonego zdarzenia zewnętrznego. ● Przydzielają pamięć dla poszczególnych zdań programu użytkowego (alokacja pamięci RAM przez zadanie). ● Mechanizmy jądra mechanizmy wymiany informacji między zadaniami oraz między zadaniami i zdarzeniami zewnętrznymi: - kolejki do wymiany informacji między zadaniami za pomocą komunikatów przekazywanych w ustalonych buforach danych - gniazda do wymiany informacji między zadaniami, a systemami zewnętrznymi za pomocą standardowych protokołów sieciowych - semafory do synchronizacji pracy zadań, uzależnienie wykonywania danego zadania od wyników pracy innego zdania (operacja binarna) - sygnały do wymiany informacji między zdarzeniami zewnętrznymi , a wykonywanymi zadaniami (obsługa przerwań) - wspólna pamięć od korzystania ze wspólnych struktur danych przez wiele zadań ● Mechanizmy dostępu do układów peryferyjnych (sterowniki urządzeń) – sterowniki urządzeń mogą kontaktować się z zadaniami tylko za pośrednictwem kilku standardowych funkcji ● Szeregowanie zadań Jeśli właściwości kontrolowanego systemu mogą zostać określone z góry, to rodzaj i kolejność podejmowanych działań są określone przed rozpoczęciem wykonywania procesu. Wówczas stosuje się tzw. szeregowanie statyczne Niestety, kontrolowane procesy okazują się o wiele bardziej złożone, a środowiska w jakich najczęściej się wykonują, charakteryzuje niepewność. Istnienie elementów stochastycznych sprawia, że powstają także systemy z szeregowaniem dynamicznym Najważniejszą częścią jądra każdego systemu czasu rzeczywistego, jest tzw. program szeregujący (ang. scheduler). Dostarcza on algorytmów określających, jakie zadanie czy proces ma przejąć procesor oraz kiedy ma to nastąpić. Pozwala to na stworzenie wielozadaniowości (ang. multitasking). Algorytmy wywłaszczania z priorytetami Algorytm opiera się tylko o zestaw priorytetów, określających poziom ważności. Ich interpretacja oraz zakres zależą od konkretnej implementacji. Ogólna zasada polega na tym, że jeśli w danej chwili jest jednocześnie kilka zadań gotowych do uruchomienia, to wybierane jest to o najwyższym priorytecie. Jeśli natomiast, w czasie obliczeń, pojawi się zadanie o wyższym priorytecie od aktualnie wykonywanego, to wówczas scheduler przerywa je, zapisuje jego stan oraz oddaje procesor zadaniu ważniejszemu. Algorytm wywłaszczania z priorytetami i podziałem czasu procesora Każdemu zadaniu przydzielony został określony przedział czasowy. Zadanie nr 1, po przejęciu procesora, wykonuje się przez określony czas, po czym oddaje procesor kolejnemu. Oczywiście jeśli w dowolnej chwili pojawi się zadanie o wyższym priorytecie od aktualnego, to wówczas ono staje się bieżącym. Jeśli jest ono przez cały czas swoich obliczeń zadaniem najważniejszym, to wykonuje się aż do zakończenia i dopiero oddaje procesor, aby inne zadania mogły się dokończyć. Wywłaszczone zadanie nr 1, po przywróceniu jego stanu nie otrzymuje dodatkowego czasu. Jest ono wykonywane dalej tak, jakby przełączenie kontekstu w ogóle nie miało miejsca. Semafory Semafor, jest obiektem jądra, który może zostać zajęty przez jeden lub kilka wątków w celu sterowania dostępem do np. jakiegoś wspólnego zasobu. Każdy jest zdefiniowany przez swój unikalny numer, blok kontrolny zawierający dodatkowe dane, wartość (binarną lub wyliczeniową) oraz listę oczekujących zadań. Operacje: ● czekaj - to operacja opuszczająca semafor. Zmniejsza jego wartość o jeden. Pamiętać należy, że sam semafor jest liczbą nieujemną. Dlatego też operacja ta jest wykonywana tylko wtedy, gdy jest możliwa. ● sygnalizuj - jest operacją zwiększającą wartość semafora o jeden. Logicznie odpowiada operacji podniesienia semafora. Obie te operacje są niepodzielne, co oznacza, że w danej chwili może być wykonana tylko i wyłącznie jedna z nich. Raz rozpoczęte muszą się zakończyć. Odmierzanie czasu Rozwiązania sprzętowe. Realizowane są przez układy scalone, które w sposób bezpośredni przerywają obliczenia procesora oraz sygnalizują, że upłynął jakiś okres. Są one stosowane wszędzie tam, gdzie bardzo istotna jest precyzja. Programowalne kontrolery czasu określają częstotliwość impulsu wejściowego oraz zbiór programowalnych rejestrów. Częstotliwość generowanych przez nie przerwań jest funkcją odpowiedniego rejestru oraz sygnału wejściowego. Reszta rejestrów może określać inne cechy, jak np. czy odmierzanie ma być cykliczne oraz jest zależna od konkretnej implementacji. Rozwiązania programowe pozwalają bardzo wydajnie szeregować zadania, dla których można założyć pewne niedokładności jeśli chodzi o impulsy czasowe. Ich użycie składa się zazwyczaj z trzech podstawowych etapów: - instalacja zegara (uruchomienie odliczania) - podtrzymywanie zegara(np. odliczanie) - usunięcie zegara (zatrzymanie odliczania). Przykłady SOCR ● ● ● ● ● ● ● ● ● ● ● ● ● ● FlexOS FreeRTOS uCRTOS MicroC/OS-II eCOS QNX OS9 VxWorks LynxOS Phoenix-RTOS iRMX RT-Linux RTKernel DRYOS, i inne Przykłady zastosowań SOCR ● ● ● ● systemy sterowania procesów przemysłowych - nadzorowanie linii technologicznych, obrabiarek, robotów, układów napędowych itp. w urządzeniach telekomunikacyjnych i sieciowych w życiu codziennym: ● w aparatach cyfrowych, w samochodach, komputerach przenośnych, a także w systemach kina domowego i sekretarkach telefonicznych, ● w pralkach i zmywarkach, gdzie po zebraniu informacji z licznych czujników (jak stopień zabrudzenia wody), odpowiednio optymalizują przebieg programu. ● w zastosowaniach biurowych, jako funkcjonalna część urządzeń sieciowych jak np. przełączniki, routery, drukarki, modemy itp. w medycynie, fizyce, astronomii, wojskowości itp.