Das Copy-On-Write-Verfahren (kurz COW bzw. CoW genannt, englisch wörtlich für „Kopieren-beim-Schreiben“) ist in der Datenverarbeitung eine Optimierungsmethode zur Vermeidung unnötiger Kopien und Kopiervorgänge, beispielsweise zwischen Prozessen unter unixartigen Systemen, insbesondere bei oder nach einem fork-Systemaufruf.

Die Grundidee des Verfahrens ist, dass ein Duplikat einer Datei nicht gespeichert wird. Erst wenn das Duplikat verändert wird, also nicht mehr dem Original entspricht, muss diese neue Datei gespeichert werden, damit auch der neue Inhalt abrufbar ist. Solange die Kopie dem nicht verändert haben, reicht es, das Original vorzuhalten.[1] Der Kopie wird zwar eine eigene Inode zugewiesen, die darin gespeicherten Zeigerstrukturen, welche auf die Datenblöcke zeigen, stimmen allerdings mit denen des Originals überein. Erst bei Veränderung einer der Datenblöcke wird für die Änderung ein neuer Datenblock verwendet und der entsprechende Zeiger neu gesetzt. Bei nicht geänderten Datenblöcken können weiterhin die originalen Blöcke referenziert bleiben.

Hauptspeicher

Wenn der Kernel eine Speicherseite im Adressraum eines anderen Prozesses verfügbar machen muss, ist es nicht nötig, die Daten tatsächlich zu kopieren oder ein weiteres Mal im Hauptspeicher anzulegen, wenn die Daten lediglich ausgelesen, aber nicht beschrieben werden. Es genügt, wenn erst einmal die beiden Prozesse auf ein und dieselbe Speicherseite zugreifen. Erst wenn einer der beiden Prozesse die Daten zu ändern versucht, müssen diese tatsächlich (und dann auch nur teilweise) kopiert werden, da sich die Inhalte der Speicherseiten dann unterscheiden.

Dies wird auf modernen Hauptprozessoren meist mit Hilfe von Paging realisiert, wobei die beiden Prozesse auf die gleiche Speicherseite zugreifen. Sowohl im Adressraum des Besitzers des Originals als auch in dem des Besitzers der Kopie wird dieser gemeinsame Speicherbereich als „nur lesbar“ markiert. Findet ein Schreibzugriff statt, wird das Betriebssystem informiert, so dass dieses vor dem tatsächlichen Schreibzugriff die betroffene Speicherseite durch eine tatsächliche Kopie ersetzen kann.

Dateisystem

Bei Dateisystemen bedeutet Copy-On-Write, dass geänderte Blöcke nicht überschrieben, sondern zunächst vollständig an einen freien Platz kopiert werden.[2] Danach werden Verweise auf den Block in den Metadaten aktualisiert. Copy-On-Write ermöglicht transaktionsbasierende Dateisysteme, die unter anderem ohne Verzögerung Speicherabbilder (oder Schnappschüsse derselben) anlegen können. Alte Metadaten und Blöcke werden dabei nicht gelöscht, sondern dem jeweiligen Speicherabbild zugeordnet.

ZFS, Btrfs, APFS[3], NILFS, Bcachefs sowie XFS[4] sind bekannte Vertreter von Dateisystemen, die auf Copy-on-Write bauen.

Einzelnachweise

Siehe auch

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.