Kombinace softPLC a operačního systému Linux

Možnost zkombinovat Linux a softPLC (PLC) je již delší dobu zajímavým tématem. Linux nabízí mnoho funkcí, které by měl moderní systém softPLC mít. Rozšířit systémy PLC o tyto funkce se s většími či menšími úspěchy pokouší mnoho výrobců. Technicky vzato, provádí program PLC speciální kód v určitém časovém intervalu. Potřebuje tudíž, aby jakýkoliv operační systém běžící pod ním zajišťoval vykonávání instrukcí v reálném čase. Standardní Linux to umožňuje pouze v určitém rozsahu, proto systémy PLC využívající funkcí Linuxu až dosud buď byly postaveny na rozšířeních linuxového jádra pro práci v reálném čase (např. RTAI či RTLinux), nebo se spokojily s omezenou činností linuxového jádra v reálném čase a běžely v uživatelském prostoru Linuxu.
 

Systém PLC založený na rozšířeních linuxového jádra RT

Rozšíření linuxového jádra pro práci v reálném čase (RT) jsou založena na určeném programovacím rozhraní reálného času tohoto jádra. Existuje pouze formální oddělení rozhraní a jádra, při kterém není kódu RT dovoleno volat funkce jádra, ale toto pravidlo nelze prosadit. Jakýkoliv aplikační program RT tak může volat jakoukoliv funkci jádra, což v mnoha případech vede k nedefinovanému chování systému. Všechny aplikační programy reálného času (v tomto případě PLC) běží jako privilegovaný kód ve stejném adresovém prostoru jako jádro, které má, stejně jako program PLC, nekontrolovaný přístup ke stejnému kódu, datům a portům I/O. Neexistuje zde žádné prostorové oddělení. Plánovač reálného času plánuje systém Linux jako proces s nejnižší prioritou, takže Linux se dostane k výkonu pouze v případě, že není připraven žádný z procesů RT.
Znamená to, že Linux je, co se týče možnosti přístupu k výpočetnímu času, vydán napospas PLC. Pokud nedojde k přerušení činnosti PLC, Linux nepoběží.
 
Vedle prostorové závislosti Linuxu na PLC existuje ještě časová závislost. Komponentynejsou časově odděleny. Zatímco linuxové jádro může ovlivnit chování PLC, linuxové programy tuto možnost nemají, pokud neběží s právy superuživatele. Jestliže jsou vyloučeny jakékoliv bezpečnostní nedostatky (např. využití práv tzv. root uživatele) v jádru, PLC se vůbec nemusí spoléhat na linuxové aplikační programy. Báze důvěryhodného kódu se tak skládá z linuxového jádra a PLC.
 

Systémy PLC běžící v uživatelském prostoru Linuxu

Již prosté, neupravené linuxové jádro poskytuje služby umožňující omezenou činnost v reálném čase. Pokud se aplikační program PLC spokojí s odchylkami v časování v řádu několika milisekund, může být využit jako uživatelský proces Linuxu. PLC a jádro však v tomto případě nesdílejí stejný adresový prostor a PLC nemůže jádro snadno zahrnout a využívat. Naopak kód PLC je závislý na Linuxu, poskytujícím mu podle potřeby paměťovou kapacitu a vstupy a výstupy. Znamená to, že obě komponenty opět nejsou prostorově odděleny.
 
Časové oddělení zde také neexistuje, protože běh PLC závisí na alokaci výpočetního času jádra. Buď je PLC závislé na Linuxu,nebo naopak. Báze důvěryhodného kódu tak opět zahrnuje linuxové jádro a PLC.
 

Oddělení systémových zdrojů

Nedávno vznikl koncept bezpečných (safe critical) systémů PLC, jehož základní principy zde budou vysvětleny. Koncept počítá s paralelním během Linuxu a systémů PLC na jednom procesoru. Současný provoz a vzájemná spolupráce systémů jsou umožněny mikrojádrem zajišťujícím bezpečný běh bez vzájemného nežádoucího ovlivňování. Takto je důvěryhodný software PLC vykonávající kritické funkce zařízení oddělen, přičemž je možná následná verifikace.
 
Koncept vychází z požadavku na redukci množství důvěryhodného kódu, tedy kódu PLC a jádra. Do úrovně jádra jsou při tomto přístupu implementovány pouze funkce, které není možné vykonávat jinak (např. požadavek privilegovaných instrukcí) nebo které jsou nutné pro vytvoření zajištěného prostředí pro běh programů na uživatelské úrovni. Všechny ostatní funkce, které klasická monolitická jádra provádějí v privilegovaném módu, mohou být stejně tak dobře zajištěny na uživatelské úrovni. Vzniklé mikrojádro tedy poskytuje pouze základní mechanismy umožňující přidělovat systémové prostorové a časové prostředky individuálním podmnožinám (virtuální počítače). Tyto podmnožiny jsou schopny hostit celé operační systémy a jejich aplikační programy. Na rozdíl od RTAI či RTLinuxu dovoluje toto mikrojádro hostit teoreticky neomezené množství virtuálních počítačů. Je tedy možné použít Linux a více nezávislých systémů PLC. Každý z nich má přiděleny své systémové prostředky a operační systém běžící na virtuálním počítači nemůže ovlivnit ostatní. Celý systém je tímto způsobem rozdělen do naprosto nezávislých přepážek. PLC již tedy nemusí „důvěřovat“ Linuxu a naopak (obr. 1).
 
Oba systémy koexistují vedle sebe, nikoliv jeden na druhém, přičemž sdílejí společný důvěryhodný základ, skládající se z mikrojádra (jediný kód běžící v privilegovaném módu) a vrstvy systémového softwaru určující pravidla pro řízení přepážek.
 
V další části tohoto příspěvku bude představena separace systémových zdrojů podrobněji.
Jan Rollo, SYSGO, s. r. o.
 
Obr. 1. Systém s oddělenými systémovými zdroji