Como o computador é capaz de salvar coisas antes de travar?

52

Fiquei com a impressão de que, quando um computador falhou, algo deu errado e não pode mais funcionar.

Eu queria saber como o computador é capaz de salvar as coisas antes de travar?

O computador é realmente capaz de saber quando vai falhar (e, portanto, informar todos os processos: " Salvar o mais rápido possível porque estou prestes a travar ")?

Se não, como é possível que programas como Chrome e Microsoft Word possam oferecer serviços de "restauração" após o computador travar?

    
por Pacerier 15.01.2012 / 17:30

15 respostas

6

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.

    
por 21.01.2012 / 20:37
82

O Chrome e o Microsoft Word salvam periodicamente seu estado atual enquanto você trabalha. Se o aplicativo ou o computador travar, quando os aplicativos forem relançados, eles procurarão um estado salvo no disco e o restaurarão para você. Eles não precisam prever o acidente; eles estão constantemente salvando seu estado no caso de algo dar errado.

    
por 15.01.2012 / 17:35
62

EDIT: Isso só funciona quando um aplicativo falha, não no Windows.

Desde o Windows Vista, há uma nova API que permite que o Windows chame uma função especial no aplicativo quando ele falha, para tentar recuperar os dados antes que eles sejam desligados. Funciona assim:

  • O aplicativo é iniciado
  • App chama função do Windows: quando eu travar, execute RecoverData()
  • ...
  • o aplicativo trava
  • O Windows executa RecoverData() no aplicativo
  • RecoverData() tenta recuperar dados sobre o documento aberto no momento, enquanto isso continua pingando o Windows para informar que ainda está ocupado com a recuperação.
  • Quando RecoverData() termina / expira / pára o ping, o Windows encerra o aplicativo e o reinicia.

Mais informações: link

    
por 15.01.2012 / 22:34
16

Bem, eles salvam o estado atual antes de falharem. Como um auto salvar a cada X segundos.

Eu acho que é preciso diferenciar:

  • Falha de hardware: somente capaz de recuperar com pontos de verificação anteriores
  • SO Crash: nenhuma maneira de o aplicativo salvar dados, o SO pode soltar algo como um dump principal
  • Falha do aplicativo: os recursos do SO para falha do aplicativo podem salvar informações
por 15.01.2012 / 17:35
10

Depende da gravidade do acidente. Um acidente muito grave (no nível mais baixo do computador) fará com que o computador simplesmente pare. O único trabalho que é salvo é cada aplicativo salvando seus dados periodicamente.

Para travamentos menos graves, o computador avisará cada programa que precisa ser desligado. SE o programa escuta esta mensagem, é aqui que o programa salvará os dados atuais. No entanto, nem todos os programas prestam atenção a esta mensagem.

    
por 15.01.2012 / 22:38
8

Os programas salvam eles afirmam periodicamente em um arquivo no disco. O computador não é capaz de saber. Na verdade, o despejo de memória nem é realizado usando o driver de disco - o sistema simplesmente exibe toda a memória.

    
por 15.01.2012 / 17:35
6

I was under the impression that when a computer has crashed, something went wrong and it can't perform anymore.

Sim, isso é completamente verdade. No entanto, de uma perspectiva lógica, seu programa não está sendo executado sem restrições no computador. O programa está sendo executado sob o sistema operacional!

I was wondering how is the computer able to save things before it crashes? Is the computer really capable of knowing when it's going to crash (and thus inform all processes: "Save ASAP because I'm about to crash") ?

Bem, no caso de um BSOD ou o kernel panic, o sistema operacional determinou que uma coisa realmente insegura iria acontecer (ponteiro de memória inválido, sobrescrever de alguma memória alocada para o kernel do SO, acesso a hardware inexistente, etc ...). Nesse caso, o sistema operacional solicita que todos os processos parem a execução, salvem o conteúdo da RAM no disco (já que o SO também é responsável por gerenciar a alocação de memória) e desliga ou reinicia com segurança o computador.

