Copy-on-write

Copy-on-write

En Informática, Copy-on-write (copiar al escribir, a veces abreviado como "COW") es una política de optimización utilizada en programación. Si múltiples procesos piden recursos que inicialmente son indistinguibles (iguales), se les devuelven punteros al mismo recurso; en el momento en que un proceso intenta modificar su "copia" del recurso, se crea una copia auténtica para prevenir que los cambios producidos por dicho proceso sean visibles por todos los demás. Todo ocurre de forma transparente para los procesos. La principal ventaja de este método es que no se crea ninguna copia adicional del recurso si ningún proceso llega a realizar modificaciones.

Copy-on-write en memoria virtual

Copy-on-write es útil principalmente en memoria virtual. Cuando un proceso crea una copia de sí mismo, las páginas cargadas en memoria que puedan ser modificadas por dicho proceso o su copia se marcan como copy-on-write. Cuando un proceso modifica la memoria, el núcleo del sistema operativo interviene en la operación y crea una copia de forma que los cambios en la memoria ocupada por un proceso no son visibles por el otro.

La función calloc también puede aprovechar esta estrategia teniendo una página de memoria física escrita totalmente con ceros. Cuando se asigna la memoria, todas las páginas devueltas refieren a la página de ceros y se marcan como copy-on-write. De esta manera, la memoria reservada por el proceso no aumenta mientras no se realicen operaciones de escritura. Normalmente, esto se hace solamente para reservas de una gran cantidad de memoria.

La estrategia copy-on-write se puede implementar especificando en la unidad de manejo de memoria que ciertas páginas en el espacio de direcciones del proceso son de sólo lectura. Cuando se intenta escribir en tales páginas, la unidad de manejo de memoria lanza una excepción, es capturada y manejada por el núcleo, que tras las comprobaciones oportunas decide bien emitir una señal de violación de acceso, bien reservar nueva memoria y escribir en esta última la página modificada.

Una gran ventaja de COW es su escaso uso de memoria. Dado que el uso de memoria física sólo aumenta cuando se realizan operaciones de escritura, es posible implementar tablas hash muy eficientes que sólo utilizan una pequeña cantidad adicional de la memoria necesaria para almacenar los objetos que contienen. Sin embargo, los programas implementados de este modo corren el riesgo de salirse de su espacio de direcciones virtual; las páginas en memoria virtual no utilizadas por la tabla hash no podrían ser accedidas por otras partes del programa. El principal problema de COW al nivel del núcleo es la complejidad que añade, aunque no es mayor que la que generan otros mecanismos de memoria virtual más básicos como el uso de la memoria de intercambio; cuando el núcleo escribe en una página, debe copiarla si ésta está marcada como copy-on-write.

Otras aplicaciones de copy-on-write

COW también se utiliza fuera del núcleo, como en bibliotecas de funciones, aplicaciones e incluso en otras partes del sistema operativo. La clase string provista por la biblioteca estándar de C++, por ejemplo, fue diseñada específicamente para permitir implementaciones con copy-on-write. En este contexto, si existe código multihilo, COW puede convertirse en un obstáculo, ya que el marcado de objetos en diferentes hilos necesario para compartir la misma representación para todos los procesos que quieran acceder dichos objetos puede superar fácilmente los beneficios de este mecanismo.

El concepto de copy-on-write también es utilizado en software de virtualización/emulación como Bochs, QEMU, Linux-VServer y User-mode Linux para almacenamiento en un disco virtual. Esto permite una reducción importante en el espacio de disco cuando varias máquinas virtuales pueden utilizar la misma imagen de disco, así como un rendimiento mayor, ya que las lecturas de disco pueden almacenarse en memoria y servirse a las otras máquinas virtuales, sin necesidad de posteriores accesos.

Asimismo, el concepto copy-on-write se utiliza en el mantenimiento de instantáneas (snapshots) en servidores de bases de datos como Microsoft SQL Server 2005 o en el servicio Shadow Copy de Microsoft. Western Digital, por su parte, hace uso de esta técnica en medios que requieren wear levelling para alargar su vida útil o son del tipo Write Once Read Many.

Véase también

Obtenido de "Copy-on-write"

Wikimedia foundation. 2010.

Mira otros diccionarios:

  • Copy-on-write — (sometimes referred to as COW ) is an optimization strategy used in computer programming. The fundamental idea is that if multiple callers ask for resources which are initially indistinguishable, they can all be given pointers to the same… …   Wikipedia

  • Copy-On-Write — Le Copy on write ou copie sur écriture (souvent désigné par son sigle anglais COW) est une stratégie d optimisation utilisée en programmation informatique. L idée fondamentale : si de multiples appelants demandent des ressources initialement …   Wikipédia en Français

  • Copy-On-Write — Das Copy On Write Verfahren (kurz COW genannt, vom Englischen für Kopieren beim Schreiben) ist in der Datenverarbeitung eine Optimierungsmethode zur Vermeidung unnötiger Kopien und Kopiervorgänge, beispielsweise zwischen Prozessen unter… …   Deutsch Wikipedia

  • Copy-on-write — …   Википедия

  • copy-on-write — Kopieren einer veränderten Datei in einen lokalen Bereich beim möglichen Überschreiben der Ursprungsdatei Verfahren des TFS …   Acronyms

  • copy-on-write — Kopieren einer veränderten Datei in einen lokalen Bereich beim möglichen Überschreiben der Ursprungsdatei Verfahren des TFS …   Acronyms von A bis Z

  • copy*/*/*/ — [ˈkɒpi] noun [C] I 1) something that is exactly like something else This is not the original painting – it s a copy.[/ex] Please send a copy of your birth certificate.[/ex] I made copies of the report.[/ex] 2) a single newspaper, book, CD etc… …   Dictionary for writing and speaking English

  • ˌcopy sb ˈin — phrasal verb to send someone a copy of an email or letter that you are sending to another person I ll email her about it, and copy you in.[/ex] …   Dictionary for writing and speaking English

  • ˈcopy sth ˌto sb — phrasal verb to send a copy of a message or letter to someone I accidentally copied the email to everyone in the company.[/ex] …   Dictionary for writing and speaking English

  • Copy constructor — A copy constructor is a special constructor in the C++ programming language creating a new object as a copy of an existing object. The first argument of such a constructor is a reference to an object of the same type as is being constructed… …   Wikipedia


Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.