PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.3
Mariusz Rudnicki – [email protected]
Szeregowanie Omawiane zagadnienia
Czym jest szeregowanie?
W jakim celu stosuje się mechanizmy szeregowania?
Algorytmy szeregowania w RT OS:
QNX Neutrino,
RT Linux,
Windows CE.
Szeregowanie zadań okresowych i aperiodycznych.
Niebezpieczeństwa związane z szeregowaniem.
2/38
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.
3/38
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.
4/38
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).
5/38
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.
6/38
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.
7/38
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.
8/38
Szeregowanie – priorytety
9/38
References: http://www.qnx.com/developers/docs/6.5.0SP1.update/index.html#com.qnx.doc.neutrino_sys_arch/kernel.html#SCHEDULING
Szeregowanie – algorytmy
Algorytm karuzelowy ang. Round – Robin:
10/38
Każdemu procesowi przyporządkowana jest szczelina czasowa ang. timeslice równa 4 x clock period. Clock period zależy od zegara CPU: 40 MHz > fCPU – cp = 10 ms; 40 MHz ≤ fCPU – cp = 1 ms.
References: http://www.qnx.com/developers/docs/6.5.0SP1.update/index.html#com.qnx.doc.neutrino_sys_arch/kernel.html#SCHEDULING
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.
Szeregowanie – algorytmy Algorytm sporadyczny ang. Sporadic scheduling:
11/38
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
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ń.
12/38
References: http://www.qnx.com/developers/docs/6.5.0SP1.update/index.html#com.qnx.doc.neutrino_sys_arch/kernel.html#SCHEDULING
Szeregowanie – algorytmy
Algorytm FIFO ang. First In First Out:
13/38
References: http://www.qnx.com/developers/docs/6.5.0SP1.update/index.html#com.qnx.doc.neutrino_sys_arch/kernel.html#SCHEDULING
Wątek uruchomiony; Dobrowolnie zrzeka się kontroli; Zostaje wydziedziczony przez wątek o wyższym priorytecie.
Szeregowanie – algorytmy
Adaptive partitioning:
14/38
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).
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.
15/38
Szeregowanie – algorytmy
Czym są adaptacyjne partycje?
nazwanymi zbiorami reguł;
regułami wybranymi do sterowania zachowaniem globalnych zasobów systemu;
kiedy proces lub wątek skojarzony jest z daną partycją jego działania zarządzane są zgodnie z regułami tej partycji w danym czasie.
16/38
Szeregowanie – algorytmy
Adaptacyjne partycje dostarczają:
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;
17/38
Szeregowanie – algorytmy Dlaczego stosujemy adaptacyjne partycje?
w celu zapewnienia wydajności RT z gwarancją zapobiegania przeciążeniom;
ponieważ w systemach dynamicznych, statyczne partycję są nieefektywne;
Dla przykładu 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, dopóki wątki tła w pozostałych partycjach marnują czas CPU,
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ń.
18/38
Szeregowanie – algorytmy
Adaptacyjne partycje vs. Bezpieczeństwo
Wiele systemów podatnych jest na ataki DoS ang. Denial of Service
19/38
DoS attack w/o adaptive partitioning
Szeregowanie – algorytmy
Adaptacyjne partycje vs. Bezpieczeństwo
Wiele systemów podatnych jest na ataki DoS ang. Denial of Service
20/38
DoS attack with adaptive partitioning
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.
21/38
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.
22/38
Szeregowanie – RT LINUX
Planista: ładowalny moduł RT Core;
moduł stworzony przez użytkownika.
23/38
Task 1 – T1 = 50 ms, C1 = 25 ms. Task 2 – T2 = 100 ms, C2 = 40 ms.
Wykorzystanie procesora wyraża wzór 𝑈 =𝐶
𝑇
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;
24/38
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.
25/38
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ń;
wadę stanowią narzuty związane z przeliczaniem priorytetów.
26/38
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 ;
Stack Stealing algorithms.
27/38
Szeregowanie – RT LINUX
Szeregowanie zadań nieokresowych
28/38
http://www.idt.mdh.se/utbildning/exjobb/files/TR1152.pdf
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.
29/38
Szeregowanie
Inwersja priorytetów – rozwiązania
dziedziczenie priorytetów – polega na tym że niskopriorytetowy wątek otrzymuje priorytet wątku o najwyższym priorytecie, 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?
30/38
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.
31/38
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.
32/38
Szeregowanie – zakleszczenia
Rozważmy przypadek trzech procesów p1, p2, p3 o priorytetach p1>p2>p3. Pułap zasobu = 1.
33/38
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 𝑃𝑖 =
1
𝐷𝑖 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.
34/38
Szeregowanie – algorytmy
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;
35/38
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.
36/38
Szeregowanie
Szeregowanie Windows Embedded CE: Pozostałe wątki opisane są w następujący sposób:
37/38
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;
38/38
Top Related