<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wx="http://ilps.science.uva.nl/WikiXML/wx" xml:lang="pt" lang="pt">
<head>
<title>Buffer duplo</title>
<meta name="wx_namespace" content="0"/>
<meta name="wx_pagename" content="Buffer_duplo"/>
<meta name="wx_page_id" content="1774208"/>
</head>
<body>
<div id="wx_article">
<wx:section level="1" title="Buffer duplo" id="wxsec1"><h1 class="pagetitle" id="wx1">Buffer duplo</h1>

<p id="wx2">Em <a href="/wpt/Ci%C3%AAncia_da_computa%C3%A7%C3%A3o" title="Ciência da computação" wx:linktype="known" wx:pagename="Ciência_da_computação" wx:page_id="2683" id="wx3">ciência da computação</a>, <b id="wx4">buffer duplo</b> é uma técnica usada para minimizar o atraso em operações de <a href="/wpt/Entrada/sa%C3%ADda" title="Entrada/saída" wx:linktype="known" wx:pagename="Entrada/saída" wx:page_id="208441" id="wx5">entrada/saída</a> que usam <a href="/wpt/Buffer_%28Ci%C3%AAncia_da_computa%C3%A7%C3%A3o%29" title="Buffer (Ciência da computação)" wx:linktype="known" wx:pagename="Buffer_(Ciência_da_computação)" wx:page_id="226945" id="wx6">buffers</a>. Somente um buffer em uso pode resultar em <i id="wx7"><a href="/wpt/Buffer_underrun" class="new" title="Buffer underrun" wx:linktype="unknown" wx:pagename="Buffer_underrun" id="wx8">buffer underrun</a></i> e <i id="wx9"><a href="/wpt/Buffer_overflow" title="Buffer overflow" wx:linktype="known" wx:pagename="Buffer_overflow" wx:page_id="437498" id="wx10">buffer overflow</a></i>, 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.</p>

<p id="wx11">No <a href="/wpt/Microsoft_Windows" title="Microsoft Windows" wx:linktype="known" wx:pagename="Microsoft_Windows" wx:page_id="1933" id="wx12">Microsoft Windows</a>, <b id="wx13">buffer duplo</b> também significar copiar dados entre dois buffers para transferências de <a href="/wpt/DMA" title="DMA" wx:linktype="known" wx:pagename="DMA" wx:page_id="225739" id="wx14">DMA</a>. Não é uma questão de desempenho mas de requisitos de endereçamento.</p>

<p id="wx15">Um <a href="/wpt/Driver_de_dispositivo" title="Driver de dispositivo" wx:linktype="known" wx:pagename="Driver_de_dispositivo" wx:page_id="66044" id="wx16">driver de dispositivo</a> é 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 <a href="/wpt/Disco_r%C3%ADgido" title="Disco rígido" wx:linktype="known" wx:pagename="Disco_rígido" wx:page_id="740" id="wx17">discos rígidos</a> e <a href="/wpt/Mem%C3%B3ria_RAM" title="Memória RAM" wx:linktype="known" wx:pagename="Memória_RAM" wx:page_id="1237" id="wx18">memórias RAM</a>.</p>

<p id="wx19">Uma variação da técnica é o <a href="/wpt/Buffer_triplo" class="new" title="Buffer triplo" wx:linktype="unknown" wx:pagename="Buffer_triplo" id="wx20">buffer triplo</a>.</p>

<div class="wx_image" wx:align="right" wx:thumb="thumb" id="wx21"><a href="/wpt/Imagem:Double_Buffering_Petri_Net.png" title="Rede de Petri de um buffer duplo" wx:linktype="image" wx:pagename="Imagem:Double_Buffering_Petri_Net.png" id="wx22"><img src="/wpt/Imagem:Double_Buffering_Petri_Net.png" alt="Rede de Petri de um buffer duplo" width="200" id="wx23"/></a> 

<div class="thumbcaption" id="wx24">
<p id="wx25">Rede de Petri de um buffer duplo</p>
</div>
</div>

<a id="Rede_de_Petri_do_buffer_duplo" name="Rede_de_Petri_do_buffer_duplo"/>
<wx:section level="2" title="Rede de Petri do buffer duplo" id="wxsec2"><h2 id="wx26">Rede de Petri do buffer duplo</h2>

<p id="wx27">A seguinte <a href="/wpt/Rede_de_Petri" title="Rede de Petri" wx:linktype="known" wx:pagename="Rede_de_Petri" wx:page_id="283289" id="wx28">rede de Petri</a> 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.</p>

<p id="wx29">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).</p>

<a id="Uso_em_computa.C3.A7.C3.A3o_gr.C3.A1fica" name="Uso_em_computa.C3.A7.C3.A3o_gr.C3.A1fica"/>
</wx:section><wx:section level="2" title="Uso em computação gráfica" id="wxsec3"><h2 id="wx30">Uso em computação gráfica</h2>

