Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Por padrão, o Windows armazena em cache dados de arquivos lidos de discos e gravados em discos. Isso implica que as operações de leitura lêem os dados do arquivo de uma área na memória do sistema conhecida como cache de arquivos do sistema, em vez do disco físico. Correspondentemente, as operações de gravação gravam dados de arquivo no cache de arquivos do sistema em vez de no disco, e esse tipo de cache é chamado de cache write-back. O cache é gerenciado por objeto de arquivo.
O cache ocorre sob a direção do gerenciador de cache , que opera continuamente enquanto o Windows está em execução. Os dados de arquivo no cache de arquivos do sistema são gravados no disco em intervalos determinados pelo sistema operacional, e a memória usada anteriormente por esses dados de arquivo é liberada — isso é conhecido como liberação cache. A política de atrasar a gravação dos dados no arquivo e mantê-los no cache até que o cache seja liberado é chamada de gravação lenta e é acionada pelo gerenciador de cache em um intervalo de tempo determinado. O tempo em que um bloco de dados de arquivo é liberado é parcialmente baseado na quantidade de tempo que ele foi armazenado no cache e na quantidade de tempo desde que os dados foram acessados pela última vez em uma operação de leitura. Isso garante que os dados de arquivo lidos com frequência permaneçam acessíveis no cache de arquivos do sistema pelo tempo máximo.
Esse processo de cache de dados de arquivo é ilustrado na figura a seguir.
Conforme representado pelas setas sólidas na figura anterior, uma região de dados de 256 KB é lida em um "slot" de cache de 256 KB no espaço de endereçamento do sistema quando é solicitada pela primeira vez pelo gerenciador de cache durante uma operação de leitura de arquivo. Em seguida, um processo em modo de utilizador copia os dados neste espaço para o seu próprio espaço de endereço. Quando o processo tiver concluído seu acesso aos dados, ele grava os dados alterados de volta no mesmo slot no cache do sistema, conforme mostrado pela seta pontilhada entre o espaço de endereçamento do processo e o cache do sistema. Quando o gerenciador de cache determina que os dados não serão mais necessários por um determinado período de tempo, ele grava os dados alterados de volta no arquivo no disco, conforme mostrado pela seta pontilhada entre o cache do sistema e o disco.
A quantidade de melhoria de desempenho de E/S que o cache de dados de arquivo oferece depende do tamanho do bloco de dados de arquivo que está sendo lido ou gravado. Quando grandes blocos de dados de arquivo são lidos e gravados, é mais provável que leituras e gravações de disco sejam necessárias para concluir a operação de E/S. O desempenho de E/S será cada vez mais prejudicado à medida que mais desse tipo de operação de E/S ocorrer.
Nessas situações, o cache pode ser desativado. Isso é feito no momento em que o arquivo é aberto, passando FILE_FLAG_NO_BUFFERING como um valor para o dwFlagsAndAttributes parâmetro de CreateFile. Quando o cache está desativado, todas as operações de leitura e gravação acessam diretamente o disco físico. No entanto, os metadados do arquivo ainda podem ser armazenados em cache. Para liberar os metadados no disco, use a função FlushFileBuffers.
A frequência com que ocorre a lavagem é uma consideração importante que equilibra o desempenho do sistema com a confiabilidade do sistema. Se o sistema descarregar a cache com muita frequência, o número de grandes operações de escrita que ocorrerem irá degradar significativamente o desempenho do sistema. Se o sistema não for descarregado com frequência suficiente, a probabilidade é maior de que a memória do sistema seja esgotada pelo cache, ou uma falha súbita do sistema (como uma falha de energia no computador) aconteça antes da descarga. Neste último caso, os dados armazenados em cache serão perdidos.
Para garantir que a quantidade certa de despejo ocorra, o gestor de cache cria um processo em cada segundo chamado gravador preguiçoso. O processo de gravador preguiçoso enfileira um oitavo das páginas que não foram limpas recentemente para serem gravadas no disco. Ele reavalia constantemente a quantidade de dados que estão a ser libertados para obter o desempenho ideal do sistema e, se mais dados necessitarem ser escritos, colocará mais dados na fila. Escritores preguiçosos não apagam arquivos temporários, porque assumem que serão excluídos pelo aplicativo ou sistema.
Algumas aplicações, como o software de verificação de vírus, requerem que as suas operações de escrita sejam imediatamente gravadas no disco; O Windows fornece essa capacidade através de cache de escrita direta. Um processo permite o caching de gravação direta para uma operação de entrada/saída específica, passando o sinalizador FILE_FLAG_WRITE_THROUGH ao fazer sua chamada para CreateFile. Com o caching write-through ativado, os dados ainda são gravados na cache, mas o gestor de cache grava imediatamente os dados no disco em vez de incorrer num atraso usando o gravador preguiçoso. Um processo também pode forçar um esvaziamento de um ficheiro que abriu chamando a função FlushFileBuffers.
Os metadados do sistema de arquivos são sempre armazenados em cache. Portanto, para armazenar quaisquer alterações de metadados no disco, o arquivo deve ser esvaziado ou aberto com FILE_FLAG_WRITE_THROUGH.