Práce v reálném čase

V současné době existují dva nejznámější standardy aplikačního programátorského rozhraní (API): POSIX (IEEE) a ...


V současné době existují dva nejznámější standardy aplikačního
programátorského rozhraní (API): POSIX (IEEE) a Win32 (Microsoft). Rozhraní
POSIX API bylo vytvořeno pro standardizaci sdílení v čase u operačních systémů
postavených na bázi Unixu, rozhraní Win32 API především pro definici vláken,
synchronizačních objektů a pro prioritní plánování.
Podle posledních průzkumů velká většina programátorů z celého světa používá
programátorské rozhraní Win32 API, a to jak v aplikacích pro kancelářské
prostředí, tak i v průmyslu pro řízení výrobních procesů, pohybů v robotizaci,
pro simulace, měření a testování, v lékařství nebo ve vojenství a v letectví.
Je tomu tak proto, že Win32 API je postupně portováno na stále širší
hardwarovou platformu, od procesorů řady IBM x86 až k ARM, MIPS, PPC nebo
SuperH, a z důvodu rozsáhlé obecné znalosti tohoto rozhraní. Uvedená
skutečnost zajišťuje velkou přenositelnost a univerzálnost zdrojových textů
programů v široké komunitě vývojářů, čehož důsledkem je mj. ochrana investic
vložených do vývoje. Rozhraní Win32 API umožňuje dosáhnout komplexního řešení
na všech úrovních, a to jak s Windows NT/2000/XP, eNT/eXP/CE, tak i s pomocí
jiných operačních systémů na bázi Win32 API.

Reálný čas
Mnohý z programátorů ve Windows NT (s preemptivním multitaskingem) zažil
zpočátku kariéry zklamání, když některé programové vlákno své aplikace uspal
suspendoval běžící proces funkcí Sleep(čas v ms) na přesný počet milisekund a
ono "přišlo k sobě" až za dobu několikrát delší. Situace nemusí být o moc
lepší ani v případě, kdy programové vlákno čeká na synchronizační událost,
takže proces není zcela suspendován. I tady "probuzení" ze stavu Wait nemusí
přijít okamžitě. Důsledkem jsou pak ztráty dat kvůli zmeškané obsluze sériové
komunikace anebo například časově nepřesná obsluha hardwarové vstupní/výstupní
karty. První spásnou myšlenkou na zlepšení takového chování bývá nákup
silnějšího počítače. Bohužel, jak se pak ukáže, vzniklý problém tím vyřešen
není. Problém zcela nevyřeší ani zvyšování priority procesu a priority
konkrétního vlákna. Nejen že si většinou přivodíme jiné, sekundární potíže,
ale stejně zcela nevyloučíme náhodné časové selhání. Čím rychleji a přesněji
budeme potřebovat reagovat, tím bohužel budou naše potíže větší a výše uvedené
postupy méně efektivní.
Na první pohled se může zdát, že jsme dospěli k patové situaci, kdy nezbývá
než hodit programátorskou flintu do žita a uchýlit se k pomocnému řešení ve
formě externího hardwaru (koprocesory, vstupní/výstupní desky s vlastní
inteligencí). Takto je operační systém Windows s Win32 API pro řešení časově
kritických aplikací nepoužitelný a všechny výhody, které Win32 API přináší,
jsou nepotřebné. Řešením by mohl být návrat zpět k DOSu anebo odklon k
programátorskému rozhraní podle normy POSIX. Jenže konkurenční tlak na
efektivnost a kvalitu nového vývoje v průmyslové automatizaci nutí vývojáře k
použití Win32 API. Klienti očekávají přínosy, které nabízejí Windows současně
s požadavky na exekutivní prostředí s rysy operačního systému reálného času,
jako jsou vysoký výkon, spolehlivost a determinovanost chování. Jaké jsou
vlastně rysy operačního systému reálného času?

Požadavky a řešení
Operační systém reálného času (real-time) je obecně takový systém, jehož
správný provoz závisí nejen na výsledcích, které z něj vzejdou, ale i na tom,
kdy je získáme. Je důležité podotknout, že v reálném čase neznamená nutně
rychle spíše ukazuje, jak deterministické jsou časové charakteristiky reakcí
systému. Jinými slovy, důležitým výkonovým hlediskem není průměrný čas reakcí,
ale čas reakce v tom nejhorším případě. K požadavku na časový determinismus
přistupují ještě další požadavky, které systémy reálného času typicky
poskytují:
- preemptivní plánovač s velkým počtem nastavitelných priorit vláken
- prediktivní mechanismus synchronizace vláken
- systém dědičné priority
- rychlé hodiny a časovače
Nabízí se otázka: Lze dodat rysy reálného času do OS Windows, aby byly
použitelné jako nástroj pro řízení časově kritických aplikací a jestliže ano
jak?
Windows NT/2000/XP nejsou operační systémy reálného času. Je třeba dodat, že
ani OS Windows NT/XP Embedded nejsou systémy reálného času. Nedostatky OS
Windows NT v aplikacích reálného času byly důkladně zkoumány a spočívají
zejména v následujících příčinách:
- příliš málo priorit vláken
- neprůhledná a nedeterministická rozhodnutí plánovače
- vznik inverze priorit, zvláště při zpracování přerušení
Jednou z možností, jak použít Windows s rysy reálného času, je nákup hotových
systémů, které jsou vhodné například pro systémovou integraci řízení na
tovární úrovni (např. řízení technologických procesů, robotizace apod.). Jedná
se však o hotové produkty a jejich cena odpovídá velikosti vyřešeného problému
zavedení deterministických rysů do hotového produktu, běžícího pod Windows.
Další z možností je rozšíření Windows (Real-Time eXtending RTX), které dodá
OS Windows chybějící rysy tvrdého reálného času. Přidávané rozšíření má na
rozdíl od OS Windows svůj vlastní model programových vláken se svým plánovačem
a implementuje své vlastní objekty synchronizace. Takový doplněk je například
schopen vynuceně kdekoliv přerušit chod systému (mimo kritický kód obsluhy
zpracovávaného přerušení NT), odložit přerušení a obsluhu chyby normálních
Windows během provádění úkolů reálného času nebo zpracovávat přerušení
reálného času během provádění úkolů reálného času.
Rozšíření OS Windows přidává plánování úloh v reálném čase a zkracuje
rozlišitelnou jednotku času z jednotek ms na jednotky ms. Nezávislý plánovač
vláken může běžet v popředí přerušení i zpracování vlákna OS Windows a může
být používán jak na jednoprocesorovém, tak na symetrickém víceprocesorovém
stroji, beze změny jádra OS Windows a ovladačů zařízení. Aplikace pak také
často nemusí při startu či restartu počítače čekat, než se spustí sám operační
systém. Rysy deterministického chování přinášejí i schopnost obsloužit
systémovou výjimku známý "blue screen" a umožňují řídicí aplikaci pracovat i v
tomto případě.

