Systemy Czasu Rzeczywistego (SCR) Wykład 13: Elementy systemów operacyjnych czasu rzeczywistego (2/2) SKiTI2017 WYDZIAŁ ELEKTROTECHNIKI I AUTOMATYKI KATEDRA INŻYNIERII SYSTEMÓW STEROWANIA Kierunek: Automatyka i Robotyka Studia stacjonarne I stopnia: rok II, semestr IV dr inż. Tomasz Rutkowski 2017
Jądro systemu Szeregowanie zadań Scheduler Integralną i najważniejszą częścią jądra systemu SOCR jest program szeregujący scheduler Program szeregujący jest to zestaw algorytmów określających jakie zadanie będzie wykonywane jako następne oraz kiedy to nastąpi Większość systemów SOCR oparta jest na priorytetach każde zadanie ma przyporządkowany priorytet zależny od ważności zadania, w związku z tym czas CPU zostaje przydzielony do zadania, które jest gotowe i ma najwyższy priorytet 2
Jądro systemu Szeregowanie zadań Scheduler Przykłady algorytmów szeregujących zadania: o szeregowanie uwzględniające częstość wykonywania danego zadania - algorytm RMS (ang. Rate Monotonic Scheduling) o szeregowanie karuzelowe (ang. Round Robin Scheduling) o szeregowanie FIFO (ang. First In First Out Scheduling) o szeregowanie sporadyczne (ang. Sporadic Scheduling) o szeregowanie zegarowe (ang. Clock-Driven) 3
Jądro systemu Szeregowanie zadań model periodyczny (okresowy) Model zadań periodycznych (okresowych) zakłada deterministyczne obciążenie systemu i opisuje właściwości oraz zachowanie wielu klasycznych systemów hard real-time time (np. zadania sterowania cyfrowego). Zadania periodyczne mogą się pojawiać równocześnie (w tym samym czasie), przy czym nie może to zaburzyć normalnej pracy systemu. 4
Jądro systemu Szeregowanie zadań model periodyczny (okresowy) Każde zadanie opisują następujące parametry: o okres p : czas pomiędzy kolejnymi zdarzeniami wymagającymi obsługi o termin d : czas w którym zdarzenie musi być obsłużone, od momentu jego zajścia o czas t : czas potrzebny na obsługę zdarzenia (realizacja zadania) zadanie zadanie zadanie zdarzenie okres 1 okres 2 okres 3 zdarzenie zdarzenie 5
Jądro systemu Szeregowanie zadań model okresowy Pomiędzy parametrami p, d, t zachodzi relacja 0 t d p Stopień wykorzystania procesora jest równy u = t/p Warunkiem koniecznym wykonywalności szeregowania jest by suma stopni wykorzystania procesora była mniejsza równa jeden, Σu 1 Zadanie przekazuje swoje parametry t, d, p planiście (programowi szeregującemu), który podejmuje się wykonania zadania gwarantując dotrzymania terminu albo odrzuca zadanie 6
Założenia algorytmu RMS: Jądro systemu Szeregowanie zadań algorytm RMS 1. Wszystkie zadania są okresowe periodyczne (pojawiają się w regularnych odcinkach czasu) 2. Zadania nie synchronizują się miedzy sobą w trakcie współdzielenia zasobów i komunikacji 3. Procesor zawsze wykonuje zadanie o najwyższym priorytecie, które jest gotowe do pracy (powinien być wykorzystany system z wywłaszczaniem) 4. Procesy są szeregowane na podstawie statycznego priorytetu ustalanego zgodnie zasadą im krótszy okres zadania, tym wyższy priorytet 7
Jądro systemu Szeregowanie zadań algorytm RMS Przykład dwóch zadań o następujących parametrach: zadanie pierwsze Z1 : p = 50; d = 50; t = 20; zadanie drugie Z2 : p = 100; d = 100; t = 35; E1, E2 E1 E1, E2 E1 E1 zdarzenie wyzwalające zadanie Z1 E2 zdarzenie wyzwalające zadanie Z2 Z1 Z2 Z1 Z1 Z2 Z1 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 czas Całkowite obciążenie procesora: u = (20/50) + (35/100) = 0.75 8
Jądro systemu Szeregowanie zadań algorytm RMS Zakładamy chwilowo, że zadanie drugie ma większy priorytet od zadania pierwszego E1, E2 E1 E1, E2 Z2 Z1 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 czas Przekroczenie terminu!!! 9
Jądro systemu Szeregowanie zadań algorytm RMS Przykład dwóch zadań o następujących parametrach: zadanie pierwsze Z1: p = 50; d = 50; t = 25; zadanie drugie Z2: p = 80; d = 80; t = 35; E1, E2 E1 Przekroczenie terminu!!! Z1 Z2 Z1 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 czas Całkowite obciążenie procesora: u = (25/50) + (35/80) = 0.94!!! 10
Jądro systemu Szeregowanie zadań algorytm RMS Podstawowe twierdzenie RMS: Wszystkie solidne limity czasowe systemu SOCR będą zawsze spełnione jeżeli: 1 t i n n 2 1 i pi gdzie: n dany zestaw zadań z przypisanymi priorytetami RMS, t i maksymalny czas wykonania zadania i, p i okres wykonania zadania i, t i / p i część czasu procesora wymagana do wykonania zadania i. Zgodnie ze statycznym doborem priorytetów w algorytmie RMS, im krótszy okres zadania, tym wyższy jego priorytet. 11
Jądro systemu Szeregowanie zadań algorytm RMS Liczba Zadań 1 n n 2 1 1 1.000 2 0.828 3 0.779 4 0.756 5 0.743...... 0.693 Aby spełnić wszystkie limity czasowe systemu o solidnych wymaganiach czasowych w oparciu o algorytm RMS, wykorzystanie CPU przez wszystkie zadania krytyczne czasowo powinno być mniejsze niż 70 procent!!! Nadal można mieć zadania niekrytyczne czasowo, a więc wykorzystać 100 procent czasu CPU 12
Algorytm karuzelowy: Jądro systemu Szeregowanie zadań algorytm karuzelowy 1. Umożliwia współdzielenie czasu procesora przez zadania o takim samym priorytecie tzw. rotacja zadań 2. Określa się przedział czasu (ang. time slice) gdy zadanie się wykonuje, a następnie oddaje procesor zadaniu o takim samym priorytecie, które wykonuje się przez taki sam przedział czasu i oddaje procesor kolejnemu zadaniu o takim samym priorytecie 3. W przypadku wywłaszczenia zadania, w trakcie jego przedziału czasu, przez zadanie o wyższym priorytecie, po wykonaniu zadania o wyższym priorytecie zadanie to wykorzystuje pozostały należny mu czas procesora Algorytm przeznaczony do szeregowania zadań w środowisku zdominowanym przez zadania wykonywane współbieżnie 13
Jądro systemu Szeregowanie zadań algorytm FIFO Algorytm FIFO: 1. Jest podobny do algorytmu karuzelowego z tą różnicą, że zadanie nie jest wywłaszczane po wyczerpaniu pewnego przedziału czasu 2. Zadanie wykonywane jest aż do czasu gdy: samoistnie zwolni procesor zostanie wywłaszczone przez zadanie o wyższym priorytecie 14
Algorytm sporadyczny: Jądro systemu Szeregowanie zadań algorytm sporadyczny 1. Jest podobny do algorytmu karuzelowego z tą różnicą, że po wyczerpaniu przedzielonego zadaniu przedziału czasu, zadanie jest wywłaszczane i jego priorytet jest obniżany o 1 2. Jeżeli zadanie nie podejmie pracy w kolejnym, określonym przedziale czasu jego priorytet jest podwyższony o 1 3. Priorytet zadania nie może być podwyższony powyżej oryginalnego priorytetu zadania 4. Zadanie zawieszone uzyskuje swój dawny priorytet Algorytm przeznaczony do szeregowania zadań sporadycznych pojawiających się w środowisku zdominowanym przez zadania cykliczne 15
Algorytm zegarowy: Jądro systemu Szeregowanie zadań algorytm zegarowy 1. Decyzje, które zadania maja się wykonywać, podejmowane są z góry w ustalonych momentach czasu 2. Typowo wszystkie parametry zadań typu hard real-time są ustalone i znane 3. Najczęściej decyzje szeregowania podejmowane są periodycznie i sterowane hardware-owym zegarem zewnętrznym Algorytm przeznaczony do szeregowania zadań w środowisku zdominowanym przez zadania synchroniczne (cykliczne) zawierającym kilka aperiodycznych i sporadycznych zadań 16
Problemy związane z szeregowaniem zadań W systemach wielozadaniowych, prawie zawsze istnieje pewien podzbiór procesów uruchomionych w danej chwili, które oddziaływają na siebie. Źle zorganizowany współbieżny dostęp do tych samych zasobów, prowadzi do powstawania niespójności danych, w efekcie którego efektywność systemu może być dalece niezadowalająca. zjawisko zakleszczenia (ang. impas lub deadlock) zjawisko inwersji priorytetów (ang. priority inversion) 17
Zakleszczenie procesów Zbiór zadań znajduje się w stanie blokady (zakleszczenia), jeśli każde z nich jest wstrzymane w oczekiwaniu na zdarzenie, które może być wywołane przez jakieś inne zadanie z tego zbioru. Zadania są wstrzymane w oczekiwanie na dostęp do odpowiednich zasobów, które są wykorzystywane przez inne zadania. Z1 Zadanie żąda dostępu do R2 Z2 Zadanie żąda dostępu do Zasób należy do R3 R1 Zadanie żąda dostępu do Z3 Zasób należy do Zadania: Z1, Z2, Z3 Zasoby: R1, 18R2, R3
Zakleszczenie procesów (cd.) Algorytmy wykrywające zakleszczenie oparte są głównie o teorię grafów. W trakcie projektowania aplikacji należy zadbać o to by zadania sprawdzały czy to czego oczekują jest w danej chwili dostępne, a kiedy już nie korzystają z jakiś zasobów to powinny je zwolnić. Można również zasoby zorganizować w hierarchiczną strukturę i zaimplementować prosty model ich przydziału (protokół), np.: zadanie które uzyska dostęp do jakiegoś zasobu, w kolejnych krokach albo musi ten zasób zwolnić lub starać się tylko i wyłącznie o zasoby znajdujące się wyżej w hierarchii 19
Inwersja priorytetów Inwersja priorytetów występuje w przypadkach gdy zadania o różnych priorytetach wykorzystują te same zasoby (zasoby współdzielone). Ogólnie zjawisko inwersji priorytetów polega na tym, że zadanie o niskim priorytecie, zajmując zasób dzielony, zmusza zadanie o wyższym priorytecie do przejścia w stan wstrzymane i oczekiwania na zwolnienie tego zasobu. 20
Inwersja priorytetów (cd.) priorytet E2 INWERSJA PRIORYTETÓW E1 zdarzenie wyzwalające zadanie Z1 E2 zdarzenie wyzwalające zadanie Z2 wysoki Z2 Z2 Z2 wywłaszcza Z1 Z1 zajmuje zasób R1 Z2 blokuje się, bo zasób R1 zajęty przez Z1 Z1 zwalnia zasób R1, zatem Z2 wchodzi w stan gotowe I wywłaszcza Z1 Z2 zwalnia zasób R1 średni E1 niski Z1 Z1 t1 t2 t3 t4 t5 t6 t7 t8 czas Rozpatrujemy dwa zadania, zadanie o priorytecie niskim (Z1) i zadanie o priorytecie wysokim (Z2) korzystające z tego samego zasobu (R1) 21
Inwersja priorytetów (cd.) priorytet E2 INWERSJA PRIORYTETÓW E1 zdarzenie wyzwalające zadanie Z1 E2 zdarzenie wyzwalające zadanie Z2 E3 zdarzenie wyzwalające zadanie Z3 Z1 zajmuje zasób R1 wysoki Z2 Z2 średni E1 Z2 wywłaszc cza Z1 Z2 blokuje się, bo zasób R1 zajęty przez Z1 niski Z1 Z1 E3 Z3 wywłaszcza Z1 i zajmuje zasób R2 nieznany czas!!! Z3 Z3 się kończy i zw walnia zasób R2 Z1 Z1 się kończy i zwalnia zasób R1 zasób R1 Z2 się kończy i zwalnia czas t1 t2 t3 t4 t5 t6 t7 t8 Rozpatrujemy trzy zadania, zadanie o priorytecie niskim (Z1), zadanie o priorytecie wysokim (Z2) oraz zadanie o priorytecie średnim (Z3). Zadania Z1 i Z2 korzystają z tego samego zasobu (R1) a zadanie Z3 korzysta z zasobu (R2). 22
Inwersja priorytetów (cd.) Inwersja priorytetów prowadzi do wielu niebezpieczeństw, które w najgorszym wypadku mogą prowadzić do powstania w systemie sporych anomalii czasowych. Całkowite wyeliminowanie zjawiska inwersji priorytetów jest praktycznie niemożliwe. Metody eliminacji tego zjawiska wykorzystują różne modele sterowania dostępem do zasobów (protokoły), np.: - protokół wykorzystujący dziedziczenie priorytetów (może powodować zakleszczenia), - protokół pułapów priorytetu (całkowita eliminacja wystąpienia blokad), - różne modyfikacje powyższych. 23
Inwersja priorytetów rozwiązanie przez dziedziczenie priorytetów priorytet E2 INWERSJA PRIORYTETÓW E1 zdarzenie wyzwalające zadanie Z1 E2 zdarzenie wyzwalające zadanie Z2 E3 zdarzenie wyzwalające zadanie Z3 wysoki Z2 Z1 Z2 Z2 wywłaszcza Z1 Z1 zajmuje zasób R1 Z2 blokuje się, bo zasób R1 zajęty przez Z1, podniesienie priorytetu Z1 Z1 kończy się i zwalnia zasób R1, zatem Z2 wchodzi w stan gotowe I wywłaszcza Z1, które wraca do pierwotnego priorytetu Z1 Z2 kończy się i zwalnia zasób R1 zatem Z3 wchodzi w stan gotowe I wywłaszcza Z2 Z3 kończy się i zwalnia zasób R2 średni E1 niski Z1 E3 Z3 Z1 Z3 E1 Z1 Zasada jego działania polega na tymczasowym podnoszeniu priorytetu zadania, które zajmuje zasób dzielony, do najwyższego poziomu priorytetów zadań, które zgłaszają żądanie dostępu do tego zasobu. 24 t1 t2 t3 t4 t5 t6 t7 t8 czas
Inwersja priorytetów rozwiązanie przez pułap priorytetów priorytet Każdy zasób ma przypisany tzw. pułap priorytetów. Jego wartość jest określana przez najwyższy priorytet spośród zadań, które mogą o niego konkurować. Gdy zadanie zarygluje dostęp do takiego zasobu, jego priorytet jest zwiększany do wartości pułapu tego zasobu. Po zwolnieniu zasobu, zadanie ma przywracany priorytet do wartości początkowej. wysoki średni Z1 zajmuje za asób niski Z1 Z1 t1 t2 t3 t4 Z1 Z1 zwalnia za asób czas 25
Jądro systemu komunikacja pomiędzy zadaniami - model przesyłania komunikatów komunikat Klient Serwer odpowiedź Fazy przesłania komunikatu: 1. Wysłanie komunikatu od procesu klienta do procesu serwera. Proces klienta zostaje zablokowany a komunikat odblokowuje proces serwera (o ile był zablokowany ) 2. Serwer przetwarza komunikat i przesyła odpowiedź do klienta. 3. Proces klienta po otrzymaniu odpowiedzi ulega odblokowaniu. Większość SOCR oparta jest o modelu przesyłaniu komunikatów typu klient-serwer 26
Jądro systemu komunikacja pomiędzy zadaniami - Semafory (binarny, ogólny) To jedne z obiektów umożliwiających wzajemne wykluczanie oraz synchronizację zadań. 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. Operacje na semaforach, umożliwiające wstrzymanie i wznowienie procesów: - czekaj: to operacja opuszczająca semafor, zmniejsza jego wartość o jeden (semafor może mieć wartości nieujemne), - sygnalizuj: jest operacją zwiększającą wartość semafora o jeden, logicznie odpowiada operacji podniesienia semafora Semafory są globalne : dowolny proces może je opuszczać albo podnosić 27
Jądro systemu komunikacja pomiędzy zadaniami - muteksy Muteksy (ang. mutual exclusion semaphores), stanowią szczególny rodzaj semaforów binarnych. Muteks może być zablokowany (ma wartość 1) lub odblokowany (ma wartość 0). Jedną z cech muteksów jest zasada posiadania. Zasada posiadania polega na tym, że jeśli jakieś zadanie zablokuje muteks (nada mu wartość 1), to tylko ono może ten muteks odblokować (nadać mu wartość 0). Zapobiega to sytuacji, w której jedno z zadań wykona operację czekaj aby synchronizować dostęp do jakiegoś zasobu, a później inne zadanie niezwiązane logicznie z tym zasobem, podniesie semafor (potencjalny problem niespójności danych przy wykorzystywaniu jedynie semaforów) 28
Jądro systemu komunikacja pomiędzy zadaniami - zmienne warunkowe Zmienne warunkowe również służą do synchronizacji zadań. Zmienne warunkowe pozwalają wielokrotnie wstrzymywać wykonanie jakiegoś zadania, aż żądany warunek zostanie spełniony. 29
Jądro systemu komunikacja pomiędzy zadaniami kolejki komunikatów Kolejki komunikatów, to inteligentne bufory, które zazwyczaj działają w oparciu o algorytm pierwszy przyszedł, pierwszy został obsłużony (FIFO). - kolejki jednokierunkowe - kolejki dwukierunkowe 30
Wyjątki Wyjątek (ang. exception) jest to dowolne zdarzenie, które przerywa normalny tok obliczeń procesora i wymusza wykonanie określonego zbioru instrukcji w trybie uprzywilejowanym. Najogólniej można je podzielić na dwie grupy: synchroniczne i asynchroniczne. Synchroniczne są generowane przez tzw. zdarzenia wewnętrzne jak np. efekt wykonania jakiejś instrukcji procesora. Przykładami mogą być dzielenie przez zero lub niepoprawny odczyt z pamięci. Asynchroniczne (przerwania) są generowane przez tzw. zdarzenia zewnętrzne. 31
Przerwania Przerwanie (ang. interrupt, external interrupt) to tzw. wyjątki asynchroniczne i nie są powiązane z instrukcjami wykonywanymi przez procesor. Ich źródłem są wszelkie zdarzenia zewnętrzne, czyli odnoszą się do różnych sygnałów generowanych przez sprzęt. Przykładami mogą być wciśnięcie przycisku reset na płycie głównej lub sygnał urządzenia komunikacyjnego, które właśnie otrzymało pakiet z danymi. Można je podzielić na maskowalne, czyli takie, które można wyłączyć programowo oraz niemaskowalne, których nie da się zablokować. Przerwania niemaskowalne, są zazwyczaj połączone z procesorem przy pomocy specjalnego kanału komunikacyjnego i są obsługiwane natychmiast po ich wystąpieniu. 32
Czas Aby poprawnie mogły działać proces szeregujący zadania oraz same zadania czasu rzeczywistego, bardzo ważne jest precyzyjne odmierzanie czasu. Większość systemów wbudowanych dostarcza dwa rodzaje mechanizmów odmierzających czas (ang. timer): - timery oparte o rozwiązania sprzętowe (programowalne kontrolery czasu), - typowe rozwiązania programowe. 33
Bibliografia: [1] P.Szymczyk (2003). Systemy Operacyjne Czasu Rzeczywistego. Uczelniane Wydawnictwa Naukowo-Dydaktyczne, Kraków. [2] J.Ułasiewicz (2007). System czasu Rzeczywistego QNX6 Neutrino. Wydawnictwo BTC, Legionowo. [3] K.Lal, T.Rak, K.Orkisz (2003). RTLinux system czasu rzeczywistego. Helion, Gliwice. 34
Dziękuję za uwagę!!! 35