Os próprios aplicativos individuais travam quando há uma exceção não tratada gerada pelo programa, que se propaga no sistema operacional. Nesse caso, o sistema operacional interromperá a execução do programa e fechará todas as alças de memória / arquivo abertas.

Em ambos os casos acima, a execução do programa geralmente não é finalizada normalmente. Nesses casos, cabe aos aplicativos individuais recuperar seus próprios dados, pois eles simplesmente "param" de executar.

If not, how is it possible that programs like Chrome and Microsoft Word can offer "restoring" services after the computer has crashed?

IIRC, ambos os aplicativos periodicamente salvam os estados do aplicativo em disco para evitar perda de dados se a condição mencionada ocorrer. Por exemplo, o Word salva automaticamente uma cópia de backup de seu documento atual em intervalos de alguns minutos para que, no caso de uma reinicialização repentina, você ainda possa recuperar seus dados (alguns minutos de trabalho) sem precisar fez qualquer coisa.

Novamente, como desenvolvedor, é sua responsabilidade garantir que seu aplicativo possa lidar com essas situações.

    
por 16.01.2012 / 14:16
3

Sim, o processo de restauração de dados não é apenas para falhas de computador, é para falta de energia, falhas de programa, desistir sem salvar e muito mais ..

O que você disse é verdade, o computador não pode "saber" quando vai falhar, no caso do Word, ele periodicamente se auto-anula para que ele possa restaurar esses dados. No caso do Chrome, ele provavelmente armazena a informação para cada aba em algum lugar e a deleta em uma saída bem-sucedida, ou quando uma sessão nova e diferente começa .. ou provavelmente de outras maneiras também ... de qualquer forma, se não finalizar com sucesso, ele tem esses dados para restaurar.

Eu (obviamente) não trabalho para a Microsoft ou o Google, mas é provavelmente assim que funciona (ou perto disso).

    
por 15.01.2012 / 23:03
2

Um programa pode gravar um sinalizador no disco que apenas diz algo como "Na inicialização, se esse sinalizador estiver configurado, algo deu errado". Na inicialização, esse sinalizador é verificado para ver se está definido. Se for, o programa sabe que algo deu errado.

O sinalizador sempre funciona, porque pode ser definido assim que o programa é inicializado e desligado quando o programa sai normalmente. Se as saídas do programa resultarem em um erro inesperado, como um computador sendo desligado inesperadamente, o sinalizador ainda será definido, pois não saiu normalmente. Então o programa é capaz de dizer que ele não saiu normalmente na última vez que foi executado.

    
por 16.01.2012 / 04:51
2

Como o @bamboom diz, há vários tipos diferentes de "falhas" no computador que precisam ser tratadas de maneira diferente. Efetivamente, uma falta de energia é muito diferente de, digamos, uma divisão inteira por erro zero.

Com muitas linguagens de programação também suportando exceções (ramificação controlada para um manipulador de erro quando algo dá errado), existe a possibilidade de ter um manipulador de erros de nível superior que pode salvar o estado do aplicativo (incluindo qualquer documento aberto) , alterações feitas, etc.) quando ocorre um erro de aplicativo não manipulado. A idéia, então, é tentar ler tudo de volta quando o aplicativo for reiniciado. Dependendo do tipo de erro e exatamente como isso é implementado, nem sempre funciona, e é claro que cabe a cada aplicativo separado fazer algo significativo em face de um erro e com os dados resultantes - mas pode ser um estratégia surpreendentemente eficaz em ajudar o usuário a se recuperar de uma falha com uma quantidade mínima de trabalho perdido.

    
por 16.01.2012 / 09:41
2

Eu gostaria de um ponto de baixo nível aqui, pois há uma tag de sistema de arquivos.

Você poderia ter lembrado do sistema operacional Windows, que usava o sistema de arquivos FAT / FAT16 / FAT32. Às vezes houve problemas quando um usuário sofreu uma queda de energia e todo o sistema caiu. Depois de tentar reiniciar, diria que um arquivo estava faltando e não é possível inicializar. Isso aconteceu porque o FAT32 não acompanhava as operações que estava realizando de maneira transacional.

