Obslužné zařízení popisuje třída Facility
. Zařízení je
objekt, určený k popisu specifického typu interakcí procesů, označovaného
jako výlučný (exkluzívní) přístup. Problém výlučného přístupu lze formulovat
takto: každý z m procesů systému požaduje takový přístup k abstraktnímu
zařízení nebo zdroji Z, který vylučuje, aby v kterémkoli okamžiku sdílel
zařízení Z více, než jeden proces.
S příklady výlučného přístupu se setkáváme téměř v každém systému hromadné obsluhy. Příkladem může být benzinové čerpadlo, poštovní úředník u přepážky, nebo terminál počítače. Rovněž samotný mechanismus kvaziparalelního provádění procesů, kdy pouze jediný z procesů může být aktivním, je ukázkou výlučného přístupu procesů k zařízení -- reálnému procesoru. Deklarace zařízení má tvar:
Facility <identifikátor> ("<jméno zařízení>");
Příklad deklarace:
Facility Fac("Fac");
Zařízení je buď obsazeno některým objektem modelu nebo je volné.
Stav zařízení je možné testovat metodou-predikátem Busy
, která vrací
nenulovou hodnotu (TRUE) v případě, že zařízení je obsazeno:
if(Fac.Busy()) Print("obsazeno\n");
Základní operace zařízení jsou obsazení (metoda Seize
)
a uvolnění (metoda Release
). Třída Process má definovány také
metody Seize a Release, jejich parametrem je zařízení, se
kterým se pracuje:
Seize(<identifikátor zařízení>[,<výraz>]); Release(<identifikátor zařízení>);
Každé zařízení má vstupní frontu pro požadavky na obsazení, které nelze okamžitě uspokojit. V případě, že není uveden výraz jako druhý parametr Seize, je sémantika této operace jednoduchá: je-li zařízení volné, pak se obsadí, je-li zařízení obsazeno, pak se proces pozastaví a zařadí do vstupní fronty u zařízení. Uvolnění zařízení může provést pouze ten proces, který je obsadil. V případě, že vstupní fronta je neprázdná, zařízení je uvolnění znovu obsazeno prvním objektem (procesem) z fronty.
Poznámka: Současná implementace zařízení není aktivní, tj. vstoupí-li nějaký proces přímo do fronty a zařízení je volné, nedojde k jeho obsazení (k tomu dochází jen při provádění operace Seize, resp. Release).