Was ist Copy-on-Write?
Copy-on-Write, auch copy-on-write (COW) geschrieben, wird manchmal auch als implizites Sharing oder Shadowing bezeichnet. Es handelt sich um eine Technologie zur Verwaltung von Ressourcen, die in der Computerprogrammierung eingesetzt wird, um eine „Kopie“ oder ein „Duplikat“ auf veränderbare Ressourcen effizient zu implementieren.
Wenn eine Ressource dupliziert, aber nicht verändert wird, ist es nicht notwendig, eine neue Ressource zu erstellen, damit die Ressource von der Kopie und der ursprünglichen Ressource gemeinsam genutzt werden kann. Bei Änderungen muss jedoch eine Kopie erstellt werden. Die Technik – der Kopiervorgang wird also bis zum ersten Schreibvorgang aufgeschoben.
Durch diese gemeinsame Nutzung von Ressourcen ist es möglich, den Ressourcenverbrauch von unveränderten Kopien erheblich zu reduzieren und gleichzeitig einen geringen Overhead für ressourcenverändernde Operationen zu erzeugen.
Anwendungen der Copy-on-Write Technologie
Im Allgemeinen kann die Copy-on-Write Technologie in drei Bereichen eingesetzt werden.
1. Copy-on-Write in der Verwaltung des virtuellen Speichers
Copy-on-Write wird hauptsächlich bei der gemeinsamen Nutzung des virtuellen Speichers von Betriebssystemprozessen verwendet, und zwar bei der Implementierung des Systemaufrufs fork. Der Prozess verändert normalerweise keinen Speicher und führt sofort einen neuen Prozess aus, der den Adressraum vollständig ersetzt.
Copy-on-Write kann auch mit Hilfe der Seitentabelle implementiert werden, indem bestimmte Speicherseiten als schreibgeschützt markiert werden und die Anzahl der Verweise auf die Seite festgehalten wird. Sie kann erweitert werden, um eine effiziente Speicherzuweisung zu unterstützen, indem eine Seite des physischen Speichers mit Nullen gefüllt wird.
Copy-on-Write Seiten werden auch im Dienstprogramm des Linux-Kernels zum Zusammenführen gleicher Seiten verwendet. Das Laden der Bibliotheken für eine Anwendung macht sich die COW-Technik ebenfalls zunutze.
2. Copy-on-Write in Software
Außerdem kann Copy-on-Write sowohl in Bibliotheken, Anwendungen als auch im Systemcode angewendet werden. In Multithreading-Systemen kann COW ohne traditionelles Locking eingesetzt werden und stattdessen Compare-and-Swap zum Inkrementieren oder Dekrementieren des internen Referenzzählers verwenden.
In der Programmiersprache PHP sind alle Typen außer Referenzen als Copy-on-Write implementiert. Im Qt-Framework sind viele Typen COW. Da die Kopien billig sind, können Qt-Typen häufig sicher von mehreren Threads verwendet werden, ohne dass Sperrmechanismen wie Mutexe (wechselseitige Ausschlüsse) erforderlich sind. Die Vorteile von Copy-on-Write gelten also sowohl für Single- als auch für Multithreading-Systeme.
3. Kopieren beim Schreiben in Computerspeichern
Copy-on-Write kann als zugrunde liegender Mechanismus für Snapshots verwendet werden, wie sie von der logischen Datenträgerverwaltung, von Dateisystemen wie ZFS und Btrfs sowie von Datenbankservern wie Microsoft SQL Server angeboten werden.
Normalerweise werden bei Snapshots nur die geänderten Daten gespeichert. Sie werden in der Nähe des Hauptarrays gespeichert. Sie sind also nur eine schwache Form der inkrementellen Sicherung und können eine vollständige Sicherung nicht ersetzen.
Vollständiges vs. inkrementelles vs. differentielles Backup: Was ist besser?
Einige Systeme verwenden auch Copy-on-Write, um unscharfe Backups zu vermeiden, die sonst entstehen, wenn sich eine Datei in der Gruppe der gesicherten Dateien während des Backups ändert.
Bei der Implementierung von Snapshots werden zwei Techniken angewendet:
• Copy-on-Write (COW): Wenn eine Schreibanforderung gestellt wird, werden die Daten in einen neuen Speicherbereich kopiert. Anschließend werden die ursprünglichen Daten geändert.
• Umleiten-auf-Schreiben (ROW): Der ursprüngliche Speicherbereich wird nie verändert. Wenn eine Schreibanforderung gestellt wird, wird sie von den Originaldaten in einen neuen Speicherbereich umgeleitet.
Trotz ihrer Namen bezieht sich Copy-on-Write in der Regel auf die zweite Technologie ROW. COW führt zwar zwei Schreibvorgänge im Vergleich zu ROW durch, ist aber schwer effizient zu implementieren und wird nur selten verwendet.
Schmutzige COW-Schwachstelle
Im Oktober 2016 wurde eine Sicherheitslücke im Linux-Kernel entdeckt, die eine Race Condition in seinem Copy-on-Write Mechanismus ausnutzte. Sie erhielt den Spitznamen Dirty COW. Dieser Timing-Angriff (CVE-2016-5195) würde es einem lokalen Benutzer ermöglichen, den schreibgeschützten Teil der COW-Daten zu ändern. Es wurde festgestellt, dass fast alle Systeme betroffen sind, die auf den Linux-Kernel angewiesen sind, einschließlich Geräte mit Android 7 oder älter. Zum Glück wurde diese Sicherheitslücke schnell gepatcht.
Windows 11 Assistenzsoftware empfohlen
Das neue und leistungsstarke Windows 11 wird Ihnen viele Vorteile bringen. Gleichzeitig kann es aber auch einige unerwartete Schäden wie Datenverlust mit sich bringen. Es wird daher dringend empfohlen, dass Sie Ihre wichtigen Dateien vor oder nach dem Upgrade auf Win11 mit einem robusten und zuverlässigen Programm wie MiniTool ShadowMaker sichern, das Sie dabei unterstützt, Ihre wachsenden Daten automatisch und planmäßig zu schützen!
MiniTool ShadowMaker TrialKlicken zum Download100%Sauber & Sicher