# Còpia zero

"Còpia zero" descriu les operacions de l'ordinador en què la CPU no realitza la tasca de copiar dades d'una àrea de memòria a una altra o en les quals s'eviten còpies de dades innecessàries. Això s'utilitza amb freqüència per estalviar cicles de CPU i amplada de banda de memòria en moltes tasques que consumeixen molt de temps, com per exemple quan es transmet un fitxer a gran velocitat a través d'una xarxa, etc., millorant així el rendiment dels programes (processos) executats per un ordinador.

## Principi

Les tècniques de programació de còpia zero es poden utilitzar quan s'intercanvien dades dins d'un procés d'espai d'usuari (és a dir, entre dos o més fils, etc.) i/o entre dos o més processos (vegeu també el problema productor-consumidor) i/o quan les dades s'han de s'hi pot accedir/copiar/desplaçar dins de l'espai del nucli o entre un procés d'espai d'usuari i parts de l'espai del nucli dels sistemes operatius (SO).
En general, quan un procés d'espai d'usuari ha d'executar operacions del sistema com llegir o escriure dades des d'un dispositiu (és a dir, un disc, una NIC, etc.) a través de les seves interfícies de programari d'alt nivell o com moure dades d'un dispositiu a un altre, etc., ha de realitzar una o més trucades al sistema que després el sistema operatiu executa a l'espai del nucli.
Si les dades s'han de copiar o moure de l'origen a la destinació i totes dues es troben dins de l'espai del nucli (és a dir, dos fitxers, un fitxer i una targeta de xarxa, etc.), llavors les còpies de dades innecessàries, de l'espai del nucli a l'espai d'usuari i de l'espai d'usuari a l'espai d'usuari. L'espai del nucli, es pot evitar mitjançant l'ús de trucades especials (de còpia zero), normalment disponibles en les versions més recents dels sistemes operatius populars.

## Implementacions de maquinari

Una implementació primerenca va ser IBM OS/360 on un programa pot indicar al subsistema de canals perquè llegeixi blocs de dades d'un fitxer o dispositiu en una memòria intermèdia i escrigui en un altre des del mateix buffer sense moure les dades.
Les tècniques per crear programari de còpia zero inclouen l'ús de la còpia basada en l'accés directe a la memòria (DMA) i l'assignació de memòria mitjançant una unitat de gestió de memòria (MMU). Aquestes característiques requereixen suport de maquinari específic i solen implicar requisits d'alineació de memòria particulars.
Un enfocament més nou utilitzat per l'Arquitectura de sistema heterogeni (HSA) facilita el pas de punters entre la CPU i la GPU i també altres processadors. Això requereix un espai d'adreces unificat per a la CPU i la GPU.

## Interfícies del programa

El nucli de Linux admet la còpia zero mitjançant diverses trucades al sistema, com ara:
* enviarfitxer, enviarfitxer64;
* empalmament;
* samarreta;
* vmsplice;
* process_vm_readv;
* process_vm_writev;
* copy_file_range;
* endolls en brut amb paquet mmap o AF_XDP.
Alguns d'ells s'especifiquen a POSIX i, per tant, també estan presents als nuclis BSD o IBM AIX, alguns són exclusius de l'API del nucli de Linux.
Microsoft Windows admet la còpia zero mitjançant almenys aquesta trucada al sistema:
* TransmetFile.

## Referències

* ↑ «IBM Developer» (en anglès). [Consulta: 10 setembre 2023].
* ↑ Tony. «Linux — Zero Copy» (en anglès), 23-08-2022. [Consulta: 10 setembre 2023].
* ↑ «Improve file download efficiency with Zero Copy» (en anglès), 13-03-2022. [Consulta: 10 setembre 2023].
* ↑ «Improving Streaming Application Performance with Zero-copy and Asynchronous TDMS» (en anglès). [Consulta: 10 setembre 2023].