next up previous contents
Next: Stopping The World Up: Threads Previous: Zweistufige Thread-Implementierungen   Inhalt

Blockierende Aufrufe in separaten Threads

VisualWorks, die Smalltalk-Implementierung von Cincom (ehemals ParcPlace, ObjectShare) [Cincom, 2000] steht in der Tradition von Thread-Implementierungen, die allein im user space realisiert sind. Alle Prozesse -- so der Ausdruck für Smalltalk-Threads -- werden vom Smalltalk-Scheduler auf einem LWP, ohne Interaktion mit dem Betriebssystem verwaltet. Das Ergebnis ist eine hochperformante virtuelle Maschine, die ohne Synchronisation implementiert werden kann.

Aufrufe von Systemroutinen stellen ein gewichtiges Problem dar: blockiert der Aufruf im Kernel, ist die gesamte virtuelle Maschine suspendiert. Dies führt bestenfalls zu schlechter Laufzeitperformanz, schlimmstenfalls zu Deadlock. Dies ist für serverseitige Anwendungen nicht akzeptabel. Smalltalk-Code soll jedoch weiterhin nur von einem LWP ausgeführt werden, um die effiziente Maschinenarchitektur beibehalten zu können.

Diese Überlegungen führen zu folgendem Entwurf [Miranda, 1997]: dem Smalltalk-VM-LWP wird ein Pool von LWPs zur Seite gestellt, die exklusiv zur Ausführung externer Bibliotheksaufrufe genutzt werden. Die Bibliotheksdeklarationen einer externen Routine ist dazu mit dem Schlüsselwort _threaded zu markieren und bedeutet der VM, entsprechende Aufrufe auf einem eigenen Betriebssytemkontext auszuführen.

Ruft nun ein Smalltalk-Prozeß eine solche Routine auf, so wird der Aufruf dem LWP-Pool übergeben und der Prozeß in der VM als suspendiert markiert. Die VM kann nun andere Prozesse ausführen. Nach erfolgter Ausführung des externen Aufrufs oder bei einem Rückruf in die VM wird der rufende Prozeß wieder als lauffähig markiert und nimmt am Scheduling der VM teil. Es findet hier also keine Kommunikation mit dem Scheduler des Betriebssystems statt, sondern die Aufrufe werden bereits präventiv auf einen anderen LWP umgeleitet.

Man beachte, daß diese Thread-Implementierung für den Fall p = 1, d.h. einer Uniprozessormaschine, dem Idealmodell dieses Abschnitts entspricht. Dabei wird die Besonderheit ausgenutzt, daß die I/O-Prozessoren nicht auf VM-Strukturen zugreifen und somit keine Synchronisierung erforderlich ist.


next up previous contents
Next: Stopping The World Up: Threads Previous: Zweistufige Thread-Implementierungen   Inhalt

2001-02-28