next up previous contents
Next: Příklad: Up: Diskrétní simulace Previous: Kvaziparalelní provádění procesů v

Zařízení

Obslužné zařízení popisuje třída Facilitygif. 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).



Petr Peringer
Mon Dec 8 13:24:19 CET 1997