Mariusz Rudnicki mariusz.rudnicki@eti.pg.edu.pl PROGRAMOWANIE WSPÓŁBIEŻNE I SYSTEMY CZASU RZECZYWISTEGO CZ.3
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/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. 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. 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). 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. 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. 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. 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#scheduling 9/40
Szeregowanie algorytmy Algorytm karuzelowy ang. Round Robin: 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 > 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 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 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ń. References: http://www.qnx.com/developers/docs/6.5.0sp1.update/index.html#com.qnx.doc.neutrino_sys_arch/kernel.html#scheduling 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 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). 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. 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ą; 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; 17/40
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 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ń. 18/40
Szeregowanie algorytmy Adaptacyjne partycje vs. Bezpieczeństwo Wiele systemów podatnych jest na ataki DoS ang. Denial of Service DoS attack w/o adaptive partitioning 19/40
Szeregowanie algorytmy Adaptacyjne partycje vs. Bezpieczeństwo Wiele systemów podatnych jest na ataki DoS ang. Denial of Service DoS attack with adaptive partitioning 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. 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. 22/40
Szeregowanie RT LINUX Planista: ładowalny moduł RT Core; moduł stworzony przez użytkownika. 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; 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. 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ń; wadę stanowią narzuty związane z przeliczaniem priorytetów. 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. 27/40
Szeregowanie RT LINUX Szeregowanie zadań nieokresowych http://www.idt.mdh.se/utbildning/exjobb/files/tr1152.pdf 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. 29/40
Szeregowanie zakleszczenia Inwersja priorytetów P. Majdzik - Programowanie współbieżne. Systemy czasu rzeczywistego Rys.9.4, str.271 30/40
Szeregowanie 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? 31/40
Szeregowanie zakleszczenia Inwersja priorytetów P. Majdzik - Programowanie współbieżne. Systemy czasu rzeczywistego Rys.9.5, str.272 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. 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. 34/40
Szeregowanie zakleszczenia Rozważmy przypadek trzech procesów p1, p2, p3 o priorytetach p1>p2>p3. Pułap zasobu = 1. 35/40
Szeregowanie zakleszczenia 36/40
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; 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. 38/40
Szeregowanie Szeregowanie Windows Embedded CE: Pozostałe wątki opisane są w następujący sposób: 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; 40/40