Sind die Systemaufrufe read () und write () von POSIX atomar?

Ich versuche einen Datenbankindex basierend auf der Datenstruktur zu implementieren (BVerknüpfung Baum) und Algorithmen, die Lehman und Yao indieses Papier. Auf Seite 2 geben die Autoren an, dass:

Die Festplatte ist in Abschnitte mit fester Größe unterteilt (physische Seiten; in diesem Dokument entsprechen diese den Knoten des Baums).Dies sind die einzigen Einheiten, die von einem Prozess gelesen oder geschrieben werden können. [Hervorhebung von mir] (...)

(...) Ein Prozess darf eine Festplattenseite sperren und entsperren. Diese Sperre verleiht diesem Prozess exklusive Änderungsrechte für diese Seite. auch ein ProzessMuss Lassen Sie eine Seite sperren, um diese Seite zu ändern. (...)Schlösserunterlassen Sie Verhindern, dass andere Prozesse die gesperrte Seite lesen. [Hervorhebung von mir]

Ich bin mir nicht ganz sicher, ob meine Interpretation korrekt ist (ich bin es nicht gewohnt, akademische Arbeiten zu lesen), aber ich denke, dass aus den hervorgehobenen Sätzen geschlossen werden kann, dass die Autoren die Operationen, die eine Seite lesen und schreiben, als "atomar" bezeichnen. in dem Sinne, dass, wenn ein Prozess A bereits mit dem Lesen (bzw. Schreiben) einer Seite begonnen hat, ein anderer Prozess B möglicherweise nicht mit dem Schreiben (bzw. Lesen) derselben Seite beginnt, bis A seinen Lese- (bzw. Schreib-) Vorgang abgeschlossen hat . Das gleichzeitige Lesen mehrerer Prozesse auf derselben Seite ist natürlich eine legitime Bedingung, ebenso wie das gleichzeitige Ausführen willkürlicher Operationen auf ausschließlich unterschiedlichen Seiten (Prozess A auf Seite P, Prozess B auf Seite Q, Prozess C auf Seite R usw.). ).

Ist meine Interpretation korrekt?

Kann ich POSIX übernehmen?read() undwrite() Systemaufrufe sind "atomar" im oben beschriebenen Sinne? Kann ich mich darauf verlassen, dass diese Systemaufrufe eine interne Logik haben, um festzustellen, ob es sich um einen bestimmten Wert handelt?read() oderwrite() Der Aufruf sollte vorübergehend blockiert werden, basierend auf der Position des Dateideskriptors und der angegebenen Größe des zu lesenden oder zu schreibenden Blocks.

Wenn die Antwort auf die obigen Fragen "Nein" lautet, wie soll ich meinen eigenen Schließmechanismus rollen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage