194 votes

Qu'est-ce que la copie sur écriture?

Je voudrais savoir ce qu'est la copie sur écriture et à quoi sert-elle? Le terme 'tableau de copie sur écriture' est mentionné à plusieurs reprises dans les didacticiels JDK de Sun, mais je ne comprenais pas ce que cela signifiait.

228voto

Andrew Hare Points 159332

J'allais écrire ma propre explication, mais cet article de Wikipedia assez bien, il résume.

Ici est le concept de base:

Copy-on-write (parfois appelé "VACHE") est une stratégie d'optimisation utilisé dans la programmation informatique. L'idée fondamentale est que si plusieurs appelants demander pour les ressources qui sont initialement indiscernables, vous pouvez leur donner des pointeurs vers la même ressource. Cette fonction peut être maintenu jusqu'à ce que l'appelant tente de modifier sa "copie" de la ressource, à quel point une véritable copie privée est créée pour éviter les changements de devenir visible à tout le monde. Tout cela se fait de manière transparente pour les appelants. Le principal avantage est que si un appelant ne fait jamais aucune modification, aucune copie privée doivent jamais être créé.

Ici aussi, est une application d'un usage commun de la VACHE:

La VACHE concept est également utilisé dans le maintien de la photo instantanée sur les serveurs de base de données telles que Microsoft SQL Server 2005. Des instantanés de préserver une vue statique d'une base de données en stockant une pré-modification de la copie de données lors du sous-jacente de données sont mises à jour. Instantanés sont utilisés pour le test utilise ou un moment dépendant de rapports et ne doit pas être utilisé pour remplacer les sauvegardes.

81voto

Charlie Martin Points 62306

"La copie sur écriture" signifie plus ou moins à quoi il ressemble: tout le monde a une seule copie partagée de la même données jusqu'à ce qu'il écrit, et ensuite, une copie est faite. Généralement, copie sur écriture est utilisée pour résoudre la simultanéité sortes de problèmes. En ZFS, par exemple, des blocs de données sur le disque sont alloués copy-on-write; tant qu'il n'y a pas de changements, vous conservez l'original de blocs; un changement changé, seules les blocs affectés. Cela signifie que le nombre minimum de nouveaux blocs sont alloués.

Ces changements sont aussi généralement mis en œuvre pour être transactionnelle, c'est à dire, ils ont les propriétés ACID. Ceci élimine certains problèmes de concurrence, car alors vous avez la garantie que toutes les mises à jour sont atomiques.

12voto

Shamik Points 1780

Je ne vais pas répéter la même réponse sur la Copie sur Écriture. Je pense que Andrew et Charlie a déjà fait, il est très clair. Je vais vous donner un exemple à partir de l'OS du monde, juste pour mentionner quelle est l'étendue de ce concept est utilisé.

Nous pouvons utiliser fork() pour créer un nouveau processus ou vfork() pour créer un nouveau processus. vfork suit le concept de copie sur écriture. Par exemple, le processus de l'enfant créé par vfork sera de partager les données et de segment de code avec le processus parent. Cela accélère la croisée des temps. Il est prévu d'utiliser vfork si vous effectuez exec suivie par vfork. Donc, vfork permettra de créer le processus de l'enfant qui permettra de partager des données et de segment de code avec son parent, mais quand nous appeler exec, il va charger l'image d'un nouvel exécutable dans l'espace d'adressage du processus enfant.

10voto

harpo Points 17399

Juste pour donner un autre exemple, Mercurial utilise copy-on-write pour faire le clonage local référentiels vraiment "bon marché" de l'opération.

Le principe est le même que les autres exemples, sauf que vous parlez de la physique des fichiers au lieu de les objets en mémoire. D'abord, un clone n'est pas un doublon, mais un lien en dur à l'original. Dès que vous modifiez les fichiers dans le clone, les copies sont écrits pour représenter la nouvelle version.

-1voto

Chris Points 13472

Il est également utilisé dans Ruby «Enterprise Edition» pour économiser de la mémoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X