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 08:29] – [Rozvrhnutelnost a analýza doby odezvy] 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 23: | Line 23: | ||
Algoritmy můžeme dělit nejprve podle způsobu rozvrhování. V případě, že známe všechny úlohy, které bude systém vykonávat, předem, lze aplikovat první podskupinu algoritmů – **Off-line rozvrhování**. | Algoritmy můžeme dělit nejprve podle způsobu rozvrhování. V případě, že známe všechny úlohy, které bude systém vykonávat, předem, lze aplikovat první podskupinu algoritmů – **Off-line rozvrhování**. | ||
- | V tomto případě uvažujeme úlohy (task) s fixní prioritou a periodické podúlohy (job) se zděděnou prioritou, danou periodou, dobou vykonávání a nejzašším termínem vykonání (deadline). | + | V tomto případě uvažujeme úlohy (task) s fixní prioritou a periodické podúlohy (job) se zděděnou prioritou, danou periodou, dobou vykonávání a nejzašším termínem vykonání (deadline). |
+ | Off-line rozvrhování se také nazývá //clock driven//, jelikož rozvrh je nejprve vytvořen pomocí některého z algoritmů offline a následně je implementován jako volání jednotlivých úloh v konkrétní čas. | ||
+ | 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. // | ||
+ | |||
+ | - 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 $$ | ||
+ | |||
+ | 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). | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ** On-line rozvrhování ** - | ||
+ | |||
+ | ** Fixed priority rozvrhování ** | ||
**Rate-Monotonic (RM)** rozvrhovač funguje na principu přidělení výpočetního času té úloze, která má nejvyšší prioritu, kde priorita je určena podle periody. Platí - čím nižší perioda, tím vyšší priorita. | **Rate-Monotonic (RM)** rozvrhovač funguje na principu přidělení výpočetního času té úloze, která má nejvyšší prioritu, kde priorita je určena podle periody. Platí - čím nižší perioda, tím vyšší priorita. | ||
Line 31: | Line 70: | ||
Ani jeden z těchto algoritmů není optimální. RM rozvrhovač je optimální pouze pro jednoduše periodické úlohy (tj. úlohy, kde pro každé dvě úlohy $ i,j $ platí, že pokud pro periody platí $ T_i < T_k $, pak platí $ T_k = n \cdot T_i; n \in \mathbb{Z} $ | Ani jeden z těchto algoritmů není optimální. RM rozvrhovač je optimální pouze pro jednoduše periodické úlohy (tj. úlohy, kde pro každé dvě úlohy $ i,j $ platí, že pokud pro periody platí $ T_i < T_k $, pak platí $ T_k = n \cdot T_i; n \in \mathbb{Z} $ | ||
- | ** On-line rozvrhování ** - | ||
- | (TODO) | ||
- | ** Fixed priority | + | ** Deadline driven |
- | ** Deadline driven | + | Také jinak rozvrhování |
- | ** Kombinování RT a obyčejných úloh ** - background | + | ** 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 | ||
+ | |||
+ | 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 //bandwidth-preserving serveru// je tzv. **Total-Bandwidth Server**. Ten funguje na principu, kdy je dán maximální procentuální poměr výpočetního času, který může být věnován aperiodickým podúlohám. Obnova rozpočtu se řídí třemi pravidly: | ||
+ | |||
+ | - 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 | ||
+ | - 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 | ||
+ | |||
+ | příklad: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | Druhým konkrétním příkladem je **Constant Utilization Server** | ||
+ | |||
+ | Pravidla pro konzumaci rozpočtu: | ||
+ | - Na počátku $(t=0)$ je rozpočet $e$ nulový a deadline je na $d=0$. | ||
+ | - 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: | ||
+ | |||
+ | {{: | ||
===== 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 80: | Line 208: | ||
** Response time analysis ** | ** Response time analysis ** | ||
- | (TODO) | + | Výpočet doby odezvy je konkrétním, |
+ | Dobu odezvy lze vypočítat jako | ||
+ | $$ R_i = C_i + I_i $$ | ||
- | TODO - vliv sdílených zdrojů | + | kde $I_i$ je interference, |
+ | |||
+ | Obecně ke spuštění podúlohy s vyšší prioritou může dojít několikrát. Počet spuštění podúlohy $t_j$ lze určit jako | ||
+ | $\Big\lceil\frac{R_i}{T_j}\Big\rceil$ | ||
+ | |||
+ | Proto lze uvažovat dosazení | ||
+ | |||
+ | $$ R_i = \sum_{J} \Big\lceil\frac{R_i}{T_j}\Big\rceil C_j \quad \mathrm{kde\ } J = \{j: j\in \mathbb{N}, j < i\} $$ | ||
+ | |||
+ | Jak vidíme, pro výpočet je třeba rekurentní rovnice, tu lze zapsat jako | ||
+ | |||
+ | $$ w_{i}^{n+1} = \sum_{J} \Big\lceil\frac{w_{i}^{n}}{T_j}\Big\rceil C_j \quad $$ | ||
+ | |||
+ | příklad: (periodu uvažujeme též jako deadline) | ||
+ | |||
+ | {{: | ||
+ | {{: | ||
+ | |||
+ | * Je rozvrhovatelné pokud Ri <= Di | ||
+ | |||
+ | ** Vliv sdílených zdrojů | ||
+ | |||
+ | Sdílené zdroje zpravidla situaci zesložiťují – prakticky přidávají další podmínky naprioritu rozvrhování, | ||
===== 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 ===== | ||