# Buffer duplo

Em ciência da computação, buffer duplo é uma técnica usada para minimizar o atraso em operações de entrada/saída que usam buffers. Somente um buffer em uso pode resultar em buffer underrun e buffer overflow, problemas relacionados à falta de sincronia entre a escrita e a leitura de dados do buffer. Com dois buffers é possível utilizá-los em paralelo de forma que enquanto um deles é lido, o outro é escrito.
No Microsoft Windows, buffer duplo também significar copiar dados entre dois buffers para transferências de DMA. Não é uma questão de desempenho mas de requisitos de endereçamento.
Um driver de dispositivo é um sistema em que a técnica do buffer duplo é frequentemente usada. Um exemplo é a incompatibilidade de certos dispositivos de funcionarem em sincronia com outros, como certos discos rígidos e memórias RAM.
Uma variação da técnica é o buffer triplo.

## Rede de Petri do buffer duplo

A seguinte rede de Petri demonstra o funcionamento dum buffer duplo. As transições W1 e W2 representam a escrita nos buffers 1 e 2 respectivamente, enquanto R1 e R2 representam a leitura do buffers 1 e 2. No início somente a transição W1 está habilitada, e após ser realizada, tanto R1 e R2 estão habilitadas e podem ser processadas em paralelo. Quando terminam, R2 e W1 procedem em paralelo e assim por diante.
Logo, após o momento inicial em que W1 é realizada, o sistema é periódico e as transições são habilitadas sempre em pares (R1 com W2 e R2 com W1).

## Uso em computação gráfica

Em computação gráfica, buffers duplos são usados para reduzir evidências visíveis do processo de desenho da tela. Monitores de vídeo atualizam a tela constantemente, em torno de sessenta vezes por segundo, a partir da memória de vídeo, uma área da memória localizada na placa de vídeo. Portanto, é difícil fazer mudanças na memória de vídeo sem que o monitor apresente os resultados antes da mudança ser completada. Isso resulta em resultados estranhos na tela como piscares e efeito fantasma, entre outros. O buffer duplo pode ser implementado por software ou hardware.
Uma implementação em software usa uma página de vídeo armazenada na memória RAM do sistema onde todas as operações de desenho da tela são feitas. Quando a operação é considerada completa (toda a página ou parte pré-determinada dela), a página de vídeo é copiada para a memória de vídeo (VRAM) em somente uma operação. Geralmente isso é sincronizado com o sistema de atualização de tela do monitor, para que se reduza ainda mais os mesmos efeitos indesejados citados acima. Esse método não é livre de erros e possui uma sobrecarga maior que o método por hardware, pois exige a cópia de determinada área de memória (RAM) para outra (memória de vídeo).
Uma implementação em hardware usa duas páginas de vídeo na própria memória de vídeo. Em dado momento, uma das páginas está sendo apresentada pelo monitor enquanto a outra está sendo construída. Quando o desenho é completado, o papel das páginas de vídeo é invertido. O desenho completado passa a ser apresentado pelo monitor enquanto a outra página de vídeo é reescrita. Geralmente isso é feito através da mudança de um ponteiro que indica o começo da área de dados da memória de vídeo, uma operação bastante rápida. Esse método garante que os efeitos indesejados não aparecerão desde que as páginas sejam invertidas durante o período em que o monitor não está atualizando a tela.

## Uso em sistemas gerenciadores de bancos de dados

Em sistema de gerenciamento de banco de dados, buffers duplos são usados para maximizar os recursos da CPU durante operações de entrada/saída ao otimizar a alternância entre CPU e operações de E/S.
* Portal das tecnologias de informação