Was ist das empfohlene Sperren von Dateien, die Unix-Systeme normalerweise verwenden?

7

Ich habe gelesen, dass ein Unix-ähnliches System normalerweise eine empfohlene Sperre für Datei-E / A verwendet, während die obligatorischen Sperren von Microsoft-Betriebssystemen verwendet werden. Wenn ich das obligatorische Sperren richtig verstanden habe, wird die Dateisperre vom Betriebssystem selbst erzwungen. Aber ich verstehe nicht die Intuition von Advisory Locking. Nehmen Sie das Beispiel von zwei Prozessen, sagen Sie "A" und "B", die an der Datei "foo" arbeiten. Nehmen wir an, "A" schreibt in "foo" und "B" liest aus "foo". Wie würde das Sperren von Hinweisen in diesem Szenario funktionieren? Wenn das Betriebssystem / Dateisystem keine Sperre für "foo" erzwingt, wie wird dann die Konsistenz für Lese- und Schreibvorgänge aufrechterhalten?

Geek
quelle
1
"Wie wird die Konsistenz für Lese- und Schreibvorgänge aufrechterhalten?" Weitere Informationen zum Thema "Sperren von Beratungsdatensätzen" finden Sie unter man fcntl: pubs.opengroup.org/onlinepubs/9699919799/functions/fcntl.html (POSIX)
Goldlöckchen

Antworten:

9

Advisory Locking ist für Prozesse gedacht, die "friedlich" zusammenarbeiten. Der Kernel verfolgt die Sperren, erzwingt sie jedoch nicht - es liegt an den Anwendungen, sie zu befolgen. Auf diese Weise muss der Kernel nicht mit Situationen wie Deadlocks umgehen.

In System V Unix wurde die obligatorische Sperrung eingeführt, aber es stellt sich heraus, dass das Design nicht das hellste war. (Das heißt, es gibt Möglichkeiten, dies zu umgehen.) Wenn Sie unter Unixy-Systemen eine echte obligatorische Sperrung benötigen, befolgen Sie ein Client-Server-Entwurfsmuster, bei dem der Server die Autorität für die gemeinsam genutzten Ressourcen ist.

Gegenmodus
quelle
1
Warum heißt es Beratung? Gibt der Kernel Ratschläge zum Anforderungsprozess in Bezug darauf, wem Sperren usw. gehören?
Geek
2
Ja, der Kernel spielt eine Rolle, nicht indem er aktiv berät, sondern wie im Gegenmodus angegeben, indem er die Sperren bereitstellt. Diese funktionieren ähnlich wie Mutexe im Multithreading: Sie sind einer Datei so zugeordnet, wie ein Mutex einer Variablen zugeordnet sein kann. Wenn Sie sie jedoch nicht überprüfen / festlegen, können Sie trotzdem auf die Datei oder Variable zugreifen. Das System ist also kooperativ . Beachten Sie, dass es obligatorische Gründe gibt, warum das obligatorische Sperren von Dateien eigentlich eine schlechte Idee ist - z. B. impliziert dies eine mögliche Nichtzusammenarbeit in Bezug auf gemeinsam genutzte Systemdateien und schafft die Möglichkeit für eine App, die sich schlecht verhält, viele Dinge zu vermasseln.
Goldlöckchen
Diese gavv.github.io/articles/file-locks ist eine gute Lektüre über das Thema.
JGK