Copy-on-write: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Duplicazione della risorsa virtuale: riferito a "tentativo", non a "scrittura"
Riga 52:
== Principali applicazioni ==
 
La tecnica del ''copy-on-write'' è spesso utilizzata dai [[sistema operativo|sistemi operativi]] per la gestione delle [[protezione della memoria|pagine di memoria]] in regime di [[memoria virtuale]]: le pagine condivise possono essere marcate come di sola lettura in modo tale che gli accessi in scrittura vengano intercettati dalla [[Memoryunità managementdi unitgestione della memoria|MMU]] del processore, che solleva un'[[eccezione (informatica)#Eccezioni hardware|eccezione]] e passa il controllo ad un'apposita funzione di gestione del [[kernel]] che provvede alla duplicazione fisica della pagina interessata prima che la scrittura venga ripresa ed eseguita.
 
Il ''copy-on-write'' può ad esempio essere sfruttato quando un [[processo (informatica)|processo]] richiede (attraverso la [[chiamata di sistema]] ''[[fork (programmazione)|fork]]'' o analoga) la creazione di un nuovo [[processo figlio]], inizialmente identico a sé stesso,<ref>Il vantaggio di tale approccio è particolarmente evidente nei sistemi in cui il caricamento in memoria di un nuovo programma è scomposto nelle due operazioni di <kbd>[[fork (programmazione)|fork]]</kbd> ed <kbd>[[exec(2)|exec]]</kbd>: il [[processo figlio]] originante dalla <kbd>fork</kbd> non necessita davvero della copia dei dati del processo originale, giacché la successiva chiamata ad <kbd>exec</kbd> li sostituirà quasi immediatamente con quelli del nuovo programma.</ref> oppure per ottimizzare la creazione di [[buffer]] di grandi dimensioni, in particolare se [[sparsità|sparsi]].<ref>Grandi [[buffer]] [[inizializzazione|inizializzati]] a zero, quali quelli prodotti dalla funzione <kbd>[[calloc]]</kbd> in [[C (linguaggio)|C]], possono essere ''simulati'' dal sistema facendo puntare tutte le pagine virtuali di memoria necessarie a contenerlo verso un'unica pagina fisica contenente soli byte nulli; solo in seguito, se e quando l'applicazione tenterà di scrivere in tale buffer, il sistema provvederà ad [[Allocazione della memoria|allocare]] fisicamente le pagine di memoria strettamente necessarie.</ref>