next up previous contents
Next: Eine fortgeschrittene Metasperrenimplementierung Up: Metasperren Previous: Metasperren   Inhalt


Beispiele

Metasperren finden sich vielfach in Implementierungen des POSIX Thread Standards [POSIX, 1996]. Dieser definiert einen abstrakten Typ pthread_mutex_t, welcher ähnlich obiger Monitorstruktur implementiert werden kann. Ein Feld der Sperrstruktur fungiert dann als Metasperre, z.B. spinlock bei LinuxThreads [Leroy, 1997]. Virtuelle Maschinen, die Synchronisation mit Hilfe solcher Thread-Bibliotheken realisieren, verwenden demnach entsprechende Strukturen. Dies gilt beispielsweise für die Sun Classic VM [Sun Microsystems, 2000a] mit native threads Option.

Die Jalapeño Virtual Machine von IBM Research [Alpern et al., 2000] ist mit minimalen Betriebssystemabhängigkeiten implementiert. Auch die Synchronisationsoperationen sind im user-level mit Hilfe zweier Instruktionen der PowerPC-Architektur [May et al., 1994] implementiert. lwarx (load reserve) lädt ein Speicherwort und vermerkt gleichzeitig eine -- nicht verpflichtende -- Reservierung der entsprechenden Cache-Line. stwcx (store conditional) speichert ein Wort, vorausgesetzt, die Reservierung der Cache-Line wurde eingehalten. Dieses Instruktionspaar lässt sich somit wie eine ,,Compare-and-Swap``-Instruktion verwenden.

Jalapeño benutzt zwei verschiedene Repräsentationen für Monitore - thin und fat locks. Thin locks stellen eine weitere Optimierung dar, die wir in Abschnitt 5.4.5 behandeln. Jalapeños fat locks hingegen entsprechen der oben dargestellten Monitor-Implementierung nahezu vollständig. Ein fat lock ist eine eigenständige Struktur, die durch ein Feld im Objektkopf referenziert wird. Sie enthält alle Felder der Beispielimplementierung metalock, owner, depth, entering, waiting sowie ein sechstes Feld, welches das zugeordnete Java-Objekt referenziert. Fat locks können nach Bedarf verschiedenen Java-Objekten zugeordnet werden. Über das zusätzliche sechste Feld wird das Zuordnungsprotokoll Objekt $\leftrightarrow$Monitor abgewickelt.

Auf Anwendungsebene realisierte Thread-Implementierungen, wie z.B. green threads, deaktivieren den Unterbrechungsmechanismus so lange, wie ein Thread eine Monitorstruktur manipuliert. Aus diesem Grund brauchen Monitorstrukturen nicht vor nebenläufigem Zugriff geschützt zu werden. Man kann dieses Vorgehen als degenerierte, globale Metasperre ansehen.


next up previous contents
Next: Eine fortgeschrittene Metasperrenimplementierung Up: Metasperren Previous: Metasperren   Inhalt

2001-02-28