Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
statnice:bakalar:b4b35psr [2025/06/05 10:49] – [Rozvrhovací algoritmy pro systémy reálného času] offline partial dudactom | statnice:bakalar:b4b35psr [2025/06/10 18:59] (current) – [Bezpečnostně kritický software] added dudactom | ||
---|---|---|---|
Line 3: | Line 3: | ||
[[https:// | [[https:// | ||
+ | [[https:// | ||
* Rozvrhovací algoritmy pro systémy reálného času (online, offline, fixed-priority scheduling, EDF). Co je jejich vstupem a výstupem? Jaké jsou možnost kombinování real-time a obyčejných úloh a co nám různé možnosti garantují a co naopak ne (např. background scheduling, total-bandwidth server (TBS), constant utilization server (CUS))? | * Rozvrhovací algoritmy pro systémy reálného času (online, offline, fixed-priority scheduling, EDF). Co je jejich vstupem a výstupem? Jaké jsou možnost kombinování real-time a obyčejných úloh a co nám různé možnosti garantují a co naopak ne (např. background scheduling, total-bandwidth server (TBS), constant utilization server (CUS))? | ||
Line 27: | Line 27: | ||
V nejjednodušším případě lze tento přístup implementovat pomocí tabulky. Tento přístup je však paměťově náročný a přeprogramování časovače může být pomalé. | V nejjednodušším případě lze tento přístup implementovat pomocí tabulky. Tento přístup je však paměťově náročný a přeprogramování časovače může být pomalé. | ||
- | Druhý přístup představuje tzv. // | + | Druhý přístup představuje tzv. // |
+ | - Délka nesmí být kratší než maximální nutná doba ke zpracování libovolné podúlohy, aby nedocházelo k preempci: $$f> | ||
+ | - $f$ by též měla dělit tzv. hyperperiodu (perioda opakování celého rozvrhu) a tedy i alespoň jednu z period: $$ \Big\lfloor \frac{T_i}{f} \Big\rfloor = \frac{T_i}{f} $$ | ||
+ | - Stejně tak je třeba držet tuto délku co nejkratší se zachováním možnosti kontroly splnění deadlinu (tj. mezi vypuštěním podúlohy a jejím deadlinem musí být minimálně 2 frame) $$ 2f - gcd(T_i,f) \le D_i $$ | ||
- | (TODO) | + | příklad: |
+ | {{: | ||
+ | |||
+ | |||
+ | Pokud nemůže být splněna některá z podmínek, je možné řešit problém například rozdělením podúlohy a jejím plnění při volných výpočetních prostředcích: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Obecně je třeba pro rozvržení splnit tři kroky | ||
+ | * volba velikosti časového okna (frame size) | ||
+ | * rozdělení podúloh na do dílů | ||
+ | * přiřazení dílů do časových oken | ||
+ | |||
+ | Tyto volby nelze udělat nezávisle, ovšem k jejich učinění lze použít například max-flow grafový algoritmus. | ||
+ | (Vynechávám... kdyžtak v přednášce) | ||
+ | |||
+ | ** Cyklická exekutiva ** | ||
+ | Jde respektive o fancy název pro rozvrhovač spouštící "frame based" rozvrh. | ||
+ | V případě, že kombinujeme cyklickou exekutivu s OS, jde o úlohu/ | ||
+ | Problémy cyklické exekutivy jsou, že není schopna zabránit přetečení časové dotace podúlohy a nelze docílit preempce aperiodických podúloh. | ||
+ | |||
+ | ** Odezva aperiodických podúloh ** | ||
+ | Obecně, nemá smysl cílit na co nejdřívější splnění hard-RT podúloh, jelikož jejich plněním až po určité části aperiodické podúlohy můžeme doscílit dřívějšího splnění všech podúloh, tedy i lepší doby odezvy aperiodických podúloh. Tomuto způsobu přiřazování výpočetního času přezdíváme tzv. //Kradení rezervy// (angl. Slack stealing). | ||
+ | |||
+ | {{: | ||
Line 44: | Line 71: | ||
+ | ** Deadline driven rozvrhování ** - | ||
+ | |||
+ | Také jinak rozvrhování rozvrhování s dynamickou prioritou. Nejjednodušším příkladem je algoritmus **EDF** (Earliest deadline first) - vždy se vykonává podúloha s nejbližším termínem nejzaššího vykonání. Tento algoritmus je optimální za podmínek možnosti preempce podúloh a vyloučení zpoždění způsobeného sdíleným přístupem k paměti. | ||
+ | |||
+ | ** Kombinování RT a obyčejných úloh ** - | ||
+ | |||
+ | U systémů kombinujících RT a obyčejné úlohy se obecně snažíme dosáhnout jednoho cíle, tím je mechanismus rezervující zdroje na úrovní RT rozvrhovače. Pro systémy s cyklickým rozvrhovačem lze k tomuto kombinování použít zmíněné kradení rezervy. Pro rozvrhovače dynamické (resp. online) je tato úloha složitější. | ||
+ | |||
+ | První způsob jakým lze k úloze přistoupit je tzv. **Background scheduling**. Při něm jsou periodické úlohy rozvrhovány pomocí zvoleného algoritmu řízeného prioritou a aperiodické úlohy se vykonávají pouze tehdy, pokud v rozvrhu není připravena žádná periodická úloha. Stejně jako u kradení rezervy, můžeme odložit spuštění periodických úloh a nejprve spouštět aperiodické. Problém je, že implementace tohoto kroku je náročná z hlediska nutného výpočetního výkonu. | ||
+ | |||
+ | Druhou variantou je tzv. **Simple Periodic Server**, kde periodické úlohy rozvrhujeme znovu zvoleným algoritmem pracujícím s prioritou a aperiodické úlohy spouští tzv. // | ||
+ | |||
+ | Nevýhoodu tohoto " | ||
+ | |||
+ | Konkrétním příkladem // | ||
+ | |||
+ | - Na počátku $(t=0)$ je rozpočet $e$ nulový a deadline je na $d=0$. | ||
+ | - Vždy když dojde k vzniku nové aperiodické podúlohy s dobou vykonávání e a server je ve stavu idle, nejzašší termín vykonání je $d=max(d, | ||
+ | - Při dokončení podúlohy, pokud je připravena další úloha $d = d + \frac{e}{U}$ a $e$ je nastaveno na dobu vykonávání podúlohy. Pokud je server ve stavu idle, neděje se nic. | ||
+ | |||
+ | příklad: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | Druhým konkrétním příkladem je **Constant Utilization Server** (CUS). Ten uvedeme pouze okrajově, protože podle materiálů "The value of the CUS is not clear, and Liu does a terrible job arguing for it!" | ||
- | ** Deadline driven rozvrhování ** - EDF (TODO) | + | Pravidla pro konzumaci rozpočtu: |
+ | | ||
+ | - V čase $t$ je vypuštěna podúloha a server je ve stavu idle, pak (a) pokud $t<d$, tak nic (b) pokud $t \geq d, tak $d = t + \frac{e}{U}$ a doplní se rozpočet | ||
+ | - Při dosažení deadline (a) pokud je připravena další úloha $d = t + \frac{e}{U}$ a dochází k obnově rozpočtu, (b) pokud je server ve stavu idle, neděje se nic | ||
+ | |||
+ | příklad: | ||
- | ** Kombinování RT a obyčejných úloh ** - background scheduling, total-bandwidth server (TBS), constant utilization server (CUS) (TODO) | + | {{: |
===== Bezpečnostně kritický software ===== | ===== Bezpečnostně kritický software ===== | ||
+ | |||
+ | Popište proces vývoje bezpečnostně kritického software: | ||
+ | **fáze vývoje**- | ||
+ | |||
+ | (Dle MIL-STD-882E) | ||
+ | - Zdokumentujte jakým způsobem je dosažena bezpečnost | ||
+ | - Identifikujte a zdokumentujte hazardy | ||
+ | - Zhodnoťe a zdokumentujte rizika | ||
+ | - Identifikujte a zdokumentujte způsoby jak snížit jejich závažnost | ||
+ | - Snižte rizika | ||
+ | - Prověřte, validujte a zdokumentujte dosažená snížení rizik | ||
+ | - Akceptujte setrvávající rizika a zdokumentujte je | ||
+ | - " | ||
+ | |||
+ | |||
+ | **způsoby zmírňování nepřiměřeného rizika** | ||
+ | |||
+ | Snížení rizik lze docílit následujícími kroky: | ||
+ | |||
+ | (MIL-STD-882E, | ||
+ | |||
+ | - Eliminujte hazardy skrze design | ||
+ | - Redukujte rizika skrze design | ||
+ | - Zapracujte " | ||
+ | - Doplňte varovná zařízení | ||
+ | - Zapracujte podpisy, školení, procedury, osobní ochranné pomůcky | ||
+ | |||
+ | ** safety standardy ** | ||
+ | MIL-STD-882E, | ||
+ | |||
+ | |||
+ | ** Co je to ”safety integrity level”(SIL)? | ||
+ | |||
+ | Obecně jde o relativní úroveň snížení rizikovosti uplatněním bezpečnostních nároků. | ||
+ | Standard IEC 61508 upravuje úrovně vyžadovaného ochrany proti systematickému selhání v " | ||
+ | Obecně - čím vyšší vyžadovaná úroveň SIL, tím nižší je tolerance na " | ||
+ | |||
+ | ** Jak a kdy se určí? ** | ||
+ | |||
+ | Jak: | ||
+ | |||
+ | - Identifikace hazardů - (např HAZOP) | ||
+ | - Přiřazení pravděpodobnosti jednotlivých hazardů | ||
+ | - Identifikace mechanismů jim zabraňujícím | ||
+ | - Identifikace dopadů hazardů | ||
+ | - Identifikace vážnosti dopadů | ||
+ | - Výpočet třídy rizika (1-nepřípustné až 4-zanedbatelné) | ||
+ | - Identifikace třídy SIL | ||
+ | |||
+ | Obecně chceme docílit třídy rizika 4. Systémy se třídou SIL1 mohou snížit rizika o jednu třídu, Systémy se třídou SIL4 mohou snížit | ||
+ | |||
+ | Kdy: | ||
+ | |||
+ | SIL se obecně určuje již při plánování - je to jeden z podstatných kroků analýzy bezpečnosti. | ||
+ | |||
+ | |||
+ | ** Jak se různý SIL projeví při vývoji a testování systému? ** | ||
+ | |||
+ | Různé úrovně SIL mají různé nároky - například je třeba pro různé úrovně je vyžadována různá úroveň kontroly korektního fungování a to od formy důkazu korektnosti až po množství lidí, kteří systém zkontrolují. Dále je podstatná míra jejich nezávislosti. Stejně tak jsou doporučené praktiky pro různé úrovně SIL. | ||
+ | |||
+ | |||
===== Rozvrhnutelnost a analýza doby odezvy ===== | ===== Rozvrhnutelnost a analýza doby odezvy ===== | ||
Line 112: | Line 231: | ||
{{: | {{: | ||
+ | * Je rozvrhovatelné pokud Ri <= Di | ||
** Vliv sdílených zdrojů ** | ** Vliv sdílených zdrojů ** | ||
Line 119: | Line 239: | ||
===== Sdílené zdroje v systémech reálného času ===== | ===== Sdílené zdroje v systémech reálného času ===== | ||
+ | Sdílení zdrojů v systémech reálného času může představovat potenciálně velký problém ve zpoždění vykonání úlohy a tak i nedodržení limitu pro vykonání. Tento problém může být způsoben hlavně dvěma důvody – Inverze priority a inverze deadlinu. | ||
+ | |||
+ | **Inverze priorit ** je stav, kdy úloha s vyšší prioritou je blokován úlohou s nižší prioritou. K tomuto standarndě dochází díky sdílenému zámku. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ** Deadline Inversion ** je stav, kdy je úloha blokována úlohou s pozdějším časovým limitem splnění. | ||
+ | |||
+ | Jako řešení můžeme uvažovat několik protokolů (// | ||
+ | |||
+ | ** Priority Inheritance Protocol** | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | Obecně - protokol dědění priorit, jak nasvědčuje název, pracuje na principu při kterém kdy dochází k blokaci inverzí priority, blokující podúloha zdědí prioritu blokované po dobu vykonávání kritické sekce. | ||
+ | |||
+ | a ** Priority Ceiling Protocol ** | ||
+ | |||
+ | Tento protokol zajišťuje, | ||
+ | U tohoto protokolu rozdělujeme dvě jeho formy: | ||
+ | |||
+ | **Original PCP** | ||
+ | |||
+ | pravidla: | ||
+ | - Každá úloha má svou statickou prioritu | ||
+ | - Každá úloha má dynamickou prioritu, která je maximem vlastní statické a zděděné statické priority. | ||
+ | - Každá kritická sekce/zdroj má stanovenou maximální prioritu úloh, které do ní vstupují | ||
+ | - Úloha může vstoupit do kritické sekce pouze pokud je jeho dynamická priorita vyšší než systémové maximum. To je stanoveno jako maximální hodnota z priorit aktuálně uzavřených kritických sekcí. | ||
+ | |||
+ | příklad: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ** Immediate PCP** | ||
+ | pravidla: | ||
+ | - Každá úloha má svou statickou prioritu | ||
+ | - Každá kritická sekce/zdroj má stanovenou maximální prioritu úloh, které do ní vstupují | ||
+ | - Každá úloha má dynamickou prioritu, která je maximem vlastní statické a kritické sekce, do které vstoupila | ||
+ | |||
+ | Díky tomu, pokud je úloha blokována, je to pouze na začátku. | ||
+ | V moment, kdy je již vykonáván, | ||
+ | |||
+ | příklad: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | Obecně - IPCP je jednodušší na implementaci, | ||
+ | |||
+ | (Pozn. na tohle se mě docela detailně ptal Sojka na ústní když jsem chtěl Ačko, takže tady to asi nebude tak žhavé...) | ||
+ | |||
+ | Pro systémy s dynamickými prioritami existuje protokol ** Stack Resource Policy **, což je zobecnění PCP. Zajímavost je, že umožňuje //stack sharing//. | ||
===== Čím se liší RTOS od obecného operačního systému ===== | ===== Čím se liší RTOS od obecného operačního systému ===== | ||