Primeiro, a quantidade de RAM que precisa ser salva é surpreendentemente pequena. Na verdade, apenas o conjunto de páginas sujas mapeadas ("write-back preguiçoso") precisa ser liberado, assim como todas as páginas privadas que foram gravadas e realocadas pelo código executável precisam ser gravadas.
- Os segmentos de texto dos executáveis são sempre suportados pelo mapeamento de arquivos. Isso também é verdade para pelo menos alguns DLLs (mas não todos, depende se eles precisam ser realocados).
- A memória que é apoiada de forma semelhante pelos mapeamentos de arquivos pode ser descartada (presumindo que não seja CoW ou RW e suja).
- O write-back lento ainda terá que ocorrer, mas além disso, os caches podem ser descartados.
- A memória que foi alocada mas não foi gravada (geralmente a maior parte dos dados do aplicativo!) é apoiada pela página zero e pode ser descartada.
- A maior parte das páginas de memória que estão no status de "standby" (o atual conjunto de trabalho residente por processo no Windows é surpreendentemente pequeno, apenas 16MB) foi copiado para o arquivo de paginação no fundo em algum momento e pode ser descartado.
- Regiões da memória que são mapeadas por determinados dispositivos, como a placa gráfica, podem (possivelmente) não precisar ser salvas. Às vezes, os usuários ficam surpresos ao conectar 8GiB ou 16GiB em um computador, e 1GiB ou 2GiB estão "desaparecidos" sem razão aparente. As principais APIs gráficas exigem que os aplicativos consigam invalidar o conteúdo do buffer "sob algumas condições" (sem dizer exatamente o que isso significa). Portanto, não é irracional esperar que a memória que é fixada pelo driver gráfico seja descartada também. A tela vai escurecer, afinal.
Em segundo lugar, ao contrário de você copiar um arquivo, despejar o conjunto de páginas de RAM que precisam ser salvo disco é uma única gravação contígua, seqüencial do ponto de vista da unidade. A API do Win32 expõe até mesmo uma
função no nível do usuário para esta mesma operação. Recolher gravação é diretamente suportado pelo hardware e funciona tão rápido quanto o disco é fisicamente capaz de aceitar dados (o controlador puxará dados diretamente via DMA).
Há várias condições prévias para que isso funcione (como alinhamento, tamanho de bloco, fixação), e não funciona bem com o armazenamento em cache e não existe "write-back lento" (que é uma otimização muito desejável sob operação normal ).
Essa é a razão pela qual
nem toda gravação funciona assim o tempo todo. No entanto, quando o sistema está salvando o arquivo de hibernação, todas as pré-condições são automaticamente atendidas (todos os dados são alinhados à página, tamanho da página e fixados) e o cache acaba se tornando irrelevante porque o computador será desligado em um momento.
Em terceiro lugar, fazer uma única gravação contígua é muito favorável para discos giratórios e para discos de estado sólido.
O arquivo de troca e o arquivo de hibernação são geralmente alguns dos arquivos mais antigos criados e reservados no disco. Eles geralmente têm um, no máximo dois fragmentos. Assim, a menos que setores estejam danificados e o disco tenha que realocar setores físicos, uma gravação sequencial lógica se traduz em uma gravação seqüencial física em um disco giratório.
Nenhuma operação read-modify-write é necessária no disco quando uma quantidade enorme de dados sequenciais contíguos está sendo gravada. Esse problema é menos pronunciado em discos rígidos giratórios que podem gravar setores únicos que são bem pequenos (contanto que você não escreva bytes únicos, o que geralmente impede o armazenamento em cache, o dispositivo não precisa buscar o conteúdo original e gravar a versão modificada).
Isto é, no entanto, algo que é muito perceptível no SSD, onde cada escrita significa que, por ex. um bloco de 512kB (que é um número normal, mas poderia ser maior) deve ser lido e modificado pelo controlador, e escrito de volta para um bloco diferente. Embora você possa, em princípio, gravar (mas não sobrescrever) unidades menores em discos flash, você só pode apagar blocos enormes, é como o hardware funciona. Esta é a razão pela qual os SSDs se saem muito melhor em gravações sequenciais enormes.