Copy-on-Write (CoW), también conocido como 'escritura en copia', es una técnica de gestión de recursos que retrasa la duplicación de un recurso hasta el momento en que se realiza una modificación. Inicialmente, múltiples entidades (por ejemplo, procesos o hilos) comparten una única instancia del recurso. Cuando una de estas entidades intenta escribir en el recurso compartido, el sistema operativo o el subsistema de almacenamiento intercepta la operación, crea una copia privada del recurso para esa entidad específica, y luego permite que la escritura proceda en la copia. Las demás entidades continúan accediendo a la versión original sin modificar. Este mecanismo reduce el consumo de memoria y el overhead de CPU al evitar copias innecesarias.
La implementación de CoW es ubicua en sistemas operativos y bases de datos. Un ejemplo clásico es la bifurcación de procesos (fork()) en sistemas tipo Unix: cuando un proceso padre crea un proceso hijo, ambos comparten inicialmente las mismas páginas de memoria física en modo de solo lectura. Solo cuando el proceso padre o el hijo intenta escribir en una de estas páginas, se realiza una copia de esa página específica para el proceso que realiza la escritura. Otro ejemplo es en sistemas de archivos como ZFS o Btrfs, donde las instantáneas (snapshots) se implementan de forma eficiente utilizando CoW, compartiendo bloques de datos inmutables y solo copiando los bloques modificados al escribir. En entornos de virtualización, los discos virtuales pueden usar CoW para optimizar el almacenamiento de máquinas virtuales clonadas.
Para un Arquitecto de Sistemas, CoW es una técnica fundamental para optimizar el rendimiento y la eficiencia de los recursos, especialmente en sistemas con alta concurrencia o donde la duplicación de datos es frecuente. Permite reducir significativamente el consumo de memoria RAM y el espacio en disco, así como mejorar la velocidad de operaciones como la creación de procesos o la toma de instantáneas. Sin embargo, introduce una sobrecarga (overhead) en el momento de la primera escritura, ya que requiere una interrupción (trap), una asignación de memoria y una copia. El arquitecto debe evaluar este trade-off: la eficiencia en el acceso de lectura y la creación inicial frente al costo potencial de la primera escritura. Es crucial entender cómo CoW afecta la latencia en escenarios de escritura intensiva y cómo interactúa con la gestión de memoria y el rendimiento del I/O en el diseño de sistemas distribuidos y bases de datos.