Existem pelo menos dois motivos pelos quais você não pode fazer isso.
Primeiro. A hibernação funciona graças aos estados de energia da ACPI . Não é tão simples como "descarregar RAM para o disco rígido e desligar". A RAM não é tudo, há também dispositivos que precisam ser revertidos para o estado anterior. É aí que o ACPI se junta à festa - ele permite que você suspenda os dispositivos ao entrar no estado S5 e os retome ao retornar a S0. Mas S5 implica desligamento, então você não pode hibernar o computador sem desligá-lo.
Segundo. Vamos supor que temos algum hardware que permita a hibernação de um computador em execução, mantendo-o ligado. Isso cria um problema semelhante àqueles que você poderia enfrentar ao lidar com computação paralela.
Os computadores funcionam em sequência. Eles executam séries de instruções simples (muito simples, como "aumentar esse número por 4"), uma a uma. PCs modernos têm CPUs multicore e poderiam, teoricamente, processar várias instruções de uma vez, mas nem sempre é possível. Por exemplo, digamos que temos três instruções.
- Leia X do usuário.
- Multiplique X por 2.
- Incrementar X por 7.
O passo 2 não pode ser processado até que o passo 1 seja concluído, porque X é desconhecido nesse momento. De maneira semelhante, a etapa 3 não pode ser processada até que a etapa 2 seja concluída, pois é muito provável que o valor de X mude na etapa 2. Essas etapas devem ser processadas uma a uma.
Agora vamos imaginar que temos um computador que processa transferências bancárias. Você tem uma quantia em dinheiro na sua conta bancária e deseja transferir US $ 100 para a conta do seu amigo. O algoritmo se parece com isso e tem que ser processado passo a passo por algum motivo:
- Reduza o valor associado à sua conta em US $ 100.
- Incremente o valor na conta do seu amigo em $ 100.
- A transferência foi processada, portanto, remova-a da fila de transferência.
O computador começa a processar essa transferência e, de repente, entre as etapas 1 e 2, ela é desativada devido a uma queda de energia.
Agora, se o computador não foi "hibernado, mas vivo", ele vai começar a arrancar e perceber que algo deu errado - ele saberá que deve verificar todas as operações recentes. Está tudo bem.
Mas se foi "hibernado, mas vivo" antes de começar a processar o passo 1, há um problema - o computador não sabe que algo deu errado, porque lembra que estava tudo bem quando estava em hibernação. Mas os dados no disco rígido foram atualizados e US $ 100 já foram retirados da sua conta, mas ainda não foram transferidos para a conta do seu amigo. Mas o computador não sabe disso, porque aconteceu depois de hibernar.
O computador levará outros $ 100 da sua conta e transferirá para o seu amigo. Os primeiros US $ 100 acabaram.
Existem centenas de milhares de problemas como esse que podem surgir "hibernando" um sistema em execução.