Princip rozšíření
Logika návrhu rozšířit OS Windows o doplněk je dána několika faktory.
Operační systém Windows je masový tržní produkt, který nelze rovnou použít na
takové aplikace, které vyžadují reálný čas. Je proto vhodné, aby vlastní
způsob doplnění reálného času do Windows NT byl proveden prostřednictvím
rozšíření nebo "zásuvného" modulu do obecně použitelného produktu.
Je však třeba říci, že někteří programátoři nechtějí z důvodu své nedůvěry k
OS Windows použít pro své řídicí aplikace ani tento systém v jeho rozšířené
podobě. Ale co dělat, pokud chtějí i nadále používat oblíbené rozhraní Win32
API? Někteří z nich jsou schopni překonat svou nedůvěru k Windows a využít OS
Windows CE, který ve své poslední verzi je operačním systémem tvrdého reálného
času. Častou bariérou jeho širšího využívání zatím bývá obtížné umístění
(portace) na zvolenou hardwarovou platformu. Je však možné využít i jiné
operační systémy reálného času, které jsou na bázi Win32 API a nejsou
produktem firmy Microsoft. Jedná se zejména o hardwarově nenáročné operační
systémy reálného času. Takovýto operační systém může být na rozdíl od Windows
pouze víceúlohový (ne víceprocesní uživatelská vlákna jsou složkou jediného
procesu), takže má malou časovou režii pro přepínání kontextů úloh
(programových vláken). Potřebuje totiž malé množství registrů a dalších
informací, jež musí být ukládány a obnovovány v průběhu přepínání mezi úlohami.
Takový operační systém je například PharLap ETS. I tady je plánovač procesů
deterministický, tzn. že "poběží" vždy povolené programové vlákno s nejvyšší
prioritou a v přesném čase. Toto vlákno bude aktivní dokud buď není
zablokováno jiným právě povoleným vláknem s vyšší prioritou, anebo, je-li
povoleno časové sdílení, když vypršel sdílený čas a je zde jiné povolené
vlákno se stejnou prioritou. V ostatních případech "poběží" programové vlákno
až do doby jeho zachycení v některém synchronizačním objektu. Někdy se stává,
že programové vlákno potřebuje využít objekt vlastněný jiným vláknem s
nejnižší prioritou. Tato plánovací anomálie je známá pod pojmem prioritní
inverze a může vést až k nepředvídatelnému chování navrhovaného systému.
Správný plánovač běhu programových vláken pak zabrání vzniku chybového efektu
prioritní inverze, zajištěním běhu vlákna s nejvyšší prioritou, a to (ve
většině případů) tak, že se snaží uvolnit blokující vlákno dynamickým
zvyšováním priorit. Na první pohled se může zdát, že nákup SDK (sady
vývojových nástrojů) pro práci s operačním systémem reálného času je v našich
ekonomických podmínkách velká investice (ve srovnání s masově prodávanými
produkty řady MS Windows). Vynaložené prostředky se vrátí jednak v podobě
významného urychlení vývoje aplikací, ale také v dosažení dosud nečekaných,
nových kvalitativních možností.

Závěr
Operační systém Windows od společnosti Microsoft je v současné době
nejpoužívanějším operačním systémem v oblasti průmyslové automatizace a velká
většina zdrojových textů řídicích programů je napsána s použitím programového
rozhraní Win32 API. Skutečnost, že je možné Win32 API v OS Windows doplnit o
rozšíření na reálný čas nebo že existují i přímo operační systémy reálného
času s Win32 API, které nejsou Windows, otevírá další možnosti použití a
stabilizuje dosavadní investice vložené do vývoje programů.

Operační systém reálného času
Jde o takový OS, jehož správný provoz závisí nejen na výsledcích, které z něj
vzejdou, ale i na čase, kdy se tak stane. Důležitým hlediskem přitom je čas
reakce systému v nejhorším možném případě.


Autor je ředitelem společnosti dataPartner.









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.