Copy-on-write

Från Wikipedia

Copy-on-write (även kallad COW, engelska: "kopiera vid skrivning") är en optimeringsstrategi som används av datorprogrammering, vanligen i operativsystemet. Den innebär att kopior skapas endast vid behov, nämligen då kopiorna ändras var för sig.

Idén bakom detta är om flera kallar på en resurs, pekas alla till samma källa. Om någon gör en förändring på källan skapas en lokal kopia, så ingen annan påverkas av förändringen. För var och en av processerna ser det ut som om de hela tiden skulle ha en egen kopia; skapandet av referenser och lokala kopior sköts i bakgrunden av operativsystemet.

Copy-on-write kan enkelt implementeras i moderna datorarkitekturer där processerna använder virtuella minnesadresser och den delade minnesrymden kan märkas som skrivskyddad. Då endera processen skriver till en sida som är skrivskyddad ges kontrollen åt operativsystemet. Istället för att ge ett felmeddelande kopierar systemet sidan, ändrar referenserna och låter processen fortsätta som om inget hänt.

Tekniken är särskilt viktig i Unix och unixliknande system, där nya processer skapas genom systemanropet fork, som skapar en kopia av den ursprungliga processen. Ofta ersätts kopian direkt därefter med ett annat datorprogram genom systemanropet exec. Utan copy-on-write skulle hela det ursprungliga programmets minnesrymd först kopieras, till ingen nytta, vilket för stora program skulle vara mycket resurskrävande. Varianter av fork, där kopieringen undveks, infördes innan copy-on-write utvecklades.