Next: Die Struktur der Metasperre
Up: Synchronisierung
Previous: Beispiele
  Inhalt
Eine fortgeschrittene Metasperrenimplementierung
[Agesen et al., 1999] streben eine möglichst platzeffiziente und
trotzdem performante Monitorimplementierung an. Die Monitorstruktur
beruht auf folgenden Vorgaben:
- Wenige Objekte werden als Monitore genutzt. Der Platzbedarf
unbenutzter Monitore sollte also möglichst gering gehalten werden.
Dazu wird das Hashfeld im Objektkopf multimodal genutzt; der
aktuelle Modus wird durch zwei freie Markierungsbits kodiert. Im
überwiegenden Fall eines ungenutzten Monitors entstehen daher
Platzkosten von lediglich zwei Bit.
- Während eines Überganges des Monitorzustandes, geschützt durch
die Metasperre, braucht die Monitorstruktur für andere Threads nicht
verfügbar zu sein, da sie ohnehin nicht zugreifen dürfen. Die
Metasperre kann also im gleichen Feld wie die Monitordaten angelegt
werden.
- Es brauchen keine eigenen Metasperrstrukturen (mit gesicherten
Monitor- oder Hashzuständen) angelegt zu werden, da ein Thread nur
eine Metasperre zur Zeit halten kann. Statt dessen können diese
direkt auf dem Thread-Stack repräsentiert werden.
- Threads sind durch die entsprechende Systembibliothek des
Solaris Betriebssystems realisiert. Auch wenn Metasperren gewöhnlich
nur extrem kurz (wenige 10 SPARC-Instruktionen) gehalten werden,
können im Ausnahmefall durch Entscheidungen des Schedulers längere
Phasen mit erworbenen Metasperren auftreten. Metasperren sollten
daher nicht durch spin locks implementiert werden. Statt
dessen blockieren Threads bei konkurrierendem Erwerb einer
Metasperre, und eine Listenstruktur ermöglicht die Übergabe der
Metasperre an einen Nachfolger (handoff).
Next: Die Struktur der Metasperre
Up: Synchronisierung
Previous: Beispiele
  Inhalt
2001-02-28