Em contraste, o novo sistema de arquivos NTFS recebeu o suporte à sua infraestrutura, o que significa baixo nível de SO e hardware as informações da camada de acesso seriam mantidas em uma condição de segurança estável por meio do registro de quaisquer ações a serem confirmadas.

    
por 16.01.2012 / 14:08
1

Em alguns aplicativos em alguns sistemas operacionais, é possível conectar-se a sinais como falhas de segmentação indicando violações de acesso à memória. Nesse caso, uma rotina simples pode salvar o máximo de dados possível. Se os dados são utilizáveis ou não, é outra questão - a falha pode tê-los corrompido. Embora seja possível que um aplicativo continue em execução após interromper um sinal, ele não é recomendado, pois pode estar em um estado instável com memória corrompida que pode causar mais problemas.

Outros aplicativos usam salvamento automático ou uma combinação de ambos - isso depende das necessidades do programa e do suporte da plataforma para capturar esses sinais.

    
por 16.01.2012 / 15:15
1

Uma falha no sistema é apenas outra rotina executada pelo sistema operacional. A razão pela qual um "Crash" acontece é porque um programa ou biblioteca falhou ao carregar ou não carregou corretamente e tem a capacidade de causar danos permanentes aos arquivos do sistema. Portanto, como precaução de segurança, o Windows força o desligamento / reinício e interrompe a gravação em todos os arquivos do sistema antes que qualquer um desses arquivos possa ser editado pelo programa / biblioteca delinquente.

Antes de desligar / reiniciar, ele executa as mesmas funções de um desligamento / reinício regular: ou seja, salvar arquivos do sistema, etc.

No que diz respeito a aplicativos únicos (Word / Chrome) salvando seu "Progress", essa é uma função interna do aplicativo, salvando seu progresso em intervalos específicos (que normalmente também podem ser alterados nas configurações do programa). Se você tiver uma falha no aplicativo / sistema, após a reinicialização, ele poderá ver o arquivo e perguntar se você deseja restaurar a sessão.

    
por 16.01.2012 / 19:06
1

Você pode estar falando sobre o desligamento do sistema operacional devido à perda de energia. Isso é indiscutivelmente um tipo de acidente.

A fonte de alimentação informa a placa-mãe (através de um fio de sinalização, suponho) sobre qualquer interrupção longa de sua entrada, a corrente CA de parede apropriada, bem antes de parar sua saída, que é a fonte adequada de corrente contínua para a placa principal. Isso pode ser feito porque armazena sua eletricidade em grandes capacitores. O sistema operacional recebe esse sinal na forma de uma interrupção de hardware.

Durante esse longo intervalo, há tempo suficiente para que um sistema de arquivos com buffer de gravação transfira todas as gravações armazenadas em buffer para a mídia de armazenamento físico permanente, além de executar algumas outras rotinas de desligamento.

Uma grande vantagem de um sistema de arquivos com buffer de gravação é que, ao classificar as gravações, ele pode reduzir os movimentos do braço nas unidades de disco rígido, tornando-as menos distantes.

Isso é semelhante ao que o @oleksii diz em sua resposta, exceto que em um sistema de arquivos de buffer de gravação, transações concluídas não são normalmente transferidas imediatamente, mas meramente armazenadas em buffer. Na falta de energia, as transações concluídas devem ser transferidas para o disco.

    
por 21.01.2012 / 18:43
0

Os aplicativos podem capturar sinais em C e salvar determinados dados. Um sinal que você pode obter acidentalmente é a Exceção aritmética de ponto flutuante SIGFPE (ANSI). Os erros incluem divisão por zero e estouro. Outro singal é o SIGINT que é gerado pressionando ctrl + C no console ou terminal que mata o aplicativo

    
por 16.01.2012 / 11:30