<p id="wx31">Em <a href="/wpt/Computa%C3%A7%C3%A3o_gr%C3%A1fica" title="Computação gráfica" wx:linktype="known" wx:pagename="Computação_gráfica" wx:page_id="16066" id="wx32">computação gráfica</a>, buffers duplos são usados para reduzir evidências visíveis do processo de desenho da tela. <a href="/wpt/Monitor_de_v%C3%ADdeo" title="Monitor de vídeo" wx:linktype="known" wx:pagename="Monitor_de_vídeo" wx:page_id="49096" id="wx33">Monitores de vídeo</a> atualizam a tela constantemente, em torno de sessenta vezes por segundo, a partir da <a href="/wpt/Mem%C3%B3ria_de_v%C3%ADdeo" title="Memória de vídeo" wx:linktype="known" wx:pagename="Memória_de_vídeo" wx:page_id="631823" id="wx34">memória de vídeo</a>, uma área da <a href="/wpt/Mem%C3%B3ria_de_computador" title="Memória de computador" wx:linktype="known" wx:pagename="Memória_de_computador" wx:page_id="91553" id="wx35">memória</a> localizada na <a href="/wpt/Placa_de_v%C3%ADdeo" title="Placa de vídeo" wx:linktype="known" wx:pagename="Placa_de_vídeo" wx:page_id="1491" id="wx36">placa de vídeo</a>. 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 <a href="/wpt/Software" title="Software" wx:linktype="known" wx:pagename="Software" wx:page_id="1709" id="wx37">software</a> ou <a href="/wpt/Hardware" title="Hardware" wx:linktype="known" wx:pagename="Hardware" wx:page_id="976" id="wx38">hardware</a>.</p>

<p id="wx39">Uma implementação em software usa uma página de vídeo armazenada na <a href="/wpt/Mem%C3%B3ria_RAM" title="Memória RAM" wx:linktype="known" wx:pagename="Memória_RAM" wx:page_id="1237" id="wx40">memória RAM</a> 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 <a href="/wpt/Overhead" title="Overhead" wx:linktype="known" wx:pagename="Overhead" wx:page_id="91482" id="wx41">sobrecarga</a> 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).</p>

<p id="wx42">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 <a href="/wpt/Ponteiro_%28programa%C3%A7%C3%A3o%29" title="Ponteiro (programação)" wx:linktype="known" wx:pagename="Ponteiro_(programação)" wx:page_id="249182" id="wx43">ponteiro</a> 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.</p>

<a id="Uso_em_sistemas_gerenciadores_de_bancos_de_dados" name="Uso_em_sistemas_gerenciadores_de_bancos_de_dados"/>
</wx:section><wx:section level="2" title="Uso em sistemas gerenciadores de bancos de dados" id="wxsec4"><h2 id="wx44">Uso em sistemas gerenciadores de bancos de dados</h2>

<p id="wx45">Em <a href="/wpt/Sistema_de_gerenciamento_de_banco_de_dados" title="Sistema de gerenciamento de banco de dados" wx:linktype="known" wx:pagename="Sistema_de_gerenciamento_de_banco_de_dados" wx:page_id="48833" id="wx46">sistema de gerenciamento de banco de dados</a>, buffers duplos são usados para maximizar os recursos da <a href="/wpt/CPU" title="CPU" wx:linktype="known" wx:pagename="CPU" wx:page_id="66459" id="wx47">CPU</a> durante operações de entrada/saída ao otimizar a alternância entre CPU e operações de E/S.</p>
</wx:section></wx:section></div>
<div id="wx_categorylinks">
<a href="/wpt/index.php?title=Especial:Categories&amp;article=Buffer_duplo" title="Especial:Categories" wx:linktype="known" wx:pagename="Especial:Categories" id="wx48">Categorias de páginas</a>: <span dir="ltr" id="wx49"><a href="/wpt/Categoria:Algoritmos_de_computa%C3%A7%C3%A3o_gr%C3%A1fica" title="Categoria:Algoritmos de computação gráfica" wx:linktype="known" wx:pagename="Categoria:Algoritmos_de_computação_gráfica" wx:page_id="559860" id="wx50">Algoritmos de computação gráfica</a></span> | <span dir="ltr" id="wx51"><a href="/wpt/Categoria:Sistemas_operativos" title="Categoria:Sistemas operativos" wx:linktype="known" wx:pagename="Categoria:Sistemas_operativos" wx:page_id="15127" id="wx52">Sistemas operativos</a></span></div>
<div id="wx_languagelinks">
Outras línguas: <a href="http://de.wikipedia.org/wiki/Doppelpufferung" class="external" wx:linktype="interwiki" wx:pagename="de:Doppelpufferung" id="wx53">Deutsch</a> | <a href="http://en.wikipedia.org/wiki/Double_buffering" class="external" wx:linktype="interwiki" wx:pagename="en:Double_buffering" id="wx54">English</a> | <a href="http://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B9%D0%BD%D0%B0%D1%8F_%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" class="external" wx:linktype="interwiki" wx:pagename="ru:Двойная_буферизация" id="wx55">Русский</a></div>
</body>
</html>
