Kopiowanie przy zapisie
Z Wikipedii
Kopiowanie przy zapisie (ang. copy-on-write) — technika optymalizacji używana w programowaniu komputerów, gdy istnieje potrzeba współdzielenia względnie dużej ilości danych (np. między wątkami, procedurami), co do których nie ma pewności, że zostaną zmodyfikowane przez używające je obiekty.
Początkowo zamiast rzeczywistego kopiowania pamięci - które jest kosztowne czasowo jak również wymaga dodatkowej pamięci - zwracany jest wskaźnik do oryginalnych danych; kopiowanie jest wykonywane dopiero wtedy, gdy zachodzi potrzeba zmodyfikowania danych.
Najważniejszą zaletą jest to, że jeżeli nigdy nie będzie żadnych zmian, nie będzie również potrzeby wykonywania prawdziwej kopii.
Ta technika jest stosowna na przykład w klasie string biblioteki standardowej C++.
[edytuj] Zastosowanie kopiowania przy zapisie w systemach operacyjnych
Kopiowanie przy zapisie jest wykorzystywane przez system operacyjny w celu szybszego wykonywania funkcji fork. Funkcja fork tworzy proces potomny, który posiada dokładną kopię kontekstu procesu nadrzędnego, jak również kopię jego pamięci. Ponieważ kopiowanie pamięci jest czasochłonne, dlatego zamiast kopiowania system operacyjny — korzystając z mechanizmu stronicowania — początkowo odwzorowuje przestrzeń adresową procesu potomnego na pamięć fizyczną zarezerwowaną dla procesu nadrzędnego.
Dopóki procesy nadrzędny i potomny czytają tę pamięć, w żaden sposób sposób nie wpływają na siebie. Dopiero gdy jeden z procesów spróbuje coś zapisać, system operacyjny tworzy kopię danej strony pamięci i od tej chwili proces nadrzędny i potomny zaczynają odwoływać się do fizycznie różnych stron.