[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Re: Metodo SYNC
- Subject: Re: Metodo SYNC
- From: Francisco Reverbel <reverbel at ime.usp.br>
- Date: Fri, 23 Apr 1999 16:20:25 -0300
> Francisco Reverbel wrote:
> >
> > Luis Campos de Carvalho writes:
> > >
> > > Pessoal, eu gostaria de saber o que deve fazer o metodo sync do DBFile.
> > >
> > > Eu acho que ele deve sincronizar o DBFile no disco, mas isso apenas se
> > > faz necessario para o pessoal dos niveis superiores ( Page e DBMan ). O DBFile
> > > nao precisa de sync, pois tudo o que vem / e vai dele eh diretamente gravado no
> > > RandomAccessFile...
> >
> > Sim, tudo que é escrito num DBFile é imediatamente escrito num
> > RandomAccessFile. Mas isso não significa que os dados sejam
> > imediatamente escritos em disco. O método write do RandomAccesssFile
> > simplesmente chama a system call write() do Linux. Como o Linux tem
> > buffers de I/O, para garantir que os dados sejam imediatamente escritos
> > em disco você precisa executar a system call fsync() do Linux (veja a
> > man page: man 2 fsync).
> >
> > O método sync() da class java.io.FileDescriptor executa a system call
> > fsync().
> >
> > Reverbel
>
> Entao o metodo sync so deve dar fsync no raf????
Sim, o metodo sync() da classe DBFile só dá um fsync() no FileDescriptor
do raf.
> eu achei que o sync procurava por todas as paginas de um dbfile no
> bufferpool, e forcava a escrita em disco de cada uma delas....Afinal,
> o que exatamente o metodo sync faz????
Não, a classe DBFile não sabe nada sobre buffers e nem conhece o buffer
pool. O BufferManager é quem conhece e usa os DBFiles. Os métodos flush
e flushAll das classes BufferManager e Page chamam o método sync da
classe DBFile. (É para isso que temos o sync no DBFile. Lembre-se que
todo acesso a disco é feito através da classe DBFile.)
Reverbel