PROGRAMOWANIE SYSTEMÓW WBUDOWANYCH SCHEDULING Mariusz Rudnicki mariusz.rudnicki@eti.pg.edu.pl Programowanie Systemów Wbudowanych 1/40
SZEREGOWANIE ZAGADNIENIA Czym jest szeregowanie? W jakim celu stosuje się mechanizmy szeregowania? Algorytmy szeregowania w RT OS: QNX Neutrino, RT Linux, Windows CE. Szeregowanie zadań periodycznych i aperiodycznych. Niebezpieczeństwa związane z szeregowaniem. Programowanie Systemów Wbudowanych 2/40
SZEREGOWANIE Algorytm szeregowania (ang. scheduler - planista) to algorytm rozwiązujący jedno z najważniejszych zagadnień programowania systemów czasu rzeczywistego, a mianowicie w jaki sposób rozdzielić czas procesora i dostęp do innych zasobów tj. pamięć, zasoby sprzętowe, pomiędzy zadania, które w praktyce zwykle o te zasoby konkurują, aby dostęp do tych zasobów był sprawiedliwy i zapewniał terminowe wykonanie zadań krytycznych. Programowanie Systemów Wbudowanych 3/40
SZEREGOWANIE Implementacje algorytmu szeregowania mogą być różne: zazwyczaj moduł planisty umieszczony jest w jądrze systemu QNX Neutrino; może jednak być jednym ze zwykłych zadań, które dostarcza usług dla jądra. W niektórych systemach mogą istnieć różne algorytmy szeregowania dla zadań RT i non-rt. Algorytm szeregowania musi rozpatrywać wiele czynników: stan zadania (gotowość do wykonania); priorytet zadania; przeciwdziałać zagłodzeniu procesu. Programowanie Systemów Wbudowanych 4/40
SZEREGOWANIE Szeregowanie a wywłaszczanie Wymuszone oddawania kontroli wielozadaniowość z wywłaszczaniem. Dobrowolne oddawanie kontroli wielozadaniowość oparta na współpracy (rzadziej stosowana źle zaprojektowany proces może zdestabilizować system). Programowanie Systemów Wbudowanych 5/40
SZEREGOWANIE STANY WĄTKÓW Wątki posiadają dwa podstawowe stany: zablokowany: oczekuje na zdarzenie; istnieje wiele stanów blokowania w zależności od tego na co proces oczekuje np.: blokada REPLY proces oczekuje na odpowiedź IPC; blokada MUTEX proces oczekuje na mutex; blokada RECEIVE proces oczekuje na komunikat, gotowy: zdolny do użycia CPU; dwa podstawowe stany gotowości: RUNNING proces aktualnie używa CPU; READY proces oczekuje podczas gdy inny proces jest uruchomiony. Programowanie Systemów Wbudowanych 6/40
SZEREGOWANIE STANY WĄTKÓW Pozostałe stany wątków: DEAD wątek jest martwy, nie może być przywrócony do pracy, nigdy nie opuści tego stanu; STOPPED zatrzymany przez sygnał stop, nie będzie kontynuowany dopóki nie dostanie sygnału wznowienia. Programowanie Systemów Wbudowanych 7/40
SZEREGOWANIE PRIORYTETY Wszystkie wątki posiadają priorytety: priorytety są w zakresie od 0 (niski) do 255 (wysoki); mechanizm priorytetów tylko dla wątków w stanie gotowy; jądro zawsze wybiera wątek o najwyższym priorytecie i będący w stanie READY (pełne wywłaszczanie): stan wątku zmienia się na RUNNING, zablokowane wątki nawet nie są rozważane; większość wątków spędza najwięcej swojego czasu w stanie zablokowanym. Programowanie Systemów Wbudowanych 8/40
SZEREGOWANIE PRIORYTETY References: http://www.qnx.com/developers/docs/6.5.0sp1.update/index.html#com.qnx.doc.neutrino_sys_arch/kernel.html#schedu LING 9/40 Programowanie Systemów Wbudowanych 9/40
SZEREGOWANIE ALGORYTMY Algorytm karuzelowy ang. Round Robin: Każdemu procesowi przypisana jest szczelina czasowa ang. timeslice równa 4 x clock period. Clock period zależy od zegara CPU: 40 MHz > f CPU cp = 10 ms; 40 MHz f CPU cp = 1 ms. Wątek: po wykorzystaniu swojego kwantu czasu zostaje wydziedziczony; dobrowolnie oddaje zasoby procesora przed upływem interwału czasu; zostaje wydziedziczony przez proces o wyższym priorytecie. References: http://www.qnx.com/developers/docs/6.5.0sp1.update/index.html#com.qnx.doc.neutrino_sys_arch/kernel.html#scheduling Programowanie Systemów Wbudowanych 10/40
SZEREGOWANIE ALGORYTMY Algorytm sporadyczny ang. Sporadic scheduling: C initial budgetl; L Low priority; N Normal priority; T Replenishment period; R stan zablokowania; Max. liczba możliwych przeszeregowań wpływa na narzuty szeregowania sporadycznego; References: http://www.qnx.com/developers/docs/6.5.0sp1.update/index.html#com.qnx.doc.neutrino_sys_arch/kernel.html#scheduling Programowanie Systemów Wbudowanych 11/40
SZEREGOWANIE ALGORYTMY Algorytm sporadyczny ang. Sporadic scheduling wykorzystywany jest w sytuacji, gdy system reazlizuje Rate Monotonic Analysis (RMA) w celu zapewnienia obsługi procesów periodycznych i aperiodycznych. Dobrze zaprojektowanych system pozwala obsługiwać krytyczne zadania aperiodyczne z zachowaniem terminowego wykonania pozostałych zadań. Programowanie Systemów Wbudowanych 12/40
SZEREGOWANIE ALGORYTMY Algorytm FIFO ang. First In First Out: Wątek uruchomiony; Dobrowolnie zrzeka się kontroli; Zostaje wydziedziczony przez wątek o wyższym priorytecie. References: http://www.qnx.com/developers/docs/6.5.0sp1.update/index.html#com.qnx.doc.neutrino_sys_arch/kernel.html#scheduling Programowanie Systemów Wbudowanych 13/40
SZEREGOWANIE ALGORYTMY Adaptive partitioning: W wielu systemach zachodzi konieczność ochrony aplikacji lub grupy aplikacji przed wpływem innych programów. Statyczne partycje gwarantują procesom dostęp do zasobów wyspecyfikowanych przez konstruktora systemu: podstawowym zasobem branym pod uwagę jest czas CPU, pozostałe to współdzielone zasoby takie jak pamięć, przestrzeń plików (dysk lub flash). Programowanie Systemów Wbudowanych 14/40
SZEREGOWANIE ALGORYTMY Adaptacyjność partycji w QNX Neutrino polega na: możliwości zmiany konfiguracji w trakcie pracy; stałym rozmiarze w danym czasie; automatycznym dostosowaniu się do warunków pracy systemu, dla przykładu: wolny czas CPU jest redystrybuowany do innych partycji; systemy plików mogą rozliczać czas klienta w oparciu o mechanizm tymczasowego przenoszenia wątków pomiędzy partycjami. W związku z powyższym adaptacyjne partycjonowanie jest mniej restrykcyjne i bardziej wydajne w stosunku do innych algorytmów szeregowania. Programowanie Systemów Wbudowanych 15/40
SZEREGOWANIE ALGORYTMY Czym są adaptacyjne partycje? nazwanymi zbiorami reguł; regułami wybranymi do sterowania zachowaniem globalnych zasobów systemu; zbiorem reguł przypisanych danej partycji, które zarządzają działaniem procesów i wątków skojarzonych z tą partycją; Programowanie Systemów Wbudowanych 16/40
SZEREGOWANIE ALGORYTMY Adaptacyjne partycje zapewniają: ochronę pamięci każda z partycji jest dyskretna i sterowana przez jednostkę zarządzającą pamięcią ang. Memory Management Unit MMU; ochronę przed przeciążeniem każda partycja ma zagwarantowany przedział czasu, na wykonywanie powiązanych z nią zadań, wyspecyfikowany przez twórcę systemu; Programowanie Systemów Wbudowanych 17/40
SZEREGOWANIE ALGORYTMY Dlaczego stosujemy adaptacyjne partycje? W celu zapewnienia wydajności RT z gwarancją zapobiegania przeciążeniom. W systemach dynamicznych, statyczne partycję są nieefektywne. Przykład: statyczny podział czasu CPU pomiędzy partycje może prowadzić do marnowania tego zasobu i wprowadzać opóźnienia: jeżeli większość partycji jest wolna, a jedna bardzo obciążona, to obciążona partycja nie otrzymuje dodatkowego czasu CPU, a wątki tła w pozostałych partycjach marnują jego czas, jeżeli przerwanie zostało przypisane do partycji, musi ono poczekać, aż partycja ruszy. To może powodować nieakceptowalne opóźnienia szczególnie w sytuacji sekwencji przerwań. Programowanie Systemów Wbudowanych 18/40
SZEREGOWANIE ALGORYTMY Adaptacyjne partycje vs. Bezpieczeństwo Wiele systemów podatnych jest na ataki DoS ang. Denial of Service DoS w/o attack adaptive partitioning Programowanie Systemów Wbudowanych 19/40
SZEREGOWANIE ALGORYTMY Adaptacyjne partycje vs. Bezpieczeństwo Wiele systemów podatnych jest na ataki DoS ang. Denial of Service DoS with attack adaptive partitioning Programowanie Systemów Wbudowanych 20/40
SZEREGOWANIE ALGORYTMY Planista Adaptacyjnego partycjonowania ang. Adaptive partitioning thread scheduler został zaprojektowany aby rozwiązywać następujące problemy: gwarancji współdzielenia czasu procesora na wyspecyfikowanym minimalnym poziomie w czasie przeciążenia systemu; zapobieganiu monopolizacji systemu przez nieistotne lub niezaufane aplikacje. Programowanie Systemów Wbudowanych 21/40
SZEREGOWANIE ALGORYTMY Partitioning Technology projektant systemu: definiuje partycje dla mechanizmu priorytetowania; przypisuje wątki/procesy do poszczególnych partycji: proces/wątek potomny domyślnie zostaje umieszczony w partycji rodzica; określa minimalne % zużycie procesora dla każdej partycji. Programowanie Systemów Wbudowanych 22/40
SZEREGOWANIE RT LINUX Planista: ładowalny moduł RT Core; moduł stworzony przez użytkownika. Programowanie Systemów Wbudowanych 23/40
SZEREGOWANIE RT LINUX RMS Rate Monotonic Scheduling Algorithm domyślny algorytm szeregowania bazujący na statycznych priorytetach uwzględnia okres wykonywania zadania, krótszy okres zadania wyższy jego priorytet; algorytm optymalny w takim sensie, jeśli zadanie nie jest szeregowalne (nie będzie wykonane na czas) tym algorytmem, to nie będzie szeregowalne według żadnego innego algorytmu bazującego na statycznych priorytetach; Programowanie Systemów Wbudowanych 24/40
SZEREGOWANIE RT LINUX RMS Rate Monotonic Scheduling Algorithm wadą tego algorytmu jest niski limit szeregowalności 69,3%. Oznacza to iż w systemie, w którym zadania zużywają 70% czasu procesora, nie wszystkie zadania będą wykonane na czas. Programowanie Systemów Wbudowanych 25/40
SZEREGOWANIE RT LINUX EDF - Earliest Deadline First obecny algorytm szeregowania bazujący na dynamicznych priorytetach: im bliższy deadline, tym wyższy priorytet; zaletą tego algorytmu jest 100% szeregowalność zadań (teoretycznie); wadę stanowią narzuty związane z przeliczaniem priorytetów. Programowanie Systemów Wbudowanych 26/40
Szeregowanie RT LINUX Szeregowanie zadań nieokresowych algorytmy RMS i EDF nie gwarantują wykonania na czas zadań aperiodycznych inaczej zwanych sporadycznymi, czyli pojawiającymi się w dowolnym czasie; szeregowanie zadań aperiodycznych wykonywane jest przy użyciu następujących algorytmów: Slot shifting algorithms ; Slack Stealing algorithms. Programowanie Systemów Wbudowanych 27/40
Szeregowanie RT LINUX Szeregowanie zadań nieokresowych http://www.idt.mdh.se/utbildning/exjobb/files/tr1152.pdf Programowanie Systemów Wbudowanych 28/40
SZEREGOWANIE ZAKLESZCZENIA Inwersja priorytetów ma miejsce w sytuacji, gdy zadanie o wysokim priorytecie nie otrzymuje czasu procesora, pomimo tego iż powinno; Rozważmy sytuację, w której wysokopriorytetowy wątek oczekuje, aż niskopriorytetowy wątek zwolni zasób. Opóźnienie wynikające z tego faktu może być oszacowane i uwzględnione. Gorszy przypadek następuje wtedy, gdy pojawi się wątek średniopriorytetowy, który nie korzysta ze wspólnego zasobu. Wówczas wątek o średnim priorytecie wydziedziczy wątek o niskim priorytecie. Przez co wątek o wysokim priorytecie nadal pozostaje blokowany. Programowanie Systemów Wbudowanych 29/40
SZEREGOWANIE ZAKLESZCZENIA Inwersja priorytetów P. Majdzik - Programowanie współbieżne. Systemy czasu rzeczywistego Rys.9.4, str.271 Programowanie Systemów Wbudowanych 30/40
SZEREGOWANIE ZAKLESZCZENIA Inwersja priorytetów rozwiązania ICPP Immediate Ceiling Priority Protocol, PPP Priority Protected Protocol Dziedziczenie priorytetów polega na tym, że niskopriorytetowy wątek otrzymuje graniczny priorytet równy najwyższemu priorytetowi wątku, który oczekuje na zasób. Zapobiega to przejmowaniu zasobów procesora przez wątki o średnim priorytecie. Czy ciągle możliwe jest zakleszczenie? Programowanie Systemów Wbudowanych 31/40
SZEREGOWANIE ZAKLESZCZENIA Inwersja priorytetów P. Majdzik - Programowanie współbieżne. Systemy czasu rzeczywistego Rys.9.5, str.272 Programowanie Systemów Wbudowanych 32/40
SZEREGOWANIE ZAKLESZCZENIA Zakleszczenia ang. deadlock rozwiązania Rozważmy sytuację kiedy dziedziczny proces żąda dostępu do innego zasobu, który jest w użyciu przez inny proces o wysokim priorytecie. Programowanie Systemów Wbudowanych 33/40
SZEREGOWANIE ZAKLESZCZENIA Ceiling Semaphore Protocol pułap zasobów, inaczej mówiąc semafor zapewniający wyłączny dostęp do danego zasobu, jest równy najwyższemu priorytetowi zadania, które może przejąć zasób, plus jeden; Zgodnie z protokołem CSP poziom zadania, które zajmuje zasób jest równy pułapowi zasobu. Jest to rozwinięcie idei dziedziczenia priorytetów. Programowanie Systemów Wbudowanych 34/40
SZEREGOWANIE ZAKLESZCZENIA Rozważmy przypadek trzech procesów p1, p2, p3 o priorytetach p1>p2>p3. Pułap zasobu = 1. Programowanie Systemów Wbudowanych 35/40
SZEREGOWANIE ZAKLESZCZENIA Stack Resource Policy (SRP) zgodnie z szeregowaniem SRP zadanie nie może być rozpoczęte dopóki jego priorytet nie jest najwyższy z pośród aktywnych zadań lub poziom wywłaszczenia nie jest wyższy od pułapu systemowego; Poziom wywłaszczenia zadania Ti jest zdefiniowany jako Pi=1/Di gdzie Di czas do zakończenia zadania. Używając algorytmu SRP mamy pewność, że zadanie rozpoczęte nie zostanie zablokowane przed jego zakończeniem. Może zostać jednak wydziedziczone przez zadanie o wyższym priorytecie. SRP wykorzystuje wspólny stos do przechowywania parametrów wszystkich wykonywanych funkcji i zwracanych adresów. Programowanie Systemów Wbudowanych 36/40
SZEREGOWANIE ALGORYTMY cd. Inne algorytmy szeregowania: FCFS (first come, first serve) podobny do FIFO, bardzo słaba interaktywność systemu pojedynczy długi proces blokuje cały system, brak priorytetów nie ma możliwości wywłaszczenia; SJF (shortest job first) pierwsze najkrótsze zadanie, wada problem głodzenia długich procesów; Programowanie Systemów Wbudowanych 37/40
SZEREGOWANIE Szeregowanie Windows Embedded CE: Wątki o tym samym priorytecie szeregowane są algorytmem Round Robin; domyślny kwant czasu wynosi 100 ms, może być zmieniany przez projektanta systemu; 256 poziomów priorytetów; wątki o priorytetach 0 248 są priorytetami czasu rzeczywistego. Programowanie Systemów Wbudowanych 38/40
SZEREGOWANIE Szeregowanie Windows Embedded CE: Pozostałe wątki opisane są w następujący sposób: Programowanie Systemów Wbudowanych 39/40
SZEREGOWANIE Szeregowanie Windows Embedded CE: wątki o wyższym priorytecie, niższym numerze uruchamiane są w pierwszej kolejności; wątek o niższym priorytecie może zostać uruchomiony tylko w przypadku, gdy wszystkie wątki o wyższych priorytetach zakończyły działanie lub są zablokowane. wątki dla, których kwant czasu został ustawiony na 0 mają nieograniczony limit czasu, mogą zostać wydziedziczone przez wątek o wyższym priorytecie lub przez ISR; priorytety wątków są stałe wyjątek stanowi tu zjawisko dziedziczenia priorytetów; Programowanie Systemów Wbudowanych 40/40