Browse Prior Art Database

Nutzung von UNIX-System-Semaphoren fuer eine prozessabsturzsichere Schreib-/Lese-Sperre

IP.com Disclosure Number: IPCOM000020449D
Original Publication Date: 2003-Dec-25
Included in the Prior Art Database: 2003-Dec-25
Document File: 2 page(s) / 54K

Publishing Venue

Siemens

Related People

Juergen Carstens: CONTACT

Abstract

Zur Serialisierung von Zugriffen mehrerer Prozesse und/oder Threads (zusammenhaengende Folge von Ablaeufen oder Aufgaben) auf gemeinsam genutzte Ressourcen wie z.B. Speicher eignen sich u.a. Schreib-/Lese-Sperren (engl.: reader/writer locks). Sie gestatten den gleichzeitigen Lesezugriff und lediglich exklusiven Schreibzugriff. Sofern sich jedoch einer der Prozesse waehrend des Zugriffs beendet (z.B. Absturz), bleibt der Zugriff fuer andere dauerhaft gesperrt. Dies fuehrt dazu, dass alle Prozesse, die die entsprechende Ressource gemeinsam nutzen, beendet oder zumindest definiert von der Nutzung der Ressource abgehalten werden muessen. Dies ist erforderlich, um die Ressource nach der Neuinitialisierung der Schreib-/Lese-Sperre wieder zu starten bzw. den Zugriff wieder zuzulassen. Durch einen solchen Vorgang wird die Verfuegbarkeit der betroffenen Software limitiert. Fuer einfache Sperren, die lediglich einen exklusiven Zugriff fuer einen einzigen Prozess/Thread, nicht aber einen parallelen lesenden Zugriff erlauben, bieten einige Systeme Unterstuetzung fuer den Fall eines Prozessendes vor der Freigabe der Sperre an. Fuer die Schreib-/Lese-Sperren fehlt diese Unterstuetzung jedoch. Vorgeschlagen wird, die fuer Schreib-/Lese-Sperren gewuenschte Semantik in geeigneten UNIX-Systemen mit Hilfe von Semaphoren zu realisieren. Semaphore sind im Betriebssystemkern verwaltete Zaehler (Semaphorenzaehler), die sich ueber Systemaufrufe inkrementieren oder dekrementieren lassen. Erreicht der Semaphorenzaehler beim Dekrementieren den Wert 0, fuehren weitere Dekrementieraufrufe zur „Vertagung“ des aufrufenden Prozesses/Threads, bis andere Prozesse/Threads den Semaphorenzaehler wieder inkrementieren. Optional kann hierbei unterstuetzt werden (z.B. sog. SEM_UNDO-Option), dass vorgenommene Inkrementierungen oder Dekrementierungen beim Prozessende vom Betriebssystem korrigiert werden. Durch Nutzung einer solchen Option kann eine dauerhafte Sperre bei vorzeitigem Prozessende bzw. -absturz vermieden werden, was in diesem Text als Absturzsicherheit bezeichnet wird.

This text was extracted from a PDF file.
This is the abbreviated version, containing approximately 41% of the total text.

Page 1 of 2

S

© SIEMENS AG 2003 file: 2003J15897.doc page: 1

Nutzung von UNIX-System-Semaphoren fuer eine prozessabsturzsichere Schreib-/Lese-Sperre

Idea: Jonas Hoef, DE-Muenchen

Zur Serialisierung von Zugriffen mehrerer Prozesse und/oder Threads (zusammenhaengende Folge von Ablaeufen oder Aufgaben) auf gemeinsam genutzte Ressourcen wie z.B. Speicher eignen sich
u.a. Schreib-/Lese-Sperren (engl.: reader/writer locks). Sie gestatten den gleichzeitigen Lesezugriff und lediglich exklusiven Schreibzugriff. Sofern sich jedoch einer der Prozesse waehrend des Zugriffs beendet (z.B. Absturz), bleibt der Zugriff fuer andere dauerhaft gesperrt. Dies fuehrt dazu, dass alle Prozesse, die die entsprechende Ressource gemeinsam nutzen, beendet oder zumindest definiert von der Nutzung der Ressource abgehalten werden muessen. Dies ist erforderlich, um die Ressource nach der Neuinitialisierung der Schreib-/Lese-Sperre wieder zu starten bzw. den Zugriff wieder zuzulassen. Durch einen solchen Vorgang wird die Verfuegbarkeit der betroffenen Software limitiert.

Fuer einfache Sperren, die lediglich einen exklusiven Zugriff fuer einen einzigen Prozess/Thread, nicht aber einen parallelen lesenden Zugriff erlauben, bieten einige Systeme Unterstuetzung fuer den Fall eines Prozessendes vor der Freigabe der Sperre an. Fuer die Schreib-/Lese-Sperren fehlt diese Unterstuetzung jedoch.

Vorgeschlagen wird, die fuer Schreib-/Lese-Sperren gewuenschte Semantik in geeigneten UNIX- Systemen mit Hilfe von Semaphoren zu realisieren. Semaphore sind im Betriebssystemkern verwaltete Zaehler (Semaphorenzaehler), die sich ueber Systemaufrufe inkrementieren oder dekrementieren lassen. Erreicht der Semaphorenzaehler beim Dekrementieren den Wert 0, fuehren weitere Dekrementieraufrufe zur "Vertagung" des aufrufenden Prozesses/Threads, bis andere Prozesse/Threads den Semaphorenzaehler wieder inkrementieren. Optional kann hierbei unterstuetzt werden (z.B. sog. SEM_UNDO-Option), dass vorgenommene Inkrementierungen oder Dekrementierungen beim Prozessende vom Betriebssystem korrigiert werden. Durch Nutzung einer solchen Option kann eine dauerhafte Sperre bei vorzeitigem Prozessende bzw. -absturz vermieden werden, was in diesem Text als Absturzsicherheit bezeichnet wird.

Die von einigen Systemen unterstuetzten Schreib-/Lese-Sperren geben Schreibwuenschen Vorrang vor Lesewuenschen. Ist also das Schreib-/Lese-Lock fuer den schreibenden Zugriff gesperrt, so werden nach der Freigabe der Sperre diejenigen Prozesse/Threads, die das Lock fuer schreibenden Zugriff sperren wollen (Schreibwunsch) und vertagt wurden, den Vorrang vor solchen erhalten, die das Lock fuer lesenden Zugriff sperren wollen (Lesewunsch) und vertagt wurden. Ist das Schreib-/Lese- Lock fuer lesenden Zugriff gesperrt, so werden Prozesse/Threads vertagt, die das Lock fuer schreibenden Zugriff sperren wollen (Schreibwunsch), weitere Prozesse/Threads, die das Lock fuer lesenden Zugriff sperren wollen (Lesewunsch), werden jedoch ab dem ers...