Quando um computador "falha", pode ser, por exemplo, devido a uma falha de energia "abrupta" (caso em que nada pode ser feito), pode ser devido a algum tipo de evento interno desagradável (por exemplo, tabelas de páginas corrompidas) que Da mesma forma, impede-se de fazer qualquer coisa, ou pode ser devido a alguma condição que simplesmente impede "operações adicionais" de alguma forma - talvez novos processos não possam ser iniciados, talvez a exibição não possa ser atualizada, talvez o sistema simplesmente fique sem armazenamento.
Nessas últimas situações, o sistema operacional ainda pode funcionar, dentro de limites, e pode pelo menos concluir operações de disco que estavam em andamento, fechar bem arquivos etc. Além disso, se um pouco mais de função for possível, o sistema operacional poderá informar os vários aplicativos processos para se desligar de forma limpa.
Porém, mesmo que o sistema fique "rígido", o sistema como um todo e os aplicativos individuais podem ter mantido um sistema de "diários" e / ou "pontos de verificação" para permitir que o estado do sistema como um todo e aplicativos individuais sejam restaurados até um ponto "atômico", onde tudo é "internamente consistente" e onde um mínimo de dados importantes foi perdido.
Isso tudo não é realizado com um único mecanismo, mas com camadas de funcionalidade no nível do sistema e do aplicativo.
No que diz respeito especificamente a falhas de energia, pode ou não haver uma notificação prévia, e o aviso de "antecedência" pode ser uma fração de segundo ou (com o no-break ou a bateria do laptop com falha) vários minutos. O que pode ser feito depende da quantidade de aviso.
Na maioria dos casos, com um sistema de desktop sem UPS, na melhor das hipóteses, é possível "interromper" as operações do disco para que nenhum disco fique no meio de uma gravação quando a energia finalmente desaparecer. Isso evita a geração de setores defeituosos no disco. Quando a RAM era muito menor, costumava haver tempo suficiente (com grandes capacitores na fonte de alimentação, ou mesmo, estranhamente, usando a energia armazenada no rotor da unidade de disco para gerar eletricidade) para gravar a RAM no disco antes da energia caiu, mas essa possibilidade praticamente desapareceu quando a RAM cresceu mais de 100 milhões.
[E observe que, antigamente, quando as memórias eram feitas com "núcleos" magnéticos, a RAM era inerentemente preservada quando a energia era perdida (embora uma palavra específica sendo lida / gravada quando a energia falha pudesse estar corrompida). Isso facilitou a recuperação desses sistemas antigos por falta de energia.]
No entanto, com algo parecido com um no-break (que pode fornecer de alguns minutos a várias horas de energia adicional), existem várias outras opções. Uma é simplesmente desligar o sistema, como se você tivesse solicitado "desligar". Isso faz com que cada aplicativo termine sozinho e, em seguida, o sistema como um todo grava tabelas permanentes e é encerrado. Isso pode levar um longo tempo (como tenho certeza de que muitos de vocês notaram). Mas também é possível usar uma estratégia de "hibernação", onde a RAM é gravada no disco como um único bloco e, em seguida, o sistema é desligado. No cenário "hibernar", ao restaurar a energia, a RAM é lida de volta exatamente de onde foi gravada, alguns bits aqui e ali são distorcidos e a execução é retomada de onde parou.
Em alguns sistemas antigos de "grande ferro", uma estratégia semi-hibernada era usada para fazer um desligamento de emergência: a memória seria gravada como acima, mas quando a energia fosse restaurada e a memória lida, ocorreria um desligamento padrão. Isso foi feito porque alguns bits do estado do sistema (principalmente nos controladores de E / S) não puderam ser salvos / restaurados com confiabilidade para permitir a operação continuada.