next up previous contents
Next: Fontosabb adatszerkezetek Up: A STREAMS driverek Previous: STREAMS szolgáltatások

Kritikus szakaszok védelme

Gyakran szükség van arra, hogy amíg egy bonyolultabb adatstrukturát egy STREAMS driveren vagy modulon belül megváltoztatunk, addig letiltsuk a megszakításokat. Például azért, mert ha a driver az adatstruktúra módosítását nem fejezte be, és a muködését megszakítja egy másik driver, amely az inkonzisztens állapotban levo adatstrukturát tudja csak módosítani, akkor az egész rendszer épsége veszélyeztetve van. A kritikus szakasz elején az interruptokat az splstr() hívással lehet letiltani, a visszatérési értéket a kritikus szakasz végéig kell eltárolni. A kritikus szakasz végén vissza kell állítani a processzor interrupt prioritási szintjét az splx() kernel hívás segítségével a kritikus szakaszba belépés elotti szintre. Ez vázlatosan a következoképp oldható meg:

rutin()
{
  int regispl;

  ...
  regispl=splstr();
  ...
     /* Kritikus szakasz */
  ...
  splx(regispl);
  ...
}



Csizmazia Balazs
Tue Apr 2 00:06:27 MET DST 1996