Quando um computador "trava", pode, por exemplo, ser 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, página corrompida tabelas) que similarmente impede fazer qualquer coisa, ou pode ser devido a alguma condição que simplesmente evita "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 tenha simplesmente ficado sem armazenamento.
Nestas últimas situações, o sistema operacional ainda pode funcionar dentro de limites e pode pelo menos completar operações de disco que estão em andamento, arquivos muito próximos, etc. Além disso, se um pouco mais de função for possível, o sistema operacional poderá dizer os vários processos de aplicação para fechar-se de forma limpa.
Mas mesmo que o sistema fique "rígido", o sistema como um todo e aplicações individuais podem ter mantido um sistema de "periódicos" e / ou "pontos de verificação" para permitir o estado do sistema como um todo e aplicações individuais para ser restaurado para um ponto "atômico", onde tudo é "internamente consistente" e onde um mínimo de dados importantes foi perdido.
Tudo isso 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 haver ou não notificação antecipada, e o aviso de "adiantamento" pode ser uma fração de segundo ou (com UPS ou uma bateria de laptop com defeito) vários minutos. O que pode ser feito depende da quantidade de aviso.
Na maioria dos casos, com um sysyem de desktop sem UPS, há na melhor das hipóteses um tempo para "quiesce" das operações de disco para que nenhum disco esteja no meio de uma gravação quando a energia finalmente desaparecer. Isso evita gerar setores defeituosos no disco. Costumava ser, quando a RAM era muito menor, que poderia haver tempo suficiente (com grandes capacitores na fonte de alimentação, ou mesmo usando a energia armazenada no rotor da unidade de disco para gerar eletricidade) para gravar RAM no disco antes da energia caiu, mas essa possibilidade praticamente desapareceu quando a RAM cresceu mais de 100M ou mais.
[E note 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 determinada palavra sendo lida / escrita quando a energia falhou pode ser corrompida). Isso tornou mais fácil para os sistemas antigos se recuperarem de falhas de energia.]
No entanto, com algo parecido com um no-break (que pode dar de alguns minutos a várias horas de energia adicional), há várias outras opções. Uma delas é simplesmente desligar o sistema, como se você tivesse solicitado "desligar". Isso faz com que cada aplicativo seja finalizado e, em seguida, o sistema como um todo grava as tabelas permanentes e desliga. Isso pode levar muito tempo (como eu tenho certeza que muitos de vocês notaram). Mas também é possível usar uma estratégia de "hibernação", em que a RAM é gravada no disco como um único bloco e, em seguida, o sistema é desligado. No cenário de "hibernação", ao restaurar a energia, a RAM é lida de volta para exatamente de onde foi escrita, alguns bits aqui e ali são misturados e a execução é retomada de onde parou.
Em alguns sistemas "big iron" mais antigos, uma estratégia de semi-hibernação 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 (particularmente nos controladores de E / S) não puderam ser salvos / restaurados de forma confiável para permitir a operação contínua.