Este artículo o sección necesitareferencias que aparezcan en unapublicación acreditada. Busca fuentes:«Copy-on-write» –noticias ·libros ·académico ·imágenes Este aviso fue puesto el 20 de enero de 2009. |
EnInformática,copy-on-write (inglés para «copiar al escribir», a veces abreviadoCOW) es una política de optimización utilizada enprogramación. Si múltiplesprocesos 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 es útil principalmente enmemoria virtual. Cuando un proceso crea una copia de sí mismo, las páginas cargadas enmemoria que puedan ser modificadas por dicho proceso o su copia se marcan como copy-on-write. Cuando un proceso modifica la memoria, elnú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óncalloc 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 launidad de manejo de memoria que ciertas páginas en elespacio de direcciones del proceso son de solo 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 deviolació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 solo aumenta cuando se realizan operaciones de escritura, es posible implementartablas hash muy eficientes que solo 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 lamemoria de intercambio; cuando el núcleo escribe en una página, debe copiarla si esta está marcada como copy-on-write.
COW también se utiliza fuera del núcleo, como enbibliotecas de funciones,aplicaciones,[1] e incluso en otras partes delsistema operativo. La clasestring provista por la biblioteca estándar deC++, 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 comoBochs,QEMU,Linux-VServer yUser-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 mismaimagen 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 deinstantáneas (snapshots) en sistemas de almacenamiento,[2] en servidores de bases de datos comoMicrosoft SQL Server 2005 o en el servicio Shadow Copy[3] de Microsoft. Western Digital, por su parte, hace uso de esta técnica en medios que requierennivelación del desgaste (wear levelling) para alargar su vida útil o son del tipoWrite Once Read Many.