www.wikidata.de-de.nina.az
Der Titel dieses Artikels ist mehrdeutig Weitere Bedeutungen sind unter Lock Begriffsklarung aufgefuhrt Unter einem Lock oder Locking englisch fur Sperre oder Sperren versteht man in der Informatik das Sperren des Zugriffs auf ein Betriebsmittel Eine solche Sperre ermoglicht den exklusiven Zugriff eines Prozesses auf eine Ressource d h mit der Garantie dass kein anderer Prozess diese Ressource liest oder verandert solange die Sperre besteht Locking wird haufig bei Prozesssynchronisation sowie in Datei und Datenbanksystemen verwendet um atomare und konsistente Lese und Schreibanforderungen zu gewahrleisten Inhaltsverzeichnis 1 Locking Arten 1 1 Read Lock 1 2 Write Lock 2 Lock Freigabe 2 1 Verhungern Starving 2 2 Verklemmung Deadlock 3 Hierarchisches Locking 4 Multi Locking 5 Implementierung 6 Beispiel 7 Siehe auch 8 LiteraturLocking Arten BearbeitenMochte ein Prozess exklusiven Zugriff auf eine Ressource muss er eine Sperre bei einem Verwaltungsprozess z B einem Locking Manager anfordern Um die angeforderte Ressource nicht ganz zu sperren gibt es zwei grundlegende Arten von Sperren Read Lock Bearbeiten Besitzt eine Ressource einen Read Lock Lesesperre oder auch Shared Lock geteilte Sperre so mochte der Prozess der diese Sperre gesetzt hat von der Ressource nur lesen Somit konnen auch andere Prozesse auf diese Ressource lesend zugreifen durfen diese aber nicht verandern Write Lock Bearbeiten Eine Ressource mit Write Lock Schreibsperre oder auch Exclusive Lock exklusive Sperre verhindert dass die Ressource von anderen Prozessen gelesen oder geschrieben wird da der Prozess der den Lock gesetzt hat die Ressource verandern mochte Das Verfahren wird auch als pessimistisches Locking bezeichnet da es von der Annahme ausgeht dass in der Regel eine Aktualisierung der Daten erfolgen wird Beim optimistischen Locking wird davon ausgegangen dass in der Regel keine Aktualisierung erfolgt oder eine gleichzeitige Aktualisierung durch zwei Nutzer nicht wahrscheinlich ist Es wird erst beim Aktualisieren gepruft ob der Status quo noch gilt Lock Freigabe BearbeitenIst der Prozess der eine Sperre angefordert hat fertig muss er die Sperre wieder aufheben Prozesse die aufgrund einer Sperre auf eine Ressource nicht zugreifen konnten mussen warten und reihen sich in eine Warteschlange ein Es gibt mehrere Moglichkeiten wie diese Warteschlange ausgelegt ist z B prioritatsgesteuert FIFO gesteuert usw Verhungern Starving Bearbeiten Hebt ein Prozess eine Sperre nicht wieder auf so warten ggf andere Prozesse unendlich lange auf diese Freigabe Diese Prozesse verhungern englisch starve somit Verklemmung Deadlock Bearbeiten Das Setzen einer Sperre kann Deadlocks verursachen namlich dann wenn zwei Prozesse gegenseitig auf die Freigabe der vom jeweils anderen gesperrten Ressource warten Beispiel Es gebe als Ressourcen ein Fahrrad und einen Stadtplan Zwei Fahrradkuriere sollen jeweils ein Paket ausliefern und benotigen dazu jeweils Fahrrad und Stadtplan Der Kurier A kann das Fahrrad reservieren der Kurier B den Stadtplan Sie befinden sich nun im Deadlock da beide auf die Ressource des jeweils anderen warten endlos Hierarchisches Locking BearbeitenBeim hierarchischen Locking werden Ressourcen zu grosseren logischen Einheiten zusammengefasst Es ist nun moglich die gesamte logische Einheit zu sperren Dies bringt einen Leistungsgewinn da so nicht alle Elemente der Einheit separat gesperrt und uberwacht zu werden brauchen Die richtige Wahl der Granularitat der logischen Einheiten ist dabei von grosser Bedeutung Hierarchisches Locking findet vor allem in Datenbanksystemen Anwendung Es kann z B ein Datenfeld ein Datensatz eine Datei oder die ganze Datenbank gesperrt werden Das jeweils beste Verfahren ist abhangig von der Art der Datenbank der Haufigkeit von Anderungen und der Anzahl der gleichzeitigen Nutzer Multi Locking Bearbeiten nbsp Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen beispielsweise Einzelnachweisen ausgestattet Angaben ohne ausreichenden Beleg konnten demnachst entfernt werden Bitte hilf Wikipedia indem du die Angaben recherchierst und gute Belege einfugst Multi Locking gehort zum pessimistischen Locking und ermoglicht ein Deadlock freies Programmieren Beim MultiLock werden die Locks gleich am Anfang des Synchronisierungsblocks reserviert und bilden einen MultiLock Bei MultiLocks konnen keine Deadlocks entstehen weil ein MultiLock nur dann gestartet wird wenn alle benotigten Locks verfugbar sind Wahrend der Ausfuhrung von MultiLock konnen keine neuen Locks verwendet werden Die einzelnen zum MultiLock gehorenden Locks konnen jedoch freigegeben und in anderen MultiLocks verwendet werden Implementierung BearbeitenDer zentrale Aspekt von Locks ist die Fahigkeit einen Prozess der gerade nicht bedient werden kann so lange warten zu lassen bis das Lock frei ist das entspricht der Funktion warte bis die im Pseudocode weiter unten zur Anwendung kommen wird Das Warten auf eine Bedingung ist grundsatzlich auf zwei Arten moglich Die erste Moglichkeit ist die Umsetzung mit Hilfe des Prozess Schedulers also des Betriebssystems bzw der Laufzeitumgebung siehe Time Sharing Der Scheduler kennt das Lock und weist dem Prozess solange keine Rechenzeit zu bis das Lock frei ist Das ist meist nur dann moglich wenn der Lock Mechanismus vom Betriebssystem bzw der Laufzeitumgebung bereitgestellt wird denn nur dann kann der Scheduler das Lock und seinen aktuellen Zustand kennen Alternativ kann die Laufzeitumgebung auch ein Monitor Konzept unterstutzen in dem dies durch die Funktionen wait auf eine Bedingungsvariable und notify beendet wait auf die Bedingungsvariable umgesetzt wird die Bedingung wird dann in einem kritischen Abschnitt des Monitors gepruft Die Umsetzung von warte bis ware dann folgendermassen moglich Funktion warte bis Parameter bedingung solange nicht bedingung wait bei jedem notify wird die Bedingung erneut gepruft Das setzt voraus dass beim Andern der Variablen auf die sich die Bedingung bezieht stets notify aufgerufen wird so dass die Bedingung erneut gepruft wird Die zweite Moglichkeit ist die Umsetzung als Spinlock Der Prozess pruft in einer Schleife standig ob das Lock frei ist und fahrt erst dann fort Dies ist auch ohne Unterstutzung des Schedulers moglich hat aber den Nachteil dass der Prozess Rechenzeit verbraucht wahrend er wartet aktives Warten bzw Busy Waiting Wenn das Betriebssystem bzw die Laufzeitumgebung eine Moglichkeit bietet einen Prozess fur eine vorgegebene Zeit schlafen zu lassen sleep so ist das nicht ganz so ungunstig da nur in regelmassigen Abstanden etwas Rechenzeit gebraucht wird um das Lock zu prufen man spricht auch von slow busy waiting oder lazy polling Bietet das Betriebssystem diese Moglichkeit aber nicht so beansprucht der Prozess wahrend des Wartens die volle Rechenleistung des Systems und bremst dadurch andere laufende Prozesse aus Die Umsetzung von warte bis ware mit der Moglichkeit zu schlafen ahnlich wie oben nur mit dem Unterschied dass die Bedingung in regelmassigen Abstanden gepruft wird und nicht nur wenn sich die betreffenden Variablen andern Funktion warte bis Parameter bedingung solange nicht bedingung sleep 1 Sekunde die Bedingung wird einmal pro Sekunde gepruft Locking ist einfach zu implementieren wenn zum Ablauf Setze die Blockierung wenn sie im Moment frei ist eine atomare Anweisung existiert Wenn hingegen zwischen der Prufung ob der Lock gerade frei ist und dessen Belegung ein zweiter Prozess ebenfalls prufen kann so beschliessen beide dass der Lock zu setzen ist und jetzt ihnen gehort Das Gleiche gilt insbesondere auch fur mehrere Threads eines Prozesses Beispiel BearbeitenOhne Locking sog Race Condition Prozess 1 Prozess 2liest von Ressourceliest von Ressource verandert Daten schreibt auf Ressourceverandert Daten schreibt auf RessourceDie Veranderungen von Prozess 2 werden somit von Prozess 1 uberschrieben und sind verloren Solche Fehler sind manchmal schwer zu reproduzieren da sie zufallig auftreten Mit Locking Prozess 1 Prozess 2Ressource wird reserviert liest von Ressourceversucht von Ressource zu lesen muss warten Lock greift verandert Daten schreibt auf Ressource Ressource wird freigegebenRessource wird reserviert liest von Ressource verandert Daten schreibt auf Ressource Ressource wird freigegebenBeide Anderungen sind in der Ressource enthalten Ein anschaulicheres Beispiel konnte ein falsch implementierter Bankautomat sein Ohne Locking Guthaben Konto 100 Person 1 Person 2liest Kontostand 100 liest Kontostand 100 Hebt 100 ab schreibt neuen Kontostand 100 100 0 zahlt 50 ein schreibt neuen Kontostand 100 50 150 Neuer Stand 150 falsch Mit Locking Guthaben Konto 100 Person 1 Person 2Zugriff auf Bankkonto wird reserviert liest Kontostand 100 versucht Kontostand zu lesen Lock greift Person 2 muss warten zahlt 50 ein schreibt neuen Kontostand 100 50 150 Zugriff auf Bankkonto wird freigegebenLock frei Zugriff auf Bankkonto wird reserviert liest Kontostand 150 hebt 100 ab schreibt neuen Kontostand 150 100 50 Zugriff auf Bankkonto wird freigegebenNeuer Stand 50 richtig Siehe auch BearbeitenSperreskalationLiteratur BearbeitenJames H Anderson Yong Jik Kim Ted Herman Shared memory mutual exclusion major research trends since 1986 In Distrib Comput Band 16 Nr 2 3 Springer Verlag September 2003 ISSN 0178 2770 S 75 110 doi 10 1007 s00446 003 0088 6 M Raynal D Beeson Algorithms for mutual exclusion MIT Press Cambridge MA 1986 ISBN 0 262 18119 3 Abgerufen von https de wikipedia org w index php title Lock amp oldid